Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local c = require("component")
- local event = require("event")
- local gpu = c.gpu
- local xSize, ySize = gpu.getResolution()
- local colors = {
- whiteKeyColor = 0xffffff,
- blackKeyColor = 0x000000,
- background = 0x262626,
- }
- local sizes = {
- widthOfWhiteKey = 3,
- heightOfWhiteKey = 10,
- widthOfBlackKey = 3,
- heightOfBlackKey = 5,
- doubleKeyBlockConst = 7,
- }
- sizes.yStartOfKeys = ySize - sizes.heightOfWhiteKey + 1
- sizes.xStartOfKeys = 3
- sizes.countOfKeysOnScreen = 0
- local frequencyMultiplyer
- local minFrequency, maxFrequency = 20, 2000
- ------------------------------------------------------------
- --СОЗДАНИЕ ОБЪЕКТОВ
- local obj = {}
- local function newObj(class, name, ...)
- obj[class] = obj[class] or {}
- obj[class][name] = {...}
- end
- local function calculateFrequencyMultiplyer()
- local difference = maxFrequency - minFrequency
- frequencyMultiplyer = difference / sizes.countOfKeysOnScreen
- end
- local function drawKeysBlock(x, y, countOfWhite, countOfBlack)
- local xPos = x
- for i = 1, countOfWhite do
- ecs.square(xPos, y, sizes.widthOfWhiteKey, sizes.heightOfWhiteKey, colors.whiteKeyColor)
- sizes.countOfKeysOnScreen = sizes.countOfKeysOnScreen + 1
- newObj("Keys", sizes.countOfKeysOnScreen, xPos, y + sizes.heightOfBlackKey, xPos + sizes.widthOfWhiteKey - 1, y + sizes.heightOfWhiteKey - 1, true)
- xPos = xPos + sizes.widthOfWhiteKey + 1
- end
- xPos = x + 2
- for i = 1, countOfBlack do
- ecs.square(xPos, y, sizes.widthOfBlackKey, sizes.heightOfBlackKey, colors.blackKeyColor)
- newObj("Keys", sizes.countOfKeysOnScreen + 1, xPos, y, xPos + sizes.widthOfBlackKey - 1, y + sizes.heightOfBlackKey - 1, false)
- sizes.countOfKeysOnScreen = sizes.countOfKeysOnScreen + 1
- xPos = xPos + sizes.widthOfBlackKey + 1
- end
- end
- local function drawTwoKeysBlock(x, y)
- drawKeysBlock(x, y, 3, 2)
- end
- local function drawThreeKeysBlock(x, y)
- drawKeysBlock(x, y, 4, 3)
- end
- local function drawDoubleKeyBlock(x, y)
- sizes.countOfKeysOnScreen = 0
- local xPos = x
- for i = 1, 3 do
- drawTwoKeysBlock(xPos, y)
- xPos = xPos + 3 * (sizes.widthOfWhiteKey + 1)
- drawThreeKeysBlock(xPos, y)
- xPos = xPos + 4 * (sizes.widthOfWhiteKey + 1)
- end
- drawTwoKeysBlock(xPos, y)
- calculateFrequencyMultiplyer()
- end
- local function setFrequencyToKeys()
- calculateFrequencyMultiplyer()
- local justBecomeBlack = false
- local whiteCounter = 0
- local currentWhiteFrequency, currentBlackFrequency = minFrequency, minFrequency + frequencyMultiplyer
- for i = 1, #obj["Keys"] do
- if obj["Keys"][i][5] then
- whiteCounter = whiteCounter + 1
- justBecomeBlack = true
- currentWhiteFrequency = currentWhiteFrequency + frequencyMultiplyer
- obj["Keys"][i][6] = currentWhiteFrequency
- else
- if justBecomeBlack then currentBlackFrequency = currentWhiteFrequency - frequencyMultiplyer * (whiteCounter - 1); justBecomeBlack = false end
- currentBlackFrequency = currentBlackFrequency + frequencyMultiplyer
- obj["Keys"][i][6] = currentBlackFrequency
- whiteCounter = 0
- end
- end
- end
- local function drawAll()
- ecs.clearScreen(colors.background)
- drawDoubleKeyBlock(sizes.xStartOfKeys, sizes.yStartOfKeys)
- end
- drawAll()
- setFrequencyToKeys()
- while true do
- local e = {event.pull()}
- if e[1] == "touch" then
- for key, val in pairs(obj["Keys"]) do
- if ecs.clickedAtArea(e[3], e[4], obj["Keys"][key][1], obj["Keys"][key][2], obj["Keys"][key][3], obj["Keys"][key][4]) then
- if obj["Keys"][key][5] then
- ecs.square(obj["Keys"][key][1], obj["Keys"][key][2], sizes.widthOfWhiteKey, sizes.heightOfWhiteKey - sizes.heightOfBlackKey, ecs.colors.green)
- else
- ecs.square(obj["Keys"][key][1], obj["Keys"][key][2], sizes.widthOfBlackKey, sizes.heightOfBlackKey, ecs.colors.green)
- end
- c.computer.beep(obj["Keys"][key][6])
- if obj["Keys"][key][5] then
- ecs.square(obj["Keys"][key][1], obj["Keys"][key][2], sizes.widthOfWhiteKey, sizes.heightOfWhiteKey - sizes.heightOfBlackKey, colors.whiteKeyColor)
- else
- ecs.square(obj["Keys"][key][1], obj["Keys"][key][2], sizes.widthOfBlackKey, sizes.heightOfBlackKey, colors.blackKeyColor)
- end
- break
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement