Forum Liberty Basic France

Jeux » Jeu des Allumettes on perd on gagne
Le 06/01/2018 à 18h30

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2099
Bon, je ne suis pas sûr que la logique est bonne mais ça a l'air de marcher
Les box rouges et bleues sont les futures box d'effacement.
Code VB :
 
      NOMAINWIN
    WindowWidth = 700
    WindowHeight = 300
    UpperLeftX = (DisplayWidth-WindowWidth)-200
    UpperLeftY = 20 ' (DisplayHeight-WindowHeight)
    BUTTON #w.box, "NoBox", [box], UL, 630, 10, 50, 20
    BUTTON #w.pc, "Faire jouer le PC", [pc], UL, 300, 180, 150, 25
    BUTTON #w.new, "New", [new], UL, 630, 230, 50, 25
    GRAPHICBOX #w.m 5, 5, 685, 260
    OPEN "Allumettes" FOR window_nf AS #w
    #w, "TRAPCLOSE [close]"
    #w.m , "down"
    #w.m, "font courrier 12 bold"
  [new]
    #w.m, "fill lightgray;color black;backcolor lightgray"
    #w.m, "place ";"20";" ";"220": #w.m, "\Prendre de 1 à 3 allumettes"
    #w.m, "place ";"20";" ";"240": #w.m, "\Celui qui prend la dernière a perdu"
    #w.m, "when leftButtonDown [Segment]"
  ' #w.m, "place 10 210": #w.m, "\ mx": #w.m, "place 50 210": #w.m, "\ mx/30"
  ' #w.m, "place 110 210": #w.m, "\ tot": #w.m, "place 140 210": #w.m, "\ seg(sgn)"
  ' #w.m, "place 210 210": #w.m, "\ nnn": #w.m, "place 240 210": #w.m, "\ seg(nnn)"
    nseg = 20: dim seg(nseg+1): box=1
    #w.box, word$("NoBox Box",box)
    x=30: y=30
    #w.m, "size 7"
    #w.m, "color yellow;backcolor lightgray"
    for a=1 to 20
       #w.m, "place ";x;" ";y: #w.m, "goto ";x;" ";y+100
       seg(a)=1
       x=x+30
    next a
    tot=20
    #w.m, "color black"
    x=30: y=155
    for a=1 to 20
       #w.m, "place ";x;" ";y: #w.m, "\ 1"
       x=x+30
    next a
    #w.m, "flush"
  wait
  [Segment]
     j=0 ' jeux ordi
      if jj=3 or jj>3 then
        #w.m, "color blue;backcolor lightgray"
        #w.m, "place ";"150";" ";"190": #w.m, "\A moi de jouer-->": wait
      end if
    mx = MouseX: my = MouseY
    nnn=int(mx/30)
    if seg(nnn)=0 then wait 'allu dejà prise
    if mx mod 30 <4 then
      jj=jj+1 'jeux joueur
      if box=1 then
        #w.m, "size 3": #w.m, "color red" 'eff allu joueur
        #w.m, "place ";mx-15;" ";"25": #w.m, "box ";mx+15;" ";"140"
      end if
      if box=2 then
        #w.m, "color lightgray;backcolor lightgray" 'eff allu joueur
        #w.m, "place ";mx-15;" ";"25": #w.m, "boxfilled ";mx+15;" ";"140"
      end if
      tot=tot-1
      segn=int(mx/30):seg(segn)=0
      #w.m, "color red"
      #w.m, "place ";mx+1;" ";"155": #w.m, "\";seg(sgn)
    end if
    if tot=1 then
          #w.m, "color red;backcolor lightgray"'eff allu ordi
          #w.m, "place ";"320";" ";"230": #w.m, "\ Tu a gagné !": wait
    end if
      if jj=3 or jj>3 then
        #w.m, "color blue;backcolor lightgray"
        #w.m, "place ";"150";" ";"190": #w.m, "\A moi de jouer-->": wait
      end if
  wait
  [pc]
    jj=0 'jeux joueur
    #w.m, "color lightgray;backcolor lightgray" 'eff mess ordi
    #w.m, "place ";"145";" ";"180": #w.m, "boxfilled ";"290";" ";"200"
    if tot=4 then
      njpc=3: goto [jeupc]
    end if
    if tot=3 then
      njpc=2: goto [jeupc]
    end if
    if tot=2 then
      njpc=1: goto [jeupc]
    end if
    if tot mod 4=0 then
      njpc=3: goto [jeupc]
    end if
    if tot-3 mod 4<>0 then
      njpc=3: goto [jeupc]
    end if
    if tot-2 mod 4<>0 then
      njpc=2: goto [jeupc]
    end if
    if tot-1 mod 4<>0 then
      njpc=1: goto [jeupc]
    end if
 
  wait
  [jeupc]
    cc=0
      for c=1 to 20
        if seg(c)=1 then
          cx=c*30: cc=cc+1
          if box=1 then
            #w.m, "size 3": #w.m, "color blue" 'eff allu ordi
            #w.m, "place ";cx-15;" ";"25": #w.m, "box ";cx+15;" ";"140"
          end if
          if box=2 then
            #w.m, "color lightgray;backcolor lightgray" 'eff allu ordi
            #w.m, "place ";cx-15;" ";"25": #w.m, "boxfilled ";cx+15;" ";"140"
          end if
          seg(c)=0
          #w.m, "color blue"
          #w.m, "place ";cx+1;" ";"155": #w.m, "\";seg(sgn)
        end if
        if cc=njpc then exit for
      next c
    tot=tot-njpc
    if tot=1 then
          #w.m, "color blue;backcolor lightgray"'eff allu ordi
          #w.m, "place ";"460";" ";"190": #w.m, "\ J'ai gagné !"
    end if
  wait
  [box]
    box=box+1: if box=3 then box=1
    #w.box, word$("NoBox Box",box)
  wait
  [close]
    CLOSE  #w
    END
 
____________________
Roro

   
Le 07/01/2018 à 17h18

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2099
Comme j'aime bien les options j'ai mis les box visibles ou l'effacement en option (en haut à droite: Box/NoBox)
Code modifié sur place.
____________________
Roro

   
Le 08/01/2018 à 01h38

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 526
Sympa, avec ou sans boîte autour des allumettes, et la modification sur site a été heureuse.

Il est assez facile de gagner. On peut programmer une intelligence artificielle, ou c'est trop ardu ? (je ne me suis jamais intéressé à ça, je ne sais pas comment ça marche)
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 08/01/2018 à 09h22

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2099
Citation:
On peut programmer une intelligence artificielle, ou c'est trop ardu ?

Bah, c'est ce que j'ai essayé de faire avec mes tests "modulo 4", mais je ne me suis pas trop cassé la tête, et je ne suis pas un gros matheux.
En fait c'est en suivant le lien ( https://www.youtube.com/watch?v=9KABcmczPdg ) donné par Nephthys dans: http://libertybasic.fr/forum/topic-496+dr-nim.php
Qui m'a envoyé chez Wikipédia par Mariembad et les allumettes, dont j'ai remmené le modulo 4.
Et voilà...
____________________
Roro

   
Jeux » Jeu des Allumettes on perd on gagne  

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie