µLua DS - Forum officiel | Official forum Index du Forum

µLua DS - Forum officiel | Official forum
Le bon endroit pour en savoir plus sur MicroLua et pour parler de vos projets ! | The right place to learn more about MicroLua and talk about your projects !

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer   ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Puissance 4

 
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Homebrews
Sujet précédent :: Sujet suivant  
Auteur Message
bzh0


Hors ligne

Inscrit le: 16 Juil 2012
Messages: 47

MessagePosté le: Dim 8 Sep 2013 - 10:16    Sujet du message: Puissance 4 Répondre en citant

Bonjour tout le monde!

Voici un petit jeu que j'ai programmé hier:un puissance 4, avec le centre de gravité non en bas mais au milieu!


Code:

--puissance 4
function ini ()

   _table = {{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,3,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0}}
   j = 1
   _end = false
   msg = ""     
   fin = false
   e = 4
   r = 3
   sc = 0
   sr = 0
  
     
end  
  
function del ()

   _table = nil
   print = nil
  
end

function begin ()

   local  __end = false
   local c = {Color.new (31,31,31),Color.new (0,0,31)}
   local c2 = {c[2],c[1],c[1]}
   local i = 1
  
   while not __end do
  
      Controls.read ()
     
      screen.print (0,70,10,"Puissance 4")
     
      screen.drawFillRect (0,80,50,140,60,c2[1])
      screen.print (0,80,50,"2 joueurs",Color.new (0,0,0))
      screen.drawFillRect (0,80,70,140,80,c2[2])
      screen.print (0,80,70,"Solo",Color.new (0,0,0))
      screen.drawFillRect (0,80,90,140,100,c2[3])
      screen.print (0,80,90,"Quiter",Color.new (0,0,0))
     
      if Keys.newPress.Up and i >1 then
     
         c2[i] = c[1]
         i = i-1
         c2[i] = c[2]        
     
      elseif Keys.newPress.Down and i < 3 then
     
         c2[i] = c[1]
         i = i+1
         c2[i] = c[2]        
     
      end
     
      if Keys.held.A then
     
         if i == 1 then 
        
            __end = true
            ini ()
        
         elseif i == 3 then
        
            __end = true
            _end = true
            fin = true
        
         end
     
      end
     
      render ()
  
   end

end

function print_croix (a,b)
     
   screen.drawLine (0,25*a-25,25*b-25,25*a,25*b,Color.new (31,0,0))
   screen.drawLine (0,25*a-25,25*b,25*a,25*b-25,Color.new (31,0,0))
     
end
      
function print_rectangle (a,b)
     
   screen.drawRect (0,25*a-20,25*b-20,25*a-5,25*b-5,Color.new (31,31,0))
     
end

function print_centre()
     
   screen.drawFillRect (0,100,100,75,75,Color.new (31,31,31))     
  
end
     
function info ()

   screen.print (1,0,0,"Appuyer sur [Start] pour revenir au menu.")
   screen.print (1,0,10,"Appuyer sur [Select] pour recommencer.")
   screen.print (1,0,20,"Utilisez le stylet ou le D-pad pour")
   screen.print (1,0,30,"placer vos pieces.")
   screen.print (1,0,50,msg,Color.new (31,0,0))  
   screen.print (0,180,0,"By bzh0")
   screen.print (0,180,10,"Puissance 4")
   screen.print (0,180,20,"V 1.3.3")
   screen.print (0,180,30,"Croix")
   screen.print (0,180,40,sc)
   screen.print (0,180,50,"Rectangle")
   screen.print (0,180,60,sr)
  
   if j == 1 then
  
      screen.print (1,0,50,"C'est aux croix de jouer",Color.new (0,0,31))
  
   elseif j == -1 then
  
      screen.print (1,0,50,"C'est aux rectangles de jouer",Color.new (0,0,31))

   end
  
end  

function print_table()

   local i = 0
   local z = 0
  
   print_centre ()
  
   for i = 0,7 do
  
      screen.drawLine (0,25*i,0,25*i,175,Color.new (31,31,31))
      screen.drawLine (0,0,25*i,175,25*i,Color.new (31,31,31))
     
      for z = 1,7 do
     
         if i > 0 then     
        
            if _table[i][z] == 1 then
           
               print_croix (i,z)
           
            elseif _table[i][z] == -1 then
           
               print_rectangle (i,z)
           
            end
        
         end     
     
      end
  
   end

end

function keys_mode ()

   screen.drawRect (0,25*e-23,25*r-24,25*e-1,25*r-1,Color.new (0,0,31))
  
   if j == 1 then
  
      print_croix (e,r)
     
   elseif j == -1 then
  
      print_rectangle (e,r)
     
   end

end

function score ()

   local i = 0
   local k = 0
   local z = 0
   local t = 0
  
   for k = 1,7 do
  
      for t = 1,7 do
     
         if _table[k][t] ~= 0 then
        
            for i = k-1,k+1 do
        
               for z = t-1,t+1 do
              
                  if z > 0 and z < 8 and i > 0 and i < 8
                  and _table[i][z] == _table[k][t] then
                 
                     if _table[k][t] == 1 then
                    
                        sc = sc+1
                    
                     elseif _table[k][t] == -1 then
                    
                        sr = sr+1
                       
                     end
                 
                  end
              
               end
              
            end

         end
        
      end
     
   end
  
end

function verif (a,b)

   local i = 0
   local z = 0
   local k = 0
   local d = {}
   v = _table[a][b]
   local t = {{0,0,0},{0,0,0},{0,0,0}}
  
   for i = a-1,a+1 do
  
      for z = b-1,b+1 do
     
         if  i < 8 and i > 0
         and z < 8 and z > 0
         and _table[i][z] == v then
     
            t[i-a+2][z-b+2] = 1
           
         end  
        
      end
     
   end
  
   for i = 1,3 do
  
      if t[i][1]+t[i][2]+t[i][3] == 3 then
     
         if (b > 2 and _table[i+a-2][b-2] == v)
         or (b < 6 and _table[i+a-2][b+2] == v) then
        
            victoire ()              
        
         end
        
      elseif t[i][1]+t[i][2]+t[i][3] == 2 then
     
         if ((b > 4 and _table[i+a-2][b-3] == v) and (b > 3 and _table[i+a-2][b-2] == v))
         or ((b < 6 and _table[i+a-2][b+2] == v) and (b < 5 and _table[i+a-2][b+3] == v)) then
        
            victoire ()
        
         end
        
      elseif t[1][i]+t[2][i]+t[3][i] == 3 then
     
         if (a > 2 and _table[a-2][i+b-2] == v)
         or (a < 6 and _table[a+2][i+b-2] == v) then
        
            victoire ()
        
         end
        
      elseif t[1][i]+t[2][i]+t[3][i] == 2 then
     
         if ((a > 3 and _table[a-2][i+b-2] == v) and (a > 4 and _table[a-3][i+b-2] == v))
         or ((a < 6 and _table[a+2][i+b-2] == v) and (a < 5 and _table[a+3][i+b-2] == v)) then
        
            victoire ()
        
         end
        
      end
  
   end

   if t[1][1]+t[2][2]+t[3][3] == 3 then
     
      if (a > 3 and b > 3 and _table[a-2][b-2] == v)
      or (a < 6 and b < 6 and _table[a+2][b+2] == v) then
        
         victoire ()
        
      end
  
   elseif t[1][1]+t[2][2]+t[3][3] == 2 then
  
      if ((a > 3 and b > 3 and _table[a-2][b-2] == v) and (a > 4 and b > 4 and _table[a-3][b-3] == v))
      or ((a < 6 and b < 6 and _table[a+2][b+2] == v) and (a < 5 and b < 5 and _table[a+3][b+3] == v)) then
        
         victoire ()
        
      end
        
   elseif t[1][3]+t[2][2]+t[3][1] == 3 then
     
      if (a > 3 and b < 6 and _table[a-2][b+2] == v)
      or (a < 6 and b > 3 and _table[a+2][b-2] == v) then
        
         victoire ()
        
      end
  
   elseif t[1][3]+t[2][2]+t[3][1] == 2 then
  
      if ((a > 3 and b < 6 and _table[a-2][b+2] == v) and (a > 4 and b < 5 and _table[a-3][b+3] == v))
      or ((a < 6 and b > 3 and _table[a+2][b-2] == v) and (a < 5 and b > 4 and _table[a+3][b-3] == v)) then
        
         victoire ()
        
      end
        
   end     
     
end

function stylus ()

   local x = math.floor((Stylus.X)/25)+1
   local y = math.floor((Stylus.Y)/25)+1
  
   return x,y

end

function keys ()

   if Keys.newPress.Start then
  
      _end = true
  
   end
  
   if Keys.held.Select then
  
      ini ()
  
   end
  
   if Keys.newPress.Up and r > 1 then
  
      r = r-1
  
   end
  
   if Keys.newPress.Down and r < 7 then
  
      r = r+1
  
   end
  
   if Keys.newPress.Left and e > 1 then
  
      e = e-1
  
   end
  
   if Keys.newPress.Right and e < 7 then
  
      e = e+1
  
   end
  
   local w = 0
  
   if Stylus.newPress then  
  
      local x,y = stylus ()
      w = 1  
     
   end  
  
   if Keys.newPress.A then
  
      x = e
      y = r
      w = 1
  
   end
  
   if w> 0 then
  
      if x < 8 and x > 0 and y < 8 and y > 0 and  _table[x][y] == 0 then
     
        
         if (x+1 < 8 and _table[x+1][y] ~= 0)
         or (x-1 > 0 and _table[x-1][y] ~= 0)
         or (y+1 < 8 and _table[x][y+1] ~= 0)
         or (y-1 > 0 and _table[x][y-1] ~= 0) then
        
            _table[x][y] = j
           
            j = -j
           
            verif (x,y)
        
         end
     
      end
  
   sc,sr = 0,0
   score ()
  
   end  

end

function victoire ()

   if v ~= 0 then
  
      local m = ""
  
   end
  
   if v == 1 then
  
      m = "croix"

   elseif v == -1 then
  
      m = "rectangle"
     
   end
  
   msg = "les "..m.." ont gagne!"
  
   j = 0
  
end

function main ()

   while not _end do
  
      Controls.read ()     
     
      screen.setAlpha (50)
      keys_mode ()
      screen.setAlpha (99)                                                                                  
      print_table ()
     
      keys ()
     
      info ()
     
      render ()
  
   end

end

ini ()

while not fin do

   begin ()
   main ()
  
end

del ()




Je n'ai pas trouvé de bug à ce jour.

Edit: Suite aux conseil de Geeker, j'ai rajouté un menu (moche pour l'instant) et la possibilité de jouer avec les touches. J'ai aussi rajouté une sorte de "score" en fonction du regroupement des pièces: plus j'ai de pièces cote à cote plus j'ai de chance de gagner...
_________________
while not humeur.pas_content ("bzh0") do

face ("bzh0"):smile()
render ()

end


Dernière édition par bzh0 le Dim 8 Sep 2013 - 14:49; édité 1 fois
Revenir en haut
Publicité






MessagePosté le: Dim 8 Sep 2013 - 10:16    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
geeker


Hors ligne

Inscrit le: 23 Déc 2012
Messages: 363

MessagePosté le: Dim 8 Sep 2013 - 10:56    Sujet du message: Puissance 4 Répondre en citant

C'est cool tout ça  Okay
Tu devrais virer les coordonnées qui s'affichent quand on clique et ajouter un écran d’accueil (avec pourquoi pas la possibilité de jouer contre l'ordi Wink ) et ça serai vraiment bien !
Tu pourrais aussi rajouter les touches, genre + pour se déplacer et A pour placer (si possible), avec la croix ou le carré qui s'affiche en semi-transparent, ça réjouirait les utilisateurs des touches !
_________________
Beta-testeur de l'extrème
Tox: FFBDC8B34DC3CDE51F8F1CB0A628147DE740ACD1D44682EB5492A681F6541E32E8D8BB6052B3
CtrµLua: ctrulua.github.io
Des p'tits true, des p'tits true, toujours des p'tits true ...


Revenir en haut
Visiter le site web du posteur
bzh0


Hors ligne

Inscrit le: 16 Juil 2012
Messages: 47

MessagePosté le: Dim 8 Sep 2013 - 13:05    Sujet du message: Puissance 4 Répondre en citant

Merci des conseils, je m'y met!
_________________
while not humeur.pas_content ("bzh0") do

face ("bzh0"):smile()
render ()

end


Revenir en haut
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Dim 8 Sep 2013 - 20:24    Sujet du message: Puissance 4 Répondre en citant

On peut avoir des screens, etc. pour améliorer le post de présentation ? Ça donnera d'autant plus aux gens l'envie d'y jouer Smile
_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
bzh0


Hors ligne

Inscrit le: 16 Juil 2012
Messages: 47

MessagePosté le: Dim 3 Nov 2013 - 12:18    Sujet du message: Puissance 4 Répondre en citant

Bon, j'avais un peu avancé  sur l'IA, mais en fait je ne le terminerais pas par manque de temps (on ne rigole pas en math'sup).
Si quelqu'un veut reprendre, aucun problème!
_________________
while not humeur.pas_content ("bzh0") do

face ("bzh0"):smile()
render ()

end


Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 09:15    Sujet du message: Puissance 4

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Homebrews Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  

Index | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com