Advertisement
astral17

minesweeper

Feb 27th, 2016
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.33 KB | None | 0 0
  1. --[[
  2. -  предназначено специально для ОС созданного Elite Club Session  -
  3. -                 создано Лукашевичем Андреем                     -
  4. -      при отсутствии библиотеки ECSAPI требуется скачать ее      -
  5. ]]--
  6. -----------------------------------------------------------------------------------------------------------------
  7. local ecs = require("ECSAPI")
  8. local event = require("event")
  9. local component = require("component")
  10. local gpu = component.gpu
  11. local cnum = {0x0000FF,0x00FF00,0xFF0000,0x000055,0x550000,0x005500,0xFF00FF,0x000000}
  12. --ecs.border(10,10,10,10,0xFF0000,0xFFFFFF)
  13. local data = ecs.universalWindow("auto","auto",30,0x666666,true,
  14.   {"separator",0x000000},
  15.   {"CenterText",ecs.colors.yellow,"ИГРА САПЕР"},
  16.   {"separator",0x000000},
  17.   {"CenterText",0x111111,"управление"},
  18.   {"CenterText",0x111111,"лкм - открыть"},
  19.   {"CenterText",0x111111,"пкм на пустую - поставить флажок"},
  20.   {"CenterText",0x111111,"пкм на открытую - открыть соседние"},
  21.   {"CenterText",0x111111,"выберите размер поля"},
  22.   {"Selector",0xFFFFFF, ecs.colors.orange, "10x10", "30x30","40x40"},
  23.   {"CenterText",0x111111,"выберите сложность"},
  24.   {"Selector",0xFFFFFF,ecs.colors.orange,"легко","средне","сложно"},
  25.   {"CenterText",0x111111,"введите имя"},
  26.   {"input",0xFFFFFF,ecs.colors.orange,"write text"},
  27.   {"button",{ecs.colors.green,ecs.colors.black,"начать"},{ecs.colors.red,ecs.colors.black,"выход"}},
  28.   {"CenterText",0x222222,"сделано Андреем Лукашевичем"}
  29. )
  30.  
  31. local fieldsize, dif, name, buttonPress = data[1], data[2], data[3], data[4]
  32. --print(fieldsize,dif,name)
  33. --os.sleep(1)
  34. -----------------------------------------------------------------------------------------------------------------
  35. if buttonPress == "начать" then
  36. --  print(fieldsize)
  37.   if fieldsize == "10x10" then
  38.     size = 10
  39.     tmp = 1
  40.   elseif fieldsize == "30x30" then
  41.     size = 30
  42.     tmp = 10
  43.   elseif fieldsize == "40x40" then
  44.     size = 40
  45.     tmp = 15
  46.   end
  47.   if dif == "легко" then
  48.       mines = size+math.floor(size/7)*tmp
  49.   elseif dif == "средне" then
  50.     mines = 2*size+math.floor(size/6)*tmp
  51.   elseif dif == "сложно" then
  52.     mines = 3*size+math.floor(size/5)*tmp
  53.   end
  54.   flags = mines
  55.   openfield = 0
  56.   ecs.border(1,2,size*2+2,size+2,ecs.colors.blue,0xFF0000)
  57. --------------------------------------- генерирование поля -----------------------------------------------
  58.   local field = {}
  59.   for i = 0,size+1 do
  60.     field[i] = {}
  61.     for j = 0,size+1 do
  62.       field[i][j] = {}
  63.       field[i][j][0] = 0  -- -1 - мина, 1-8 кол-во мин вокруг
  64.       field[i][j][1] = 0  -- 0 - закрыто, 1 - открыто, 2 - флажок
  65.     end
  66.   end
  67.   gpu.setBackground(ecs.colors.gray)
  68.   gpu.fill(2,3,size*2,size," ")
  69.   for i = 1,mines do
  70.     x = math.random(1,size)
  71.     y = math.random(1,size)
  72.     while field[x][y][0] == -1 do
  73.       x = math.random(1,size)
  74.       y = math.random(1,size)
  75.     end
  76.     field[x][y][0] = -1
  77. --      gpu.set(x*2+1,y+2,"#")
  78.   end
  79.   local tmp = 0
  80.   for x = 1,size do
  81.     for y = 1, size do
  82. --      print(field[x][y][0])
  83.       if field[x][y][0] ~= -1 then
  84.         tmp = 0
  85.         if field[x-1][y-1][0] == -1 then
  86.           tmp = tmp + 1
  87.         end
  88.         if field[x-1][y][0] == -1 then
  89.           tmp = tmp + 1
  90.         end
  91.         if field[x-1][y+1][0] == -1 then
  92.           tmp = tmp + 1
  93.         end
  94.         if field[x][y-1][0] == -1 then
  95.           tmp = tmp + 1
  96.         end
  97.         if field[x][y+1][0] == -1 then
  98.           tmp = tmp + 1
  99.         end
  100.         if field[x+1][y-1][0] == -1 then
  101.           tmp = tmp + 1
  102.         end
  103.         if field[x+1][y][0] == -1 then
  104.           tmp = tmp + 1
  105.         end
  106.         if field[x+1][y+1][0] == -1 then
  107.           tmp = tmp + 1
  108.         end
  109.         field[x][y][0] = tmp
  110.         tmp2 = tostring(tmp)
  111. --        gpu.set(x*2,2+y,tmp2)
  112. --        gpu.set(1+x*2,2+y,tmp2)
  113. --        os.sleep(0.1)
  114.       end
  115.     end
  116.   end
  117.   gpu.setBackground(0x999999)
  118.   gpu.setForeground(0xFFFFFF)
  119. --------------------------------------- обработка событий ------------------------------------------------
  120. function usecell(x,y,type)
  121.   if type == 0 then
  122.     if field[x][y][0] == -1 then
  123.       for i = 1,size do
  124.         for j = 1,size do
  125.           if field[i][j][0]==-1 then
  126.             gpu.setBackground(0x000000)
  127.             gpu.setForeground(0xFF0000)
  128.             gpu.set(i*2+1,2+j,"#")
  129.           end
  130.         end
  131.       end
  132.       ecs.universalWindow("auto","auto",30,0xDDDDDD,true,
  133.         {"EmptyLine"},
  134.         {"CenterText",0x111111,"вы проиграли"},
  135.         {"EmptyLine"},
  136.         {"button",{ecs.colors.red,0xFFFFFF,"OK"}}
  137.       )
  138.       gamestate = false
  139.     elseif field[x][y][1] == 0 then
  140.       if field[x][y][0] == 0 then
  141.         if (x~=0)and(x~=size+1)and(y~=0)and(y~=size+1) then
  142.           field[x][y][1] = 1
  143.           openfield = openfield + 1
  144.           usecell(x-1,y-1,0)
  145.           usecell(x-1,y,0)
  146.           usecell(x-1,y+1,0)
  147.           usecell(x,y-1,0)
  148.           usecell(x,y+1,0)
  149.           usecell(x+1,y-1,0)
  150.           usecell(x+1,y,0)
  151.           usecell(x+1,y+1,0)
  152.           gpu.set(x*2,2+y,"  ")
  153.         end
  154.       else
  155.         gpu.setForeground(cnum[field[x][y][0]])
  156.         gpu.set(x*2,2+y,tostring("."..field[x][y][0]))
  157.         gpu.setForeground(0xFFFFFF)
  158.         field[x][y][1] = 1
  159.         openfield = openfield + 1
  160.       end
  161.     end
  162.   elseif type == 1 then
  163.     if field[x][y][1] == 0 then
  164.       if (flags > 0) then
  165.         gpu.setBackground(0xFFFF00)
  166.         flags = flags - 1
  167.         field[x][y][1] = 2
  168.         gpu.set(x*2,2+y,"  ")
  169.         gpu.setBackground(0x999999)
  170.       end
  171.     elseif field[x][y][1] == 1 then
  172.       tmp = 0
  173.       if field[x-1][y-1][1] == 2 then
  174.         tmp = tmp + 1
  175.       end
  176.       if field[x-1][y][1] == 2 then
  177.         tmp = tmp + 1
  178.       end
  179.       if field[x-1][y+1][1] == 2 then
  180.         tmp = tmp + 1
  181.       end
  182.       if field[x][y-1][1] == 2 then
  183.         tmp = tmp + 1
  184.       end
  185.       if field[x][y+1][1] == 2 then
  186.         tmp = tmp + 1
  187.       end
  188.       if field[x+1][y-1][1] == 2 then
  189.         tmp = tmp + 1
  190.       end
  191.       if field[x+1][y][1] == 2 then
  192.         tmp = tmp + 1
  193.       end
  194.       if field[x+1][y+1][1] == 2 then
  195.         tmp = tmp + 1
  196.       end
  197.       if tmp == field[x][y][0] then
  198. ----
  199.         if field[x-1][y-1][1] == 0 then
  200.           usecell(x-1,y-1,0)
  201.         end
  202.         if field[x-1][y][1] == 0 then
  203.           usecell(x-1,y,0)
  204.         end
  205.         if field[x-1][y+1][1] == 0 then
  206.           usecell(x-1,y+1,0)
  207.         end
  208.         if field[x][y-1][1] == 0 then
  209.           usecell(x,y-1,0)
  210.         end
  211.         if field[x][y+1][1] == 0 then
  212.           usecell(x,y+1,0)
  213.         end
  214.         if field[x+1][y-1][1] == 0 then
  215.           usecell(x+1,y-1,0)
  216.         end
  217.         if field[x+1][y][1] == 0 then
  218.           usecell(x+1,y,0)
  219.         end
  220.         if field[x+1][y+1][1] == 0 then
  221.           usecell(x+1,y+1,0)
  222.         end
  223. ----
  224.       end
  225.     else
  226. --      gpu.setBackground(ecs.colors.gray)
  227. --      gpu.setBack
  228.       flags = flags + 1
  229.       field[x][y][1] = 0
  230.       gpu.set(x*2,2+y,"  ")
  231. --      gpu.setBackground(0x999999)
  232.     end
  233.   end
  234. end
  235. gamestate = true
  236. while gamestate do
  237.   _,_,x,y,type = event.pull("touch")
  238.   x = math.floor((x)/2)
  239.   y = y-2
  240.   if (x>0)and(x<size+1)and(y>0)and(y<size+1) then
  241.     usecell(x,y,type)
  242.   end
  243.   win = false
  244.   if openfield >= size*size-mines then
  245.     win = true
  246.   end
  247.   if flags == 0 then
  248.     win = true
  249.     for i = 1,size do
  250.       for j = 1,size do
  251.         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
  252.         else
  253.           win = false
  254.         end
  255.       end
  256.     end
  257.   end
  258.   if win then
  259.     gamestate = false
  260.     ecs.universalWindow("auto","auto",30,0xDDDDDD,true,
  261.       {"EmptyLine"},
  262.       {"CenterText",0x111111,"Поздравляем! Вы выиграли!"},
  263.       {"EmptyLine"},
  264.       {"button",{ecs.colors.green,0xFFFFFF,"ОК"}}
  265.     )
  266.   end
  267.   gpu.set(1,1,"   "..tostring(flags).." мин  ")
  268. --  print(field[x][y][0])
  269. end
  270. --  io.read()
  271. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement