Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local term = require("term")
- local event = require("event")
- local computer = require("computer")
- local component = require("component")
- local unicode = require("unicode")
- local fs = require("filesystem")
- local gpu = component.gpu
- local serialization = require("serialization")
- local xSize, ySize = gpu.getResolution()
- local width = 63
- local height = 25
- local xPosCells
- local tempXPosCells
- local xPosTitle
- local tempXPosTitle
- local yPosTitle = 8
- local yPosCells = 10
- local cellsXPos = {}
- local title
- local words = {}
- local word1 = {}
- local word2 = {'_','_','_','_','_','_','_','_','_'}
- local score = 0
- local point = 0
- local heard = 5
- local sameLetter = false
- local noWords = false
- local nicknames
- local records
- local name
- local count
- local heardPlus
- local tempRandom
- local record = 0
- local play = true
- local colors = {
- background = 0x7A8B8B,
- button = 0x00688B,
- textButton = 0xE0FFFF,
- input = 0xBBFFFF,
- cell = 0x2F4F4F,
- text = 0x000000,
- heard = 0xFF0000,
- correctLetter = 0x7CFC00,
- incorrectLetter = 0xB22222,
- defBg = 0x000000,
- defText = 0xFFFFFF
- }
- --Наша клавиатура где (x,y,символ, надпись на клавиатуре)
- local keyboard = {
- {8, 16,"й"," Й "},
- {12, 16, "ц", " Ц "},
- {16, 16, "у", " У "},
- {20, 16 , "к", " К "},
- {24, 16, "е", " Е "},
- {28, 16, "н", " Н "},
- {32, 16, "г", " Г "},
- {36, 16, "ш", " Ш "},
- {40, 16, "щ", " Щ "},
- {44, 16, "з", " З "},
- {48, 16, "х", " Х "},
- {52, 16, "ъ", " Ъ "},
- {10, 18, "ф", " Ф "},
- {14, 18, "ы", " Ы "},
- {18, 18, "в", " В "},
- {22, 18, "а", " А "},
- {26, 18, "п", " П "},
- {30, 18, "р", " Р "},
- {34, 18, "о", " О "},
- {38, 18, "л", " Л "},
- {42, 18, "д", " Д "},
- {46, 18, "ж", " Ж "},
- {50, 18, "э", " Э "},
- {14, 20, "я", " Я "},
- {18, 20, "ч", " Ч "},
- {22, 20, "с", " С "},
- {26, 20, "м", " М "},
- {30, 20, "и", " И "},
- {34, 20, "т", " Т "},
- {38, 20, "ь", " Ь "},
- {42, 20, "б", " Б "},
- {46, 20, "ю", " Ю "}
- }
- local selectKey
- gpu.setResolution(width, height)
- local pathToWords = "words.txt"
- local function loadWords() --Загружаем слова
- local bool = true
- gpu.setBackground(colors.background)
- if fs.exists(pathToWords) then
- local array = {}
- local file = io.open(pathToWords, "r")
- local str = file:read("*a")
- array = serialization.unserialize(str)
- file:close()
- words = array
- else
- if component.isAvailable("internet") then
- os.execute("wget -f http://pastebin.com/raw/rc7qrrHA words.txt -q")
- term.clear()
- gpu.set(18, 12, "Загружен файл со словами!")
- os.sleep(5)
- term.clear()
- loadWords()
- else
- term.clear()
- gpu.set(4,12, "Вставьте Интернет карту или скачайте words.txt вручную.")
- gpu.set(10,13,"По ссылке http://pastebin.com/rc7qrrHA")
- gpu.setBackground(colors.button)
- gpu.setForeground(colors.textButton)
- gpu.set(4,24,"[<<Назад]")
- gpu.setBackground(colors.background)
- gpu.setForeground(colors.text)
- while bool do
- local e = {event.pull("touch")}
- if e[4] == 24 then
- if e[3]>3 and e[3]<14 then
- play = false
- noWords = true
- bool = false
- end
- end
- end
- end
- end
- end
- --Берем рандомное слово
- local function getRandomWord()
- local randomN = math.modf(math.random(1,#words))
- if tempRandom ~= randomN then --Проверка чтоб небыло 2 подряд
- title = words[randomN].title
- word1 = words[randomN].word
- else
- getRandomWord()
- end
- tempRandom = randomN
- end
- local pathToRecords = "recordsGtW.txt" --путь к файлу с рекордами
- local function saveRecord() --Сохраняем рекорды
- local file = io.open(pathToRecords, "w")
- local array = {["nicknames"] = nicknames, ["records"] = records}
- file:write(serialization.serialize(array))
- file:close()
- end
- local function saveScore() --сохраняем наши заработанные очки
- for i = 1, #nicknames do
- if name == nicknames[i] then
- if score >= record then
- records[i] = score
- end
- end
- end
- saveRecord()
- end
- local function loadRecord() --Загружаем рекорды
- if fs.exists(pathToRecords) then
- local array = {}
- local file = io.open(pathToRecords, "r")
- local str = file:read("*a")
- array = serialization.unserialize(str)
- file:close()
- nicknames = array.nicknames
- records = array.records
- else --или создаем новые дефолтные пустые таблицы
- fs.makeDirectory(fs.path(pathToRecords))
- nicknames = {}
- records = {}
- saveRecord()
- end
- end
- local function checkName(name) --Проверка на наличие имени в базе
- for i =1, #nicknames do
- if name == nicknames[i] then
- record = records[i]
- return false
- end
- end
- return true
- end
- local function addPlayer() --Создаем учетку пользователю если его нет в базе
- if checkName(name) then
- table.insert(nicknames, name)
- table.insert(records, record)
- saveRecord()
- end
- end
- local function getXPosTitle() --Получаем х позицию вопроса
- tempXPosTitle = unicode.len(title)
- tempXPosTitle = width - tempXPosTitle
- xPosTitle = math.modf(tempXPosTitle/2)
- tempXPosTitle = xPosTitle
- end
- local function getXPosCells() --Получаем х позицию ячеек
- tempXPosCells = #word1
- tempXPosCells = tempXPosCells*5 - 1
- tempXPosCells = width - tempXPosCells
- xPosCells = tempXPosCells/2
- tempXPosCells = xPosCells
- end
- getXPosCells()
- local function paintMenu() --Отрисовываем меню
- gpu.setResolution(width, height)
- gpu.setBackground(colors.background)
- term.clear()
- gpu.setForeground(colors.text)
- gpu.set(27, 3, "Угадай-Ка")
- gpu.setForeground(colors.textButton)
- gpu.setBackground(colors.button)
- gpu.set(25, 15, "[Начать игру]")
- gpu.set(25, 17, "[Топ Лидеров]")
- gpu.set(27, 19,"[Правила]")
- gpu.set(28, 21, "[Выход]")
- gpu.setForeground(colors.text)
- end
- local function paintScene() --Отрисовываем игровой экран
- getXPosCells()
- getXPosTitle()
- gpu.setBackground(colors.background)
- term.clear()
- gpu.set(xPosTitle, yPosTitle, title)
- for i=1, #word1 do
- table.insert(cellsXPos, tempXPosCells)
- gpu.setBackground(colors.cell)
- gpu.setForeground(colors.text)
- gpu.set(tempXPosCells, yPosCells, " ")
- tempXPosCells = tempXPosCells + 5
- gpu.setBackground(colors.background)
- end
- for i=1, #keyboard do
- gpu.setBackground(colors.button)
- gpu.set(keyboard[i][1], keyboard[i][2], keyboard[i][4])
- gpu.setBackground(colors.background)
- end
- local tempN = unicode.len(name)
- tempN = width - (tempN + 17)
- gpu.set(tempN,2,name.." :Текущий игрок")
- gpu.set(2,2,"Ваш рекорд: "..record)
- gpu.set(49,3, " :Ваши жизни")
- gpu.setForeground(colors.heard)
- gpu.set(44,3, "❤x"..heard)
- gpu.setForeground(colors.text)
- gpu.set(2,3,"Текущий счет: "..score)
- end
- local function paintRules() --Отрисовываем правила
- local bool = true
- gpu.setBackground(colors.background)
- term.clear()
- gpu.setForeground(colors.text)
- gpu.set(25,7,"Правила игры!")
- gpu.set(4,11," Доброго времени суток, уважаемый игрок!")
- gpu.set(4,12," Правила <<Угадай-Ки>> очень просты, перед вами будет")
- gpu.set(4,13,"n-количество ячеек за которыми буквы. Сверху")
- gpu.set(4,14,"подсказка. Чтоб выбрать букву нажмите ее на экранной")
- gpu.set(4,15,"клавиатуре. Если угадаете она появится в поле и на")
- gpu.set(4,16,"ЭК станет зеленной, не угадаете - красной. Есть 4 режима.")
- gpu.set(4,17,"Если не угадали букву - минус жизнь. Каждое угаданное слово")
- gpu.set(4,18,"дает свое количество очков в зависимости от режима игры.")
- gpu.set(4,19,"Каждая угаданая подряд буква умножает очки на кол-во")
- gpu.set(4,20,"угаданых букв подряд. Удачи в игре!!")
- gpu.setBackground(colors.button)
- gpu.setForeground(colors.textButton)
- gpu.set(4,24,"[<<Назад]")
- gpu.setBackground(colors.background)
- gpu.setForeground(colors.text)
- while bool do
- local e = {event.pull("touch")}
- if e[4] == 24 then
- if e[3]>3 and e[3]<14 then
- bool = false
- guessTW()
- end
- end
- end
- end
- local function clearLine(a) --Просто отчиистка линии для сокращения кода
- term.setCursor(1,a)
- term.clearLine()
- end
- local function guessTheWord() --Наш алгоритм для сранения букв и работа с нимм
- local goodLetter = false
- local haveSpace = false
- local key = selectKey
- local letter = key[3]
- local tempScore
- local bool = true
- for i = 1, #word1 do
- if word1[i] == letter then
- if word1[i] ~= word2[i] then
- point = point + 1
- tempScore = point*count
- score = score + tempScore
- gpu.set(16,3, tostring(score))
- if record>=score then
- gpu.set(14,2, tostring(record))
- else
- record = score
- gpu.set(14,2, tostring(record))
- end
- goodLetter = true
- gpu.set(25,12,"Верная буква!")
- elseif word1[i] == word2[i] then
- sameLetter = true
- end
- word2[i] = letter
- gpu.setBackground(colors.cell)
- gpu.setForeground(colors.textButton)
- gpu.set(cellsXPos[i],10, key[4])
- gpu.setForeground(colors.text)
- gpu.setBackground(colors.correctLetter)
- gpu.set(key[1],key[2],key[4])
- gpu.setBackground(colors.background)
- gpu.setForeground(colors.text)
- clearLine(12)
- gpu.set(25,12,"Верная буква!")
- end
- if word2[i] == "_" then
- haveSpace = true
- end
- end
- if goodLetter then
- if not haveSpace then
- heard = heard + heardPlus
- gpu.setForeground(colors.heard)
- gpu.set(47,3," ")
- gpu.set(47,3, tostring(heard))
- gpu.setForeground(colors.text)
- clearLine(12)
- if heardPlus == 0 then
- gpu.set(18, 12,"Слово отгадано, продолжим?")
- elseif heardPlus == 2 then
- gpu.set(7, 12,"Слово отгадано, вы получили две жизни, продолжим?")
- else
- gpu.set(6, 12,"Слово отгадано, вы получили одну жизнь, продолжим?")
- end
- gpu.setForeground(colors.textButton)
- gpu.setBackground(colors.button)
- gpu.set(35,14,"[Далее >>]")
- gpu.set(18,14,"[Выход]")
- gpu.setForeground(colors.text)
- while bool do
- local e = {event.pull("touch")}
- if e[4] == 14 then
- if e[3]>17 and e[3]<26 then
- play = false
- bool = false
- heardScore = heard * count * point
- score = score + heardScore
- saveScore()
- score = 0
- guessTW()
- elseif e[3]>34 and e[3]<44 then
- bool = false
- saveScore()
- game()
- end
- end
- end
- end
- elseif sameLetter then
- clearLine(12)
- gpu.set(21,12,"Эта буква уже введена")
- sameLetter = false
- else
- point = 0
- clearLine(12)
- gpu.set(24,12,"Неверная буква!")
- gpu.setBackground(colors.incorrectLetter)
- gpu.set(key[1],key[2],key[4])
- gpu.setBackground(colors.background)
- heard = heard - 1
- if heard ~= 0 then
- gpu.setForeground(colors.heard)
- gpu.set(47,3," ")
- gpu.set(47,3, tostring(heard))
- gpu.setForeground(colors.text)
- else
- term.clear()
- gpu.set(15,11,"Игра окончена!!! Ваш счет: "..tostring(score))
- score = 0
- os.sleep(8)
- play = false
- guessTW()
- end
- end
- end
- local function sortTop() --Сортируем Топ игроков
- for i=1, #records do
- for j=1, #records-1 do
- if records[j] < records[j+1] then
- local r = records[j+1]
- local n = nicknames[j+1]
- records[j+1] = records[j]
- nicknames[j+1] = nicknames[j]
- records[j] = r
- nicknames[j] = n
- end
- end
- end
- saveRecord()
- end
- function printRecords() --Выводим рекорды на экран
- local bool = true
- sortTop()
- gpu.setBackground(colors.background)
- term.clear()
- local xPosName = 15
- local xPosRecord = 40
- local yPos = 2
- loadRecord()
- gpu.setForeground(colors.text)
- gpu.set(25,2,"Toп Лидеров")
- gpu.setForeground(colors.textButton)
- if #nicknames <= 15 then
- for i = 1, #nicknames do
- yPos= yPos+1
- gpu.set(xPosName, yPos, nicknames[i] )
- gpu.set(xPosRecord, yPos, tostring(records[i]))
- end
- else
- for i = 1, 15 do
- yPos= yPos+1
- gpu.set(xPosName, yPos, nicknames[i] )
- gpu.set(xPosRecord, yPos, tostring(records[i]))
- end
- end
- gpu.setBackground(colors.button)
- gpu.set(4,24,"[<<Назад]")
- gpu.setBackground(colors.background)
- while bool do
- local e = {event.pull("touch")}
- if e[4] == 24 then
- if e[3]>3 and e[3]<14 then
- bool = false
- guessTW()
- end
- end
- end
- end
- function game() --Наша игра
- cellsXPos = {}
- word2 = {'_','_','_','_','_','_','_','_','_'}
- term.clear()
- getRandomWord()
- paintScene()
- while play do
- local e = {event.pull("touch")}
- for i=1, #keyboard do
- if e[4] == keyboard[i][2] then
- if e[3] > keyboard[i][1]-1 and e[3] < keyboard[i][1]+3 then
- selectKey = keyboard[i]
- guessTheWord()
- end
- end
- end
- end
- end
- local function selectComplexity() --Выбор уровня сложности
- local bool = true
- gpu.setBackground(colors.background)
- term.clear()
- gpu.setBackground(colors.button)
- gpu.setForeground(colors.textButton)
- gpu.set(27,10,"[Хардкор]")
- gpu.set(27,13,"[Сложная]")
- gpu.set(27,16,"[Средняя]")
- gpu.set(28,19,"[Легко]")
- gpu.set(4,24,"[<<Назад]")
- gpu.setBackground(colors.background)
- gpu.setForeground(colors.text)
- gpu.set(22,8,"Выберите сложность:")
- gpu.set(9,11,"Всего 10 жизней на игру и за букву 100 очков!")
- gpu.set(5,14,"2 жизни в начале и за букву 50 очков, за слово жизнь!")
- gpu.set(6,17,"5 жизней в начале и за букву 10 очков, за слово жизнь!")
- gpu.set(6,20,"10 жизней в начале и за букву 2 очка, за слово 2 жизни!")
- while bool do
- local e = {event.pull("touch")}
- if e[4] == 10 then
- if e[3]>26 and e[3]<36 then
- bool = false
- heard = 10
- heardPlus = 0
- count = 100
- game()
- end
- elseif e[4] == 13 then
- if e[3]>26 and e[3]<36 then
- bool = false
- heard = 2
- heardPlus = 1
- count = 50
- game()
- end
- elseif e[4] == 16 then
- if e[3]>26 and e[3]<36 then
- bool = false
- heard = 5
- heardPlus = 1
- count = 10
- game()
- end
- elseif e[4] == 19 then
- if e[3]>27 and e[3]<35 then
- bool = false
- heard = 10
- heardPlus = 2
- count = 2
- game()
- end
- elseif e[4] == 24 then
- if e[3]>3 and e[3]<14 then
- bool = false
- guessTW()
- end
- end
- end
- end
- function guessTW() -- Запуск нашей игры
- record = 0
- loadRecord()
- loadWords()
- paintMenu()
- while true do
- local e = {event.pull("touch")}
- if e[4] == 15 then
- if e[3]>24 and e[3]<33 then
- if not noWords then
- name = e[6]
- addPlayer(name)
- for i = 1, #nicknames do
- if name == nicknames[i] then
- record = records[i]
- end
- end
- play = true
- point = 0
- selectComplexity()
- end
- end
- elseif e[4] == 17 then
- if e[3]>24 and e[3]<37 then
- sortTop()
- printRecords()
- end
- elseif e[4] == 19 then
- if e[3]>26 and e[3]<36 then
- paintRules()
- end
- elseif e[4] == 21 then
- if e[3]>27 and e[3]<35 then
- gpu.setForeground(colors.defText)
- gpu.setBackground(colors.defBg)
- gpu.setResolution(xSize,ySize)
- term.clear()
- quit = true
- break
- end
- end
- if quit then break end
- end
- end
- guessTW()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement