--[[ - предназначено специально для ОС созданного 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(x0)and(y= 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