Advertisement
podoko_Lua

Démineur [v1.0]

Jun 2nd, 2014
343
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.08 KB | None | 0 0
  1. --[[    Démineur [v 1.0]
  2.  
  3.         Remplacez Pseudo par votre nom à la ligne 10 pour pouvoir jouer.
  4.         dimX, et dimY aux lignes 12 et 13 représentent les dimensions du terrain. changez les valeurs pour personnaliser le jeu.
  5.         De même, modifiez la valeur de nbM à la ligne 14 pour choisir le nombre de mines sur le terrain.
  6.  
  7. ]]--
  8.  
  9.  
  10. player = "Pseudo"
  11.        
  12. dimX = 15
  13. dimY = 15
  14. nbM = 30
  15.  
  16.  
  17. --------------------------------------
  18. --  Évitez de toucher à ce qui suit --
  19. --------------------------------------
  20.  
  21. carte = {}
  22. restant = dimX*dimY-nbM
  23.  
  24. function placeBombes()
  25.    
  26.     local i = 1
  27.     repeat
  28.         x, y = math.random(1, dimX), math.random(1, dimY)
  29.        
  30.         if not carte[x][y]["mine"] then
  31.             carte[x][y]["mine"] = true
  32.             i = i+1
  33.         end
  34.     until i == nbM
  35.    
  36. end
  37.  
  38.  
  39.  
  40. function prepCarte()
  41.    
  42.     for x = 0, dimX+1 do
  43.         carte[x] = {}
  44.         for y = 0, dimY+1 do
  45.             if (x==0) or (y==0) or (x==dimX+1) or (y==dimY+1) then
  46.                 carte[x][y] = { ["mine"]=false, ["hiden"]=false }
  47.             else
  48.                 carte[x][y] = { ["mine"]=false, ["hiden"]=true }
  49.             end
  50.         end
  51.     end
  52.    
  53. end
  54.  
  55. function contenu ()
  56.    
  57.     for x=1, dimX do
  58.         for y=1, dimY do
  59.             local n = 0
  60.             if carte[x][y]["mine"] == true then
  61.                 carte[x][y]["contenu"] = '¤'
  62.             else
  63.                 for i=x-1, x+1 do
  64.                     for j=y-1, y+1 do
  65.                    
  66.                         if carte[i][j]["mine"] == true then
  67.                             n = n+1
  68.                         end
  69.                     end
  70.                 end
  71.                 carte[x][y]["contenu"] = n
  72.             end
  73.         end
  74.     end
  75.    
  76. end
  77.  
  78.  
  79.  
  80. function affiche()
  81.    
  82.     local difX, difY, id = (800-15*dimX)/2, (400-15*dimY)/2, 0
  83.     ui.addTextArea(0, "", player, difX+15, difY+15, 15*dimX, 15*dimY, 1, 1, 0.7, true)
  84.     for y=1, dimY do
  85.         difY, id = difY+15, id+dimY
  86.         for x=1, dimX do
  87.             difX, id = difX+15, id+1
  88.             ui.addTextArea(dimY*x+y, "<a href='event:"..x.." "..y.."'>■</a>", player, difX, difY, 15, 15, 0, 0, 0, true)
  89.         end
  90.         difX = (800-15*dimX)/2
  91.     end
  92.    
  93. end
  94.  
  95.  
  96.  
  97. function eventTextAreaCallback (id, name, call)
  98.    
  99.     local M = {}
  100.     for k in string.gmatch(call, "[^%s]+") do
  101.         table.insert(M, tonumber(k))
  102.     end
  103.        
  104.     if carte[M[1]][M[2]]["mine"] == true then
  105.         perdu()
  106.     else
  107.         affCase (M[1], M[2])
  108.     end
  109.            
  110. end
  111.  
  112.  
  113.  
  114. function perdu ()
  115.     for x=1, dimX do
  116.         for y=1, dimY do
  117.             if carte[x][y]["mine"]==true then
  118.                 ui.updateTextArea(x*dimY+y, carte[x][y]["contenu"], player)
  119.             end
  120.         end
  121.     end
  122.     local difX, difY = (800-15*dimX)/2, (400-15*dimY)/2
  123.     ui.addTextArea(-1, "<font size='20'>Vous avez perdu :(</font>", player, difX+15, difY-15, 15*dimX, 30, 1, 1, 0.7, true)
  124. end
  125.  
  126. function victoire()
  127.     local difX, difY = (800-15*dimX)/2, (400-15*dimY)/2
  128.     ui.addTextArea(-1, "<font size='20'>Vous avez gagné :)</font>", player, difX+15, difY-15, 15*dimX, 30, 1, 1, 0.7, true)
  129. end
  130.    
  131.    
  132. function affCase (i, j)
  133.        
  134.     ui.updateTextArea(i*dimY+j, carte[i][j]["contenu"], player)
  135.     carte[i][j]["hiden"] = false
  136.     restant = restant-1
  137.     if restant == 0 then
  138.         victoire()
  139.     elseif (carte[i][j]["contenu"] == 0) then
  140.         for k=-1, 1 do
  141.             for l=-1, 1 do
  142.                 if carte[i+k][j+l]["hiden"] then
  143.                     affCase(i+k, j+l)
  144.                 end
  145.             end
  146.         end
  147.     end
  148.    
  149. end
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161. prepCarte()
  162. placeBombes()
  163. contenu()
  164. affiche()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement