Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- - предназначено специально для ОС созданного Elite Club Session -
- - создано Лукашевичем Андреем -
- - при отсутствии библиотеки ECSAPI требуется скачать ее -
- ]]--
- -----------------------------------------------------------------------------------------------------------------
- local ecs = require("ECSAPI")
- local event = require("event")
- local component = require("component")
- local gpu = component.gpu
- local cnum = {0x0000FF,0x00FF00,0xFF0000,0x000055,0x550000,0x005500,0xFF00FF,0x000000}
- --ecs.border(10,10,10,10,0xFF0000,0xFFFFFF)
- local data = ecs.universalWindow("auto","auto",30,0x666666,true,
- {"separator",0x000000},
- {"CenterText",ecs.colors.yellow,"ИГРА САПЕР"},
- {"separator",0x000000},
- {"CenterText",0x111111,"управление"},
- {"CenterText",0x111111,"лкм - открыть"},
- {"CenterText",0x111111,"пкм на пустую - поставить флажок"},
- {"CenterText",0x111111,"пкм на открытую - открыть соседние"},
- {"CenterText",0x111111,"выберите размер поля"},
- {"Selector",0xFFFFFF, ecs.colors.orange, "10x10", "30x30","40x40"},
- {"CenterText",0x111111,"выберите сложность"},
- {"Selector",0xFFFFFF,ecs.colors.orange,"легко","средне","сложно"},
- {"CenterText",0x111111,"введите имя"},
- {"input",0xFFFFFF,ecs.colors.orange,"write text"},
- {"button",{ecs.colors.green,ecs.colors.black,"начать"},{ecs.colors.red,ecs.colors.black,"выход"}},
- {"CenterText",0x222222,"сделано Андреем Лукашевичем"}
- )
- local fieldsize, dif, name, buttonPress = data[1], data[2], data[3], data[4]
- --print(fieldsize,dif,name)
- --os.sleep(1)
- -----------------------------------------------------------------------------------------------------------------
- if buttonPress == "начать" then
- -- print(fieldsize)
- if fieldsize == "10x10" then
- size = 10
- tmp = 1
- elseif fieldsize == "30x30" then
- size = 30
- tmp = 10
- elseif fieldsize == "40x40" then
- size = 40
- tmp = 15
- end
- if dif == "легко" then
- mines = size+math.floor(size/7)*tmp
- elseif dif == "средне" then
- mines = 2*size+math.floor(size/6)*tmp
- elseif dif == "сложно" then
- mines = 3*size+math.floor(size/5)*tmp
- end
- flags = mines
- openfield = 0
- ecs.border(1,2,size*2+2,size+2,ecs.colors.blue,0xFF0000)
- --------------------------------------- генерирование поля -----------------------------------------------
- local field = {}
- for i = 0,size+1 do
- field[i] = {}
- for j = 0,size+1 do
- field[i][j] = {}
- field[i][j][0] = 0 -- -1 - мина, 1-8 кол-во мин вокруг
- field[i][j][1] = 0 -- 0 - закрыто, 1 - открыто, 2 - флажок
- end
- end
- gpu.setBackground(ecs.colors.gray)
- gpu.fill(2,3,size*2,size," ")
- for i = 1,mines do
- x = math.random(1,size)
- y = math.random(1,size)
- while field[x][y][0] == -1 do
- x = math.random(1,size)
- y = math.random(1,size)
- end
- field[x][y][0] = -1
- -- gpu.set(x*2+1,y+2,"#")
- end
- local tmp = 0
- for x = 1,size do
- for y = 1, size do
- -- print(field[x][y][0])
- if field[x][y][0] ~= -1 then
- tmp = 0
- if field[x-1][y-1][0] == -1 then
- tmp = tmp + 1
- end
- if field[x-1][y][0] == -1 then
- tmp = tmp + 1
- end
- if field[x-1][y+1][0] == -1 then
- tmp = tmp + 1
- end
- if field[x][y-1][0] == -1 then
- tmp = tmp + 1
- end
- if field[x][y+1][0] == -1 then
- tmp = tmp + 1
- end
- if field[x+1][y-1][0] == -1 then
- tmp = tmp + 1
- end
- if field[x+1][y][0] == -1 then
- tmp = tmp + 1
- end
- if field[x+1][y+1][0] == -1 then
- tmp = tmp + 1
- end
- field[x][y][0] = tmp
- tmp2 = tostring(tmp)
- -- gpu.set(x*2,2+y,tmp2)
- -- gpu.set(1+x*2,2+y,tmp2)
- -- os.sleep(0.1)
- end
- end
- end
- gpu.setBackground(0x999999)
- gpu.setForeground(0xFFFFFF)
- --------------------------------------- обработка событий ------------------------------------------------
- function usecell(x,y,type)
- if type == 0 then
- if field[x][y][0] == -1 then
- for i = 1,size do
- for j = 1,size do
- if field[i][j][0]==-1 then
- gpu.setBackground(0x000000)
- gpu.setForeground(0xFF0000)
- gpu.set(i*2+1,2+j,"#")
- end
- end
- end
- ecs.universalWindow("auto","auto",30,0xDDDDDD,true,
- {"EmptyLine"},
- {"CenterText",0x111111,"вы проиграли"},
- {"EmptyLine"},
- {"button",{ecs.colors.red,0xFFFFFF,"OK"}}
- )
- gamestate = false
- elseif field[x][y][1] == 0 then
- if field[x][y][0] == 0 then
- if (x~=0)and(x~=size+1)and(y~=0)and(y~=size+1) then
- field[x][y][1] = 1
- openfield = openfield + 1
- usecell(x-1,y-1,0)
- usecell(x-1,y,0)
- usecell(x-1,y+1,0)
- usecell(x,y-1,0)
- usecell(x,y+1,0)
- usecell(x+1,y-1,0)
- usecell(x+1,y,0)
- usecell(x+1,y+1,0)
- gpu.set(x*2,2+y," ")
- end
- else
- gpu.setForeground(cnum[field[x][y][0]])
- gpu.set(x*2,2+y,tostring("."..field[x][y][0]))
- gpu.setForeground(0xFFFFFF)
- field[x][y][1] = 1
- openfield = openfield + 1
- end
- end
- elseif type == 1 then
- if field[x][y][1] == 0 then
- if (flags > 0) then
- gpu.setBackground(0xFFFF00)
- flags = flags - 1
- field[x][y][1] = 2
- gpu.set(x*2,2+y," ")
- gpu.setBackground(0x999999)
- end
- elseif field[x][y][1] == 1 then
- tmp = 0
- if field[x-1][y-1][1] == 2 then
- tmp = tmp + 1
- end
- if field[x-1][y][1] == 2 then
- tmp = tmp + 1
- end
- if field[x-1][y+1][1] == 2 then
- tmp = tmp + 1
- end
- if field[x][y-1][1] == 2 then
- tmp = tmp + 1
- end
- if field[x][y+1][1] == 2 then
- tmp = tmp + 1
- end
- if field[x+1][y-1][1] == 2 then
- tmp = tmp + 1
- end
- if field[x+1][y][1] == 2 then
- tmp = tmp + 1
- end
- if field[x+1][y+1][1] == 2 then
- tmp = tmp + 1
- end
- if tmp == field[x][y][0] then
- ----
- if field[x-1][y-1][1] == 0 then
- usecell(x-1,y-1,0)
- end
- if field[x-1][y][1] == 0 then
- usecell(x-1,y,0)
- end
- if field[x-1][y+1][1] == 0 then
- usecell(x-1,y+1,0)
- end
- if field[x][y-1][1] == 0 then
- usecell(x,y-1,0)
- end
- if field[x][y+1][1] == 0 then
- usecell(x,y+1,0)
- end
- if field[x+1][y-1][1] == 0 then
- usecell(x+1,y-1,0)
- end
- if field[x+1][y][1] == 0 then
- usecell(x+1,y,0)
- end
- if field[x+1][y+1][1] == 0 then
- usecell(x+1,y+1,0)
- end
- ----
- end
- else
- -- gpu.setBackground(ecs.colors.gray)
- -- gpu.setBack
- flags = flags + 1
- field[x][y][1] = 0
- gpu.set(x*2,2+y," ")
- -- gpu.setBackground(0x999999)
- end
- end
- end
- gamestate = true
- while gamestate do
- _,_,x,y,type = event.pull("touch")
- x = math.floor((x)/2)
- y = y-2
- if (x>0)and(x<size+1)and(y>0)and(y<size+1) then
- usecell(x,y,type)
- end
- win = false
- if openfield >= size*size-mines then
- win = true
- end
- if flags == 0 then
- win = true
- for i = 1,size do
- for j = 1,size do
- if ((field[i][j][0] == -1)and(field[i][j][1]==2))or((field[i][j][0] ~= -1)and(field[i][j][1]==1)) then
- else
- win = false
- end
- end
- end
- end
- if win then
- gamestate = false
- ecs.universalWindow("auto","auto",30,0xDDDDDD,true,
- {"EmptyLine"},
- {"CenterText",0x111111,"Поздравляем! Вы выиграли!"},
- {"EmptyLine"},
- {"button",{ecs.colors.green,0xFFFFFF,"ОК"}}
- )
- end
- gpu.set(1,1," "..tostring(flags).." мин ")
- -- print(field[x][y][0])
- end
- -- io.read()
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement