Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import
- getResolution
- setForeground
- setBackground
- set
- fill
- from require('component').gpu
- import pull from require 'event'
- import ceil, random from math
- import rep from string
- -- Размеры экрана
- width, height = getResolution()
- width /= 2 -- потому что по горизонтали наши клетки займут 2 символа
- height -= 1 -- потому что внизу будет статус
- -- Цвета
- white = 0xFFFFFF
- black = 0x000000
- gray = 0x222222
- green = 0x00BB33
- yellow = 0xFFC04C
- red = 0xFF0000
- pink = 0xFF0074
- violet = 0xD600FF
- blue = 0x4E5AFF
- cyan = 0x4ED7FF
- teal = 0x00CC99
- -- Заготовка для сетки - один ряд клеток
- grid_line = rep("▒▒ ", ceil(width / 2))
- -- Наша цель
- target = { x: 0, y: 0 }
- -- Количество попыток
- maxAttemts = ceil(width * height / 150) -- 150 - магический коэффициент сложности, больше - сложнее, меньше - легче
- attempts = maxAttemts
- -- Очищаем экран
- clear = () ->
- setForeground white
- setBackground black
- fill 1, 1, width * 2, height + 1, ' '
- -- Рисуем сетку
- grid = ->
- setForeground gray
- setBackground black
- for y = 1, height
- set (if y % 2 == 0 then 1 else 3), y, grid_line
- -- Открываем одну клетку
- sign = (x, y) ->
- if x == target.x and y == target.y then black, white, "[]"
- elseif x == target.x and y < target.y then white, green, "▼▼" -- по неведомой мне причине, стрелки вниз в новом шрифте ОС 1.6 нету =)
- elseif x == target.x and y > target.y then white, violet, "↑↑"
- elseif x < target.x and y < target.y then white, teal, "↘↘"
- elseif x < target.x and y == target.y then white, cyan, "→→"
- elseif x < target.x and y > target.y then white, blue, "↗↗"
- elseif x > target.x and y < target.y then white, yellow, "↙↙"
- elseif x > target.x and y == target.y then white, red, "←←"
- elseif x > target.x and y > target.y then white, pink, "↖↖"
- cell = (x, y) ->
- fore, back, text = sign x, y
- setForeground fore
- setBackground back
- set x * 2 - 1, y, text
- -- Рисуем статус
- status = (state) ->
- setForeground white
- setBackground black
- fill 1, height + 1, width * 2, height + 1, ' '
- set 2, height + 1, "[Угадай, где клад!]"
- switch state
- when 'win'
- setForeground green
- set 24, height + 1, "Вы победили!"
- when 'lose'
- setForeground red
- set 24, height + 1, "Вы проиграли!"
- else
- set 24, height + 1, "Попыток осталось: #{attempts}"
- set width * 2 - 10, height + 1, "[R] [Q]"
- -- Генерируем цель
- setTarget = ->
- target = { x: random(1, width), y: random(1, height) }
- -- Инициализируем игру
- newGame = ->
- attempts = maxAttemts
- setTarget!
- clear!
- grid!
- status!
- -- Поехали!
- newGame!
- while true
- -- Ждем события
- event, _, x, y = pull!
- -- Обрабатываем его
- switch event
- when 'touch' -- Если был клик
- -- Открываем клетку, если остались попытки
- if attempts > 0
- x = ceil(x / 2)
- cell x, y
- attempts -= 1
- -- Обновляем инфу
- if x == target.x and y == target.y
- attempts = 0
- status('win')
- elseif attempts == 0
- status('lose')
- else
- status!
- when 'key_down'
- switch x
- when 113 -- Q: выход из игры
- break
- when 114 -- R: перезапуск
- newGame!
- clear!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement