Forum Liberty Basic France

Général » Mastermind en panne La panne...
Le 04/05/2012 à 15h39

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Je suis un grand chercheur !!...Car je passe beaucoup de temps à chercher...Pourquoi ça ne marche pas!!
Tout me parait logique, et pourtant les petits ronds blancs et noirs ne s'affichent pas.
Aprés le [quit] , dans [blac] j'ai mis la meme syntaxe que dans la sub, ça marche dans la sub , et pas au bouton.
why...why...why so ?

Code JB :
 
 
   nomainwin
    WindowWidth  = 600
    WindowHeight = 600
    UpperLeftX   = (DisplayWidth-WindowWidth)/2
    UpperLeftY   = (DisplayHeight-WindowHeight)/2
    button #w.ne, "New", [new], UL, 450, 520
    button #w.tt, "Test", [test], UL, 400, 520    'choix couleurs boutons colonnes
    button #w.r1, "Red", jeu, UL, 290, 10, 50, 25 'choix place boutons ligne
    button #w.r2, "Red", jeu, UL, 340, 10, 50, 25
    button #w.r3, "Red", jeu, UL, 390, 10, 50, 25
    button #w.r4, "Red", jeu, UL, 440, 10, 50, 25
    button #w.r5, "Red", jeu, UL, 490, 10, 50, 25
    button #w.g1, "Green", jeu, UL, 290, 35, 50, 25
    button #w.g2, "Green", jeu, UL, 340, 35, 50, 25
    button #w.g3, "Green", jeu, UL, 390, 35, 50, 25
    button #w.g4, "Green", jeu, UL, 440, 35, 50, 25
    button #w.g5, "Green", jeu, UL, 490, 35, 50, 25
    button #w.y1, "Yellow", jeu, UL, 290, 60, 50, 25
    button #w.y2, "Yellow", jeu, UL, 340, 60, 50, 25
    button #w.y3, "Yellow", jeu, UL, 390, 60, 50, 25
    button #w.y4, "Yellow", jeu, UL, 440, 60, 50, 25
    button #w.y5, "Yellow", jeu, UL, 490, 60, 50, 25
    button #w.p1, "pink", jeu, UL, 290, 85, 50, 25
    button #w.p2, "pink", jeu, UL, 340, 85, 50, 25
    button #w.p3, "pink", jeu, UL, 390, 85, 50, 25
    button #w.p4, "pink", jeu, UL, 440, 85, 50, 25
    button #w.p5, "pink", jeu, UL, 490, 85, 50, 25
    button #w.b1, "blue", jeu, UL, 290, 110, 50, 25
    button #w.b2, "blue", jeu, UL, 340, 110, 50, 25
    button #w.b3, "blue", jeu, UL, 390, 110, 50, 25
    button #w.b4, "blue", jeu, UL, 440, 110, 50, 25
    button #w.b5, "blue", jeu, UL, 490, 110, 50, 25
    button #w.bla, "blac", [blac], UL, 340, 150, 50, 25  'provisoire pour essais
    button #w.blan, "blan", [blan], UL, 440, 150, 50, 25 'provisoire idem
    graphicbox #w.a, 5,5,180,500
    graphicbox #w.b, 195,5,80,500
    open "Mastermind..." for window_nf as #w
    #w "trapclose [quit]"
 
 global y, p, c$, pro$, prop$, propo$, source$, comb$
    'good practice to start with a clean sheet
    #w.a "cls ; down"
    #w.b "cls ; down"
 
    #w.a "fill lightgray"
    #w.a "flush videcreensegment"
    #w.b "fill lightgray"
    #w.b "flush videcreensegment"
    'wait
 
 [new]      '*******************************Début**********
    #w.a "redraw videcreensegment"  'efface l'ancien
    #w.b "redraw videcreensegment"
 
 
    y=20 :p=0        'première ligne affichée
    source$="r g y p b"  'les initiales des couleurs(et le left handle$)
    for i=0 to 4
      co=int(rnd(1)*5)+1  'a revoir pour doublons trop frequents
      comb$(i)=word$(source$,co) 'méfiance y'a un comb$(0)
    ''' comb$=source$
    next
[deb]      '------------------------------Tour-------------
  wait
 
  sub jeu handle$       'le but est de placer la couleur à...
      pc = instr("rgypb",mid$(handle$,4,1))
      couleur$ = word$("red green yellow pink blue",pc)
      x = val(right$(handle$,1))
 
      #w.a "backcolor ";couleur$;"; color ";couleur$
     ' #w.a "place ";20+35*(x-1);" 20; circlefilled 15"  '...20 >>>>> y
      #w.a "place ";20+35*(x-1);" ";y;"; circlefilled 15"'sinon pas d'incrémentation y
      #w.a "flush redsegment"
      #w.a "redraw redsegment"
      #w.a "flush greensegment"
      #w.a "redraw greensegment"
      #w.a "flush yellowsegment"
      #w.a "redraw yellowsegment"
      #w.a "flush pinksegment"
      #w.a "redraw pinksegment"
      #w.a "flush bluesegment"
      #w.a "redraw bluesegment"
 
      for p=0 to len(propo$)
        prop$=right$(handle$,2)
        pro$=left$(prop$,1) 'j'enlève le "chifre" de "lettre-chifre"
        propo$(p)=pro$ 
      next
  end sub     ' jusqu'ici ça marche
 
[test]
   bcp=0:bc=0
     for j=0 to len(comb$)
       if propo$(j)=comb$(j) then ' Bonne Coul Place..
         bcp=bcp+1:propo$(j)="z"   ' z neutralise
       end if                       'bcp lue plus bas
     next        'toutes les bonnes coul/place sont neutralisées
 
     for j=0 to len(comb$)
       if comb$(0)=propo$(j) then  'Bonne Coul
         propo$(j)="Z":bc=bc+1       'z neutralise
       end if
     next
     for j=0 to len(comb$)
       if comb$(1)=propo$(j) then
         propo$(j)="Z":bc=bc+1
       end if
     next
     for j=0 to len(comb$)
       if comb$(2)=propo$(j) then
         propo$(j)="Z":bc=bc+1
       end if
     next
     for j=0 to len(comb$)
       if comb$(3)=propo$(j) then
         propo$(j)="Z":bc=bc+1
       end if
     next
     for j=0 to len(comb$)
       if comb$(4)=propo$(j) then
         propo$(j)="Z":bc=bc+1
       end if
     next
      'affichage...bcp=total Bonne Coul/Place...bc=total Bonne Coul
     if bcp<>0 then     'bonne couleur bonne place
       x=10
       for u=1 to bcp
         #w.b "backcolor black; color black"
         #w.b "place";x;" ";y;"; circlefilled 5"
         '''#w.b "place";x;" ";y
         '''#w.b "circlefilled 5"
         '''#w.b "circlefilled 15"
         #w.b "flush blacksegment"
         #w.b "redraw blacksegment"
         x=x+10
       next
     end if
 
     if bc<>0 and bcp<>0 then xx=x 'report dernier x si bcp<>0
       if bc<>0 then     'bonne couleur mauvaise place
         for u=1 to bc
            #w.b "backcolor white; color white"
            #w.b "place";xx;" ";y;"; circlefilled 5"
           ''' #w.b "place";xx;" ";y
           ''' #w.b "circlefilled 5"
            #w.b "flush whitesegment"
            #w.b "redraw whitesegment"
            xx=xx+10
         next
       end if
 
    y=y+35' incrémente descente/tour
    if y>500 then wait  ' PERDU
 wait
 
    [quit]
    close #w
    end
 
[blac]
   x=10:y=20
         #w.b "backcolor black; color black"
         #w.b "place";x;" ";y;"; circlefilled 5"
         '#w.b "place";x;" ";y
         '#w.b "circlefilled 5"
         #w.b "flush blacksegment"
         #w.b "redraw blacksegment"
 wait
 
[blan]
    #w.b "backcolor white; color white"   'bonne couleur mauvaise place
    #w.b "place 10 30 ; circlefilled 5"
    #w.b "flush whitesegment"
    #w.b "redraw whitesegment"
  wait
 
 



____________________
Roro

   
Le 04/05/2012 à 17h54

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
toujours un espace juste après la commande "place "

Sinon je dirais que JB est très sage car il fait exactement ce que tu lui dit de faire ;)

Code VB :
 
[blac]
   x=10:y=20   '  <-----------------  JB affiche donc aux coordonnées 10,20
         #w.b "backcolor black; color black"
         #w.b "place";x;" ";y;"; circlefilled 5"
         '#w.b "place";x;" ";y
         '#w.b "circlefilled 5"
         #w.b "flush blacksegment"
         #w.b "redraw blacksegment"
 wait
 



Je ne suis pas sûr que cette partie soit utile, mais je ne maitrise pas trop bien les 'segment' ;) :

Code VB :
      #w.a "flush redsegment"
      #w.a "redraw redsegment"
      #w.a "flush greensegment"
      #w.a "redraw greensegment"
      #w.a "flush yellowsegment"
      #w.a "redraw yellowsegment"
      #w.a "flush pinksegment"
      #w.a "redraw pinksegment"
      #w.a "flush bluesegment"
      #w.a "redraw bluesegment"
 




Edité par cassiope01 Le 04/05/2012 à 17h55
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 04/05/2012 à 18h08

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
MERCI Cassiope! tu est mon sauveur. :top
Eh! J'ai trouvé un moyen simple et rapide d'avoir l'aide traduite de LB avec JB. (un seul clic ! meme présentation)
et la cerise, c'est qu'on peut consulter l'aide sans meme lancer JB.
Pour l'instant il y a tous les mots clef +graphic command+deguggeur (en accés direct) et en bricolant encore un peu, il y aura tout....Vive le html ! ;)



Edité par Roland Le 04/05/2012 à 18h15
____________________
Roro

   
Le 04/05/2012 à 18h13

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Sacré pierre à l'édifice que tu vas pouvoir poser là !! :clap :clap :top

@+
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 05/05/2012 à 02h35

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Il y a un moment que je n'ai pas dis bonjour, alors: Bonjour,
ça s'améliore, mais il reste des soucis, vise un peu ce mystère:
Pour mettre au point, j'avais besoin de connaitre la solution sans passer par le débuggeur.
Juste avant la sub il y a tous les essais que j'ai faits. Le branchement est avant le [quit]
Le plus dingue, c'est qu'avec: source$ qui est au meme endroit, ça marche.
Aurais-je ommis un espace, ou s'ont-ce les chaines qui sont rouillées ?

Code JB :
 
 
 
   nomainwin
    WindowWidth  = 560
    WindowHeight = 600
    UpperLeftX   = (DisplayWidth-WindowWidth)/2
    UpperLeftY   = (DisplayHeight-WindowHeight)/2
    button #w.ne, "New", [new], UL, 450, 520
    button #w.tt, "Test", [test], UL, 400, 190
    button #w.so, "Soluce", [sol], UL, 480, 190
    TEXTBOX #w.sol, 480, 220,60, 25
    button #w.r1, "Red", jeu, UL, 290, 10, 50, 25 'choix place boutons ligne
    button #w.r2, "Red", jeu, UL, 340, 10, 50, 25 'choix couleurs boutons colonnes
    button #w.r3, "Red", jeu, UL, 390, 10, 50, 25
    button #w.r4, "Red", jeu, UL, 440, 10, 50, 25
    button #w.r5, "Red", jeu, UL, 490, 10, 50, 25
    button #w.g1, "Green", jeu, UL, 290, 35, 50, 25
    button #w.g2, "Green", jeu, UL, 340, 35, 50, 25
    button #w.g3, "Green", jeu, UL, 390, 35, 50, 25
    button #w.g4, "Green", jeu, UL, 440, 35, 50, 25
    button #w.g5, "Green", jeu, UL, 490, 35, 50, 25
    button #w.y1, "Yellow", jeu, UL, 290, 60, 50, 25
    button #w.y2, "Yellow", jeu, UL, 340, 60, 50, 25
    button #w.y3, "Yellow", jeu, UL, 390, 60, 50, 25
    button #w.y4, "Yellow", jeu, UL, 440, 60, 50, 25
    button #w.y5, "Yellow", jeu, UL, 490, 60, 50, 25
    button #w.p1, "pink", jeu, UL, 290, 85, 50, 25
    button #w.p2, "pink", jeu, UL, 340, 85, 50, 25
    button #w.p3, "pink", jeu, UL, 390, 85, 50, 25
    button #w.p4, "pink", jeu, UL, 440, 85, 50, 25
    button #w.p5, "pink", jeu, UL, 490, 85, 50, 25
    button #w.b1, "blue", jeu, UL, 290, 110, 50, 25
    button #w.b2, "blue", jeu, UL, 340, 110, 50, 25
    button #w.b3, "blue", jeu, UL, 390, 110, 50, 25
    button #w.b4, "blue", jeu, UL, 440, 110, 50, 25
    button #w.b5, "blue", jeu, UL, 490, 110, 50, 25
    button #w.bla, "blac", [blac], UL, 340, 150, 50, 25  'provisoire pour essais
    button #w.blan, "blan", [blan], UL, 440, 150, 50, 25 'provisoire idem
    graphicbox #w.a, 5,5,180,500
    graphicbox #w.b, 195,5,80,500
    open "Mastermind..." for window_nf as #w
    #w "trapclose [quit]"
 GLOBAL bcp, bc, y, p, c$, pro$, prop$, propo$, source$, comb$, solu$
 
    'good practice to start with a clean sheet
    #w.a "cls ; down"
    #w.b "cls ; down"
    #w.a "fill lightgray"
    #w.a "flush videcreensegment"
    #w.b "fill lightgray"
    #w.b "flush videcreensegment"
 [new]      '*******************************Début**********
    #w.a "redraw videcreensegment"  'efface l'ancien
    #w.b "redraw videcreensegment"
 
    for k=1 to 5
      propo$(k-1)="q" 'crée une chaine de 5
    next k
    y=20 :p=0        'première ligne affichée
    source$="r g y p b"  'les initiales des couleurs(et le left handle$)
    for i=0 to 4
      co=int(rnd(1)*5)+1  'a revoir pour doublons trop frequents
      comb$(i)=word$(source$,co) 'méfiance y'a un comb$(0)
    next
 'Premier essai (qui est le deuxième (branchement avant le [quit]))
    'solu$ = comb$ 
 'deuxieme essai
    'for s=0 to 4
    '  solu$(s)=comb$(s)
    'next s
 'troisieme essai
    'for s=0 to len(comb$)
    '  solu$(s)=comb$(s)
    'next s
 'quatrième essai  il y a peut etre des espaces dans comb$
    'for s=0 to len(comb$)
    's$=" "
    'solu$(s)=comb$(s) + " " + s$
    'next s
[deb]      '------------------------------Tour-------------
  wait
 
  sub jeu handle$       'le but est de placer la couleur à...
      pc = instr("rgypb",mid$(handle$,4,1))
      couleur$ = word$("red green yellow pink blue",pc)
      x = val(right$(handle$,1))
 
      #w.a "backcolor ";couleur$;"; color ";couleur$
     ' #w.a "place ";20+35*(x-1);" 20; circlefilled 15"  '...20 >>>>> y
      #w.a "place ";20+35*(x-1);" ";y;"; circlefilled 15"'sinon pas d'incrémentation y
      #w.a "flush redsegment"
      #w.a "redraw redsegment"
      #w.a "flush greensegment"
      #w.a "redraw greensegment"
      #w.a "flush yellowsegment"
      #w.a "redraw yellowsegment"
      #w.a "flush pinksegment"
      #w.a "redraw pinksegment"
      #w.a "flush bluesegment"
      #w.a "redraw bluesegment"
 
        prop$=right$(handle$,2)
        pro$=left$(prop$,1) 'j'enlève le "chifre" de "lettre-chifre"
        p$=right$(prop$,1)
        'propo$(p)=pro$
        propo$(val(p$))=pro$ 
       ' p=p+1
  end sub     ' jusqu'ici ça marche
  wait
[test]
   bcp=0:bc=0:x=10
     'for j=0 to len(comb$)
     for j=0 to 4
       if propo$(j)=comb$(j) then ' Bonne Coul Place..
         bcp=bcp+1:propo$(j)="z"   ' z neutralise
       end if                       'bcp lue plus bas
     next        'toutes les bonnes coul/place sont neutralisées
 
     for j=0 to 4
       if propo$(j)=comb$(0) then  'Bonne Coul
         propo$(j)="Z":bc=bc+1       'z neutralise
       end if
     next
     for j=0 to 4
       if propo$(j)=comb$(1) then
         propo$(j)="Z":bc=bc+1
       end if
     next
     for j=0 to 4
       if propo$(j)=comb$(2) then
         propo$(j)="Z":bc=bc+1
       end if
     next
     for j=0 to 4
       if propo$(j)=comb$(3) then
         propo$(j)="Z":bc=bc+1
       end if
     next
     for j=0 to 4
       if propo$(j)=comb$(4) then
         propo$(j)="Z":bc=bc+1
       end if
     next
      'affichage...bcp=total Bonne Coul/Place...bc=total Bonne Coul
     if bcp<>0 then     'bonne couleur bonne place
       for u=1 to bcp
         #w.b "backcolor black; color black"
         #w.b "place ";x;" ";y;"; circlefilled 5"
         #w.b "flush blacksegment"
         #w.b "redraw blacksegment"
         x=x+10
       next
     end if
 
     if bc<>0 and bcp<>0 then xx=x 'report dernier x si bcp<>0
       if bc<>0 then     'bonne couleur mauvaise place
         for u=1 to bc
            #w.b "backcolor white; color white"
            #w.b "place ";xx;" ";y;"; circlefilled 5"
            #w.b "flush whitesegment"
            #w.b "redraw whitesegment"
            xx=xx+10
         next
       end if
 
    p=0:y=y+35' incrémente descente/tour
    for k=1 to 5
      propo$(k-1)="q"
    next k
    if y>500 then wait  ' PERDU
 wait
 
[sol]
 'premier essai
    'PRINT #w.sol, comb$;
    'PRINT #w.sol, solu$;
    PRINT #w.sol, source$;
 wait
 
    [quit]
    close #w
    end
 
[blac]
   x=10:y=20
         #w.b "backcolor black; color black"
         #w.b "place ";x;" ";y;"; circlefilled 5"
         '#w.b "place";x;" ";y
         '#w.b "circlefilled 5"
         #w.b "flush blacksegment"
         #w.b "redraw blacksegment"
 wait
 
[blan]
    #w.b "backcolor white; color white"   'bonne couleur mauvaise place
    #w.b "place 10 30 ; circlefilled 5"
    #w.b "flush whitesegment"
    #w.b "redraw whitesegment"
  wait
 
 
____________________
Roro

   
Le 05/05/2012 à 08h42

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Tu parles de quoi exactement ?
- de la constitution de la chaine secrète au hasard ?
- de la constitution de la chaine par le joueur ?
- de la comparaison des 2 ?

Si c'est pour constituer solu$ (la chaine secrète) ce serait par exemple :

Code VB :
 
    solu$=""
    for i=0 to 4
        co=int(rnd(1)*5)+1
        solu$ = solu$ + word$(source$,co)
    next
 

si tu te fou des doublons.
Si tu ne t'en fou pas c'est un chouia plus compliqué mais rien de mortel ;)

Code VB :
    solu$=""
    while len(solu$)<5
        do
            co=int(rnd(1)*5)+1
        loop until instr(solu$,word$(source$,co))=0  'la lettre tirée au sort n'est pas déjà dans solu$
        solu$ = solu$ + word$(source$,co)
    wend
 


Code VB :
[sol]
 'premier essai
    '#w.sol, comb$;
     #w.sol, solu$;
 wait
 



Comme je me dis souvent "une variable bien utilisée vaut mieux que 10 variables mal utilisées", ou bien "trop de variables tue les variables" ;)

Dans la SUB jeu, tu disposes déjà de x et de couleur$ qui te permettent de constituer la proposition du joueur.

Code VB :
        prop$=right$(handle$,2)
        pro$=left$(prop$,1) 'j'enlève le "chifre" de "lettre-chifre"
        p$=right$(prop$,1)
        'propo$(p)=pro$
        propo$(val(p$))=pro$ 
 


revient exactement à

Code VB :
 
        propo$(x)=left$(couleur$,1) 
 



Tu devrais te decider une bonne fois pour toute : tu veux commencer à zéro pour propo$() ou comb$() ou pas.
Moi je décide en général dans mes programmes de ne pas l'utiliser, ça permet de commencer toujours à 1 pour éviter le mélange des pinceaux ;)

Code VB :
    for k=1 to 5
      propo$(k-1)="q" 'crée une chaine de 5
    next k
 


revient à

Code VB :
    for k=0 to 4
      propo$(k)="q" 'crée une chaine de 5
    next k
 


mais cette chaine de "q" :lol ne sert à rien puisqu'elle va être constitué par le joueur !!!

Il faut que tu fasses des contrôles : appui plusieurs fois de suite sur le bouton "test" tu comprendras ;)
Pareil pour les réponses.

Je ne mettrais pas d'espaces dans la proposition secrète : penses toujours au plus simple ;)

La commande MID$(chaine$,p,n) te permettra de viser un caractère à un endroit précis dans la chaine$.

Je ne parvient pas à comprendre ton utilisation des "Z" ??

A quoi servent tous ces "redraw" ??

En espérant que tout ça va t'aider ;)


@+

PS: p..ain 2h35 !!! tu es insomniaque ou bien tu usines tes neurône jusqu'à épuisement !!! :nex |-)
Du coup tu ne dois pas être levé à l'heure où j'écris ce post :clap



Edité par cassiope01 Le 05/05/2012 à 10h01
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 05/05/2012 à 13h01

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Salut, Je suis du soir, mais parfois, le soir rejoint le matin, et comme je n'ai pas la télé...
La chaine de "q": Pour qu'on puisse jouer dans n'importe quel ordre, je pensais entrer dans la propo$ avec l'indice du bouton. Mais est-ce que dans une chaine vide, si tu dis: propo$(3)="g", des espaces sont mis par la machine pour que "g" soit à la troisième place ? Dans le doute, j'ai rempli la chaine, comme ça y'a pas de pétard. :p
Les "z": Pour ne pas relire ce qui a été traité, si je l'enlève de la chaine, ça met le souk; la chaine n'a plus la meme longueur. Je met "z" à la place., qui ne sera pas detecté par les tests. :)
Tu dis que tu commence les chaines à 1, mais le zéro, bien que non utilisé, reste présent dans la chaine, non ? Puisque, si on dit: bon$="bonjour", et qu'on regarde au débuggeur le "b", il est dans bon$(0) (je n'aime pas les fantomes) :heink
J'ai bien vu qu'il y avait divers soucis (il doit y en avoir d'autres que je n'ai pas encore vus)
Pour les redaw, je passerai un coup de torchon à la fin
Par contre, le MYSTERE reste entier ! :s
Le mystère: : j'ai mis un bouton "soluce" et un textbox dans lequel je comptais récupérer la comb$ (combi générée par la machine)
et, alors que source$ va gentiment dans le textbox, à l'appui du bouton (donc le bazard fonctionne). comb$ refuse obstinémént de s'y rendre. Et c'est pas faute d'avoir essayé.
Je te soupçonne ,"Maitre Renard", de m'avoir éluder la question. :( :)

____________________
Roro

   
Le 05/05/2012 à 18h00

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Roland:

La chaine de "q": Pour qu'on puisse jouer dans n'importe quel ordre, je pensais entrer dans la propo$ avec l'indice du bouton. Mais est-ce que dans une chaine vide, si tu dis: propo$(3)="g", des espaces sont mis par la machine pour que "g" soit à la troisième place ? Dans le doute, j'ai rempli la chaine, comme ça y'a pas de pétard. :p

Non bien sûr que non, et ça ne change rien au problème que tu remplisses la chaine : comment tu affectes le bon caractère au bon endroit ? je n'ai pas vu ça dans ton code !
Donc il faut t'y prendre autrement. Tu remplis une petite variable tableau en remplissant comme tu dis, directement celle de l'indice du bouton, et quand elles sont toutes remplies, tu constitues la chaine$. C'est ce que tu fais avec propo$(x) d'ailleurs. Quand tous les propo$(x) ont reçu leur lettre, il te suffit de faire :
combo$ = propo$(1)+propo$(2)+propo$(3)+propo$(4)+propo$(5)

Roland:

Les "z": Pour ne pas relire ce qui a été traité, si je l'enlève de la chaine, ça met le souk; la chaine n'a plus la meme longueur. Je met "z" à la place., qui ne sera pas detecté par les tests. :)
Tu dis que tu commence les chaines à 1, mais le zéro, bien que non utilisé, reste présent dans la chaine, non ? Puisque, si on dit: bon$="bonjour", et qu'on regarde au débuggeur le "b", il est dans bon$(0) (je n'aime pas les fantomes) :heink

A quel moment tu as besoin d'analyser une chaine qui ne serait pas constituée des 5 couleurs que le joueur doit avoir tapé ???
Donc la chaine que tu vas tester doit toujours avoir 5 caractères. (sans espaces)

Une variable chaine$ et une variable tableau chaine$() c'est pas la même chose.
bon$ et bon$() n'ont rien à voir entre elles.
Ne confondrais-tu pas avec les caractères d'une chaine$ ?
bon$="bonjour" n'est pas du tout constituée de bon$(0) = "b", bon$(1) = "o", bon$(2) = "n", etc...
Une variable tableau bon$(5) (déclarée par dim bon$(5) bien sûr) pourra contenir 6 chaine$ de caractères (de la longueur que tu veux), mais comme moi je préfère ne pas utiliser le zéro, bon$(0) restera toujours vide ! c'est un peu du gaspillage de variable j'en conviens mais y a moins de risque de carabistouille je trouve...

Roland:

Par contre, le MYSTERE reste entier ! :s
Le mystère: : j'ai mis un bouton "soluce" et un textbox dans lequel je comptais récupérer la comb$ (combi générée par la machine)
et, alors que source$ va gentiment dans le textbox, à l'appui du bouton (donc le bazard fonctionne). comb$ refuse obstinémént de s'y rendre. Et c'est pas faute d'avoir essayé.

Là faut que je regarde parce que je ne comprend même pas ce que tu veux faire ! ;)
C'est peut-être que comb$ est vide, tout simplement, car au niveau de la syntaxe, tu l'as bien écrite avec source$ !!!!

Roland:

Je te soupçonne ,"Maitre Renard", de m'avoir éluder la question. :( :)

Pas du tout Maître corbac.

Vivement que tu disposes de l'aide en français :siffle :top


@+



Edité par cassiope01 Le 05/05/2012 à 18h20
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 05/05/2012 à 18h48

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Je me doutais que je confusais entre les chaines et les chaines(). Il faut que je creuse le sujet.
Je crois comprendre que je ne doit pas utiliser: bon$(x) pour une chaine "normale", mais seulement: left( ), right( ), mid( ), et évidement: intr$
C'est incroyable que cela fonctionne presque avec le mic-mac que j'ai employé... :heink
J'ai réglé le problème des appuis répétés sur "test" avec un flag.
Ce que je veux faire: c'est pouvoir consulter la chaine secrète en cours d'execution, pour proposer les couleurs en conséquence et voir comment les tests se comportent.. (comb$ c'est la secrete, et propo$, celle du joueur)
Je me fout du mastermind, ce que je veux, c'est apprendre. Et ce qui est SUR, c'est que j'en ai plus appris dans tes deux lignes, que dans l'aide toute entière. :top

Tu va rigoler, j'ai posté chez les ricains (et à Carl en personne), une demande d'autorisation de traduction de l'aide "for the french people". On ne sait jamais...C'est qui dégainent facile au pays du colt 45. ;)

Je viens de revérifier.Comme j'ai fais ça marche au poil, on peut entrer les couleurs dans n'importe quel ordre, les lettes vont bien à leur place dans la chaine. Le débuggeur est mon témoin. :p Peut etre que tu n'a pas la dernière version. Je prend céant la décision de mentionner un numéro de version dans le code. Comme les pros !



Edité par Roland Le 05/05/2012 à 19h21
____________________
Roro

   
Le 05/05/2012 à 19h47

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Roland:

Je me fout du mastermind, ce que je veux, c'est apprendre. Et ce qui est SUR, c'est que j'en ai plus appris dans tes deux lignes, que dans l'aide toute entière. :top

Quelles 2 lignes ? comme ça je n'écrirais plus que 2 lignes à chaque fois, et comme je suis fainéant ça m'arrangerais :lol :lol

Roland:
Peut etre que tu n'a pas la dernière version.

Pourquoi, tu l'as postée ?


Une piste pour l'affichage du résultat de la comparaison des 2 chaines : tu devrais simplement compter les couleurs à la bonne place, puis compter les couleurs qui sont dans la chaine mais pas à la bonne place, puis ensuite seulement tu affiches le nombre de points noir et blanc correspondant...
L'autorisation des doublons rend la comparaison un peu plus compliquée me semble-t-il...

Il est possible que de remplacer (temporairement ou utiliser une copie) dans la combinaison secrète une couleur trouvée au bon endroit, par un autre caractère quelconque (une petite SUB pourrait s'occuper de ça) serait LA solution pour continuer par la recherche des couleurs présentes mais mal placées, et ainsi on peut s'affranchir du pb des doublons...! enfin je crois !

Mais y a peut-être une solution plus ingénieuse et plus simple avec seulement les commandes que tu connais déjà ????
Franchement je ne sais pas.


@+



Edité par cassiope01 Le 05/05/2012 à 21h12
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 05/05/2012 à 21h14

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Et non justement, j'ai pas du poster la dernière.
Je me suis dis que tu avais peut etre couplé une sirène à ton PC pour te prévenir des mouvements du site. Je ne voulais pas te réveiller à cinq heure du mat un week-end. ;)

Je voudrais juste arriver à envoyer cette P....n de comb$ ou sa jumelle dans le textbox. :\'(

...eh... toi en ce moment tu as l'esprit ailleurs...Pas de soucis j'espère.
Si un moment je te gonfle, n'hésite pas à le dire. Je ne voudrais pas abuser sans m'en apercevoir. :)
____________________
Roro

   
Le 05/05/2012 à 22h39

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Roland:

Je voudrais juste arriver à envoyer cette P....n de comb$ ou sa jumelle dans le textbox. :\'(


Je répète ce que je te disais plus haut :

C'est peut-être que comb$ est vide, tout simplement, car au niveau de la syntaxe, tu l'as bien écrite avec source$ !!!!

écrit quelque chose dans comb$ juste avant de faire #w.sol, comb$ et tu verra que ça fonctionne.
Maintenant si ta question est : comment constituer comb$, je te l'ai déjà expliqué plus haut, mais comme tu ne lis pas le moitié des posts que j'écris... :mat

Tu as raison, 2 lignes ça suffit :top

@+
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 06/05/2012 à 00h41

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Non mais tu plaisante ! Tes posts, je les copie et je les mets dans un dossier à ton nom, et le dossier je le mets sous mon oreiller ;) Lis plutot ce qui suit
Synthese: Voilà ce qui s'est passé:
a)-Je ne déclare pas de tableau de chaine.( ce qui fait que j'était persuadé de manipuler des chaines avec mes ( ) ( )
b)-Je rempli comb$ avec: comb$(x)
c)-JB considère que c'est tableau (puisqu'au débuggeur j'ai: comb$(0)="r", comb$(1)="g"...ext...et c'est pour celà que je ne peux pas l'envoyer dans un textbox.
Mon problème, c'est que je voudrais transférer le contenu de: comb$(tableau) dans une chaine alphanum' normale:solu$. Et j'ai bien l'impression que celà n'est pas possible vu que: left, right et consort ne marchent qu'en lecture.
Le prob étant compris, il est résolu: ( je reconnais la pertinence de ta mise au point sur chaine"seche" et chaine ( )
Comme récompense, je te livre la dernière savoureuse de google :

""""Le passage par référence est pris en charge uniquement avec de la ficelle et des variables numériques""""" :lol

Mise en place de cinq textbox, lecture de comb$( ) affichage d'une lettre par textbox>> Nickel !
Qu'est que je suis fort !!!!!!( lol et re-lol ) ... eh! ...y'a pas de smiley avec les bras levés..!..



Edité par Roland Le 06/05/2012 à 06h30
____________________
Roro

   
Le 06/05/2012 à 06h37

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
...eh bonjour....ne loupe pas le post précédent...
Bon, il reste des copeaux, mais ça s'est bien amélioré., mais y'a du ragout de mouton...Non du rabe de boutons.

Code JB :
 
 
 
  'mastermind v2_Chantier Ouvert au Public_Port de l'entonnoir facultatif^.
   nomainwin
    WindowWidth  = 560
    WindowHeight = 600
    UpperLeftX   = (DisplayWidth-WindowWidth)/2
    UpperLeftY   = (DisplayHeight-WindowHeight)/2
 button #w.ne, "glop", [glop], UL, 310, 350  '   à suprimmer
    button #w.ne, "New", [new], UL, 310, 300
    button #w.tt, "Test", [test], UL, 300, 160
    button #w.so, "1", [sou1], UL, 308, 210
    button #w.so, "2", [sou2], UL, 357, 210
    button #w.so, "3", [sou3], UL, 407, 210
    button #w.so, "4", [sou4], UL, 458, 210
    button #w.so, "5", [sou5], UL, 504, 210
    TEXTBOX #w.so1, 305, 240,25, 25
    TEXTBOX #w.so2, 354, 240,25, 25
    TEXTBOX #w.so3, 404, 240,25, 25
    TEXTBOX #w.so4, 455, 240,25, 25
    TEXTBOX #w.so5, 502, 240,25, 25
    button #w.r1, "Red", jeu, UL, 290, 10, 50, 25 'choix place boutons ligne
    button #w.r2, "Red", jeu, UL, 340, 10, 50, 25 'choix couleurs boutons colonnes
    button #w.r3, "Red", jeu, UL, 390, 10, 50, 25
    button #w.r4, "Red", jeu, UL, 440, 10, 50, 25
    button #w.r5, "Red", jeu, UL, 490, 10, 50, 25
    button #w.g1, "Green", jeu, UL, 290, 35, 50, 25
    button #w.g2, "Green", jeu, UL, 340, 35, 50, 25
    button #w.g3, "Green", jeu, UL, 390, 35, 50, 25
    button #w.g4, "Green", jeu, UL, 440, 35, 50, 25
    button #w.g5, "Green", jeu, UL, 490, 35, 50, 25
    button #w.y1, "Yellow", jeu, UL, 290, 60, 50, 25
    button #w.y2, "Yellow", jeu, UL, 340, 60, 50, 25
    button #w.y3, "Yellow", jeu, UL, 390, 60, 50, 25
    button #w.y4, "Yellow", jeu, UL, 440, 60, 50, 25
    button #w.y5, "Yellow", jeu, UL, 490, 60, 50, 25
    button #w.p1, "pink", jeu, UL, 290, 85, 50, 25
    button #w.p2, "pink", jeu, UL, 340, 85, 50, 25
    button #w.p3, "pink", jeu, UL, 390, 85, 50, 25
    button #w.p4, "pink", jeu, UL, 440, 85, 50, 25
    button #w.p5, "pink", jeu, UL, 490, 85, 50, 25
    button #w.b1, "blue", jeu, UL, 290, 110, 50, 25
    button #w.b2, "blue", jeu, UL, 340, 110, 50, 25
    button #w.b3, "blue", jeu, UL, 390, 110, 50, 25
    button #w.b4, "blue", jeu, UL, 440, 110, 50, 25
    button #w.b5, "blue", jeu, UL, 490, 110, 50, 25
    graphicbox #w.a, 5,5,180,555
    graphicbox #w.b, 195,5,80,555
    open "Mastermind..." for window_nf as #w
    #w "trapclose [quit]"
 
 global c$, pro$, prop$', propo$, source$, comb$
 global bcp, bc, y, p, f1
 DIM comb$(5):DIM propo$(5)
 
    'good practice to start with a clean sheet
    #w.a "cls ; down"
    #w.b "cls ; down"
 
    #w.a "fill lightgray"
    #w.a "flush videcreensegment"
    #w.b "fill lightgray"
    #w.b "flush videcreensegment"
    'wait
 
 [new]      '*******************************Début**********
    #w.a "redraw videcreensegment"  'efface l'ancien
    #w.b "redraw videcreensegment"
    PRINT #w.so1,"":PRINT #w.so2,"":PRINT #w.so3,""
    PRINT #w.so4,"":PRINT #w.so5,""
    for k=1 to 5
      propo$(k-1)="q"
    next k
    y=20 :p=0        'première ligne affichée
    source$="r g y p b"  'les initiales des couleurs(et le left handle$)
    for i=0 to 4
      co=int(rnd(1)*5)+1  'a revoir pour doublons trop frequents
      comb$(i)=word$(source$,co) 'méfiance y'a un comb$(0)
    next i
 ' alternative pour éviter les doublons ARCHTOUNGUE ! Redémmarrage requis
   ''    comb$=""
   '' while len(comb$)<5
   ''     do
   ''         co=int(rnd(1)*5)+1
   ''    loop until instr(comb$,word$(source$,co))=0  'la lettre tirée au sort n'est pas déjà dans solu$
   ''     comb$ = comb$ + word$(source$,co)
   '' wend
      '------------------------------Tour-------------
  wait
 
  sub jeu handle$ 
      pc = instr("rgypb",mid$(handle$,4,1))
      couleur$ = word$("red green yellow pink blue",pc)
      x = val(right$(handle$,1))
 
      #w.a "backcolor ";couleur$;"; color ";couleur$
      #w.a "place ";20+35*(x-1);" ";y;"; circlefilled 15"
      #w.a "flush redsegment"
      #w.a "flush greensegment"
      #w.a "flush yellowsegment"
      #w.a "flush pinksegment"
      #w.a "flush bluesegment"
 
        prop$=right$(handle$,2)
        pro$=left$(prop$,1) 'j'enlève le "chifre" de "lettre-chifre"
        p$=right$(prop$,1)
        'propo$(p)=pro$
        propo$(val(p$))=pro$ 
       f1=0
  end sub
  wait
[test]
   bcp=0:bc=0:x=10:f1=f1+1
   x=10 ' j'ai l'impresion que des instructions sont sautées...
   bc=0   '... quand elles sont sur la meme ligne
     for j=1 to 5
       if propo$(j)=comb$(j-1) then ' Bonne Coul Place..
         bcp=bcp+1:propo$(j)="z"   ' z neutralise
       end if                       'bcp lue plus bas
     next        'toutes les bonnes coul/place sont neutralisées
     if bcp=0 then x=10  ' ici aussi
 
     for j=1 to 5
       if propo$(j)=comb$(0) then  'Bonne Coul
         bc=bc+1: propo$(j)="z"      'z neutralise
       end if
     next
     for j=1 to 5
       if propo$(j)=comb$(1) then
         bc=bc+1: propo$(j)="z"
       end if
     next
     for j=1 to 5
       if propo$(j)=comb$(2) then
         bc=bc+1: propo$(j)="z"
       end if
     next
     for j=1 to 5
       if propo$(j)=comb$(3) then
         bc=bc+1: propo$(j)="z"
       end if
     next
     for j=1 to 5
       if propo$(j)=comb$(4) then
         bc=bc+1: propo$(j)="z"
       end if
     next
      'affichage...bcp=total Bonne Coul/Place...bc=total Bonne Coul
     if bcp<>0 then     'bonne couleur bonne place
       for u=1 to bcp
         #w.b "backcolor black; color black"
         #w.b "place ";x;" ";y;"; circlefilled 5"
         #w.b "flush blacksegment"
         #w.b "redraw blacksegment"
         x=x+10
       next
     end if
 
     if bc<>0 and bcp<>0 then xx=x 'report dernier x si bcp<>0
       if bc<>0 then     'bonne couleur mauvaise place
         for u=1 to bc
            #w.b "backcolor white; color white"
            #w.b "place ";xx;" ";y;"; circlefilled 5"
            #w.b "flush whitesegment"
            #w.b "redraw whitesegment"
            xx=xx+10
         next
       end if
     if f1=1 then y=y+35 ' incrémente descente/tour
    p=0
    'for k=1 to 5
    '  propo$(k)="q"
    'next k
    if y>510 then wait  ' PERDU
 wait
 
[sou1]
    PRINT #w.so1, UPPER$(comb$(0));
 wait
[sou2]
    PRINT #w.so2, UPPER$(comb$(1));
 wait
[sou3]
    PRINT #w.so3, UPPER$(comb$(2));
 wait
[sou4]
    PRINT #w.so4, UPPER$(comb$(3));
 wait
[sou5]
    PRINT #w.so5, UPPER$(comb$(4));
 wait
 
[glop]   ' pas glop !
     STATICTEXT #w, "string", 450, 300, 60, 30
  'locate 200, 100
  'print "*";
 ' print #w, "place " 350, 400
  'print "string";
  'prompt "Comment mettre un peu de texte dans ce bazard"; response$
  notice "Comment mettre un peu de texte dans ce bazard ? Statictext = pas glop "
   wait
 
    [quit]
    close #w
    end
 
 
____________________
Roro

   
Le 06/05/2012 à 09h49

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Roland:

a)-Je ne déclare pas de tableau de chaine.( ce qui fait que j'était persuadé de manipuler des chaines avec mes ( ) ( )

- en effet il n'est pas nécessaire de déclarer une variables tableau avec DIM tant que celle-ci ne dépasse pas 11 éléments. En général je les déclare quand même, juste histoire de s'y retrouver ;)

Roland:
b)-Je rempli comb$ avec: comb$(x)

- non. Je ne trouve ça à aucun endroit de ton code. Je t'ai indiqué comment faire plus haut.


Roland:
c)-JB considère que c'est tableau (puisqu'au débuggeur j'ai: comb$(0)="r", comb$(1)="g"...ext...et c'est pour celà que je ne peux pas l'envoyer dans un textbox.

- Faut. On ne voit ça à aucun moment dans le débugger. Ta conclusion est farfelue comme d'hab. :heink


En fait je ne suis pas sûr qu'il faille à tout pris constituer une chaine propo$ ni même pour la combinaison secrète d'ailleurs !: il suffit d'utiliser les comb$() et les propo$() pour comparer chaque élément des variables tableaux.

TOUS les trucs comme les STATICTEXT, TEXTBOX, BUTTON, GRAPHICBOX, etc... (il y en a 12 comme je te l'ai déjà expliqué) doivent être déclarés AVANT la commande OPEN, et de préférence avec un nom différent (derrière #w.) pour pouvoir être utilisé.

Place donc - STATICTEXT #w.txt, "string", 310, 450, 200, 90 - juste avant la déclaration du 1er BOUTTON par exemple. Tu peux même lui imposer une police de ton choix.
Ensuite tu écris dedans en codant simplement :
#w.txt "Comment mettre un peu de texte dans ce bazard ? Statictext = pas glop "

Regarde l'aide.

Tu peux d'ailleurs déclarer des STATICTEXT (et ne plus les déclarer une fois le programme fini) pour afficher le contenu des variables durant la mise au point, c'est mieux que les TEXTBOX pour faire ça, bien qu'en enlevant NOMAINWIN et en faisant des print "variable en question" tu peux aussi visualiser ce que tu veux dans la fenêtre texte par défaut...!

Tu ne veux pas qu'il y ait de doublons dans la chaine secrète pour le moment ?
Je pense qu'il vaut mieux intégrer cette éventualité dans les procédures d'évaluation, juste au cas où tu décides par la suite des les autoriser. Qui peux le plus peut le moins :siffle


BON SANG, J'AVAIS DIS 2 LIGNES !!! :heink :heink

@+



Edité par cassiope01 Le 06/05/2012 à 12h28
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 06/05/2012 à 13h55

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Ah bon ??? ...Chez moi, il n'y a qu'une seule ligne ! ! C'est à cause de la largeur de ton l'écran que tu a des retours chariot !
Comment, pas de comb$(x) ? Et le comb$(i) =word$(....c'est de la chocolatine en bombe ?
Le débuggeur, il dit bien: comb$(0)="r", mais au premier coup, il faut faire "new" pour que ça apparaisse.

Pour la déclaration; j'ai eu un autre basic, où il fallait faire une déclaration, meme pour aller pisser !
Ce JB est vraiment grand seigneur, mais je ferai comme toi. Parce que: 11, c'est un chiffre batard, et puis ça m'oblige à me déchausser, vu qu'avec les mains, je vais que jusqu'à dix.
Ceçi dit, c'est vrai que je suis un peu farfelu "u".
C'est vrai aussi qu'à l'éclairage nouveau, la propo$ ne demande qu'à prendre congé.
Enlever: Nomainwin ? houla! ça j'ose pas encore.
Déclarer avant l'open, je n'avais pas pensé à ça.Tu dis: les douze, ok, j'ai la liste, dans le dossier 'Cassiope01", il faut juste virer le chat qui ronfle dessus.

Les doublons: oui, ça pourait etre un paramètre: "dificulté", mais je n'aime pas l'intégration en codage, je préfère les bons petits modules autonome... mais n'allons pas rouvrir de vieilles querelles.

En parlant de l'aide; il faudrait avoir la liste complète des fonctions de LB, absentes de JB.

L'aide, Carl il a du la faire à woodstock, entre deux concerts où ils fumaient pas que de la paille..., au regard du bordel infernal qu'il y a dans le dossier. Du coup, je mets le nom du fichier en entète de l'article pour faciliter les modifs ultérieures. Sans cela, c'est quasiment impossible de s'y retrouver.
Bon, je vais voir si les macheurs de chewing-gun mon répondu. .....à+..... et bonne urne.
____________________
Roro

   
Le 06/05/2012 à 14h16

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Et un "bon petit module autonome" qui te donne les nombres de points noirs et blancs, qu'il y ait des doublons ou pas, c'est pas aussi bien ??? :@

Met donc une apostrophe devant NOMAINWIN tu verras bien ! ça va pas exploser :siffle

Avec comb$(i) =word$(... tu mets bien une lettre dans chaque comb$() comme il faut, mais tu ne remplis pas comb$ avec: comb$(x) comme tu le dis en b).

C'est la largeur (et aussi la hauteur = les 2 derniers paramètres) que tu déclares dans la ligne STATICTEXT #w.txt,... qui fera un retour chariot tout seul si la chaine que tu lui donnes à manger est trop longue.
Regarde le synthaxe de STATICTEXT dans l'aide.
Mais tu peux aussi forcer le retour chariot en "coupant" la chaine avec chr$(13).

@+



Edité par cassiope01 Le 06/05/2012 à 17h10
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 06/05/2012 à 18h15

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Tu m'as gonflé avec ton histoire de module :heink
Celui-ci est suffisament petit et simple pour toi ? ( je parle de [test] ) :lol :lol

Il fait presque la même chose que le tien, que j'ai renommé [test1] pour l'occasion. ;)
J'espère que tu ne m'en voudras pas.

Code VB :
 
  'mastermind v2_Chantier Ouvert au Public_Port de l'entonnoir facultatif^.
   nomainwin
    WindowWidth  = 560
    WindowHeight = 600
    UpperLeftX   = (DisplayWidth-WindowWidth)/2
    UpperLeftY   = (DisplayHeight-WindowHeight)/2
    STATICTEXT #w.txt, "string", 310, 450, 200, 90
    button #w.ne, "glop", [glop], UL, 310, 350  '   à suprimmer
    button #w.ne, "New", [new], UL, 310, 300
    button #w.tt, "Test", [test], UL, 300, 160
    button #w.so, "1", [sou1], UL, 308, 210
    button #w.so, "2", [sou2], UL, 357, 210
    button #w.so, "3", [sou3], UL, 407, 210
    button #w.so, "4", [sou4], UL, 458, 210
    button #w.so, "5", [sou5], UL, 504, 210
    TEXTBOX #w.so1, 305, 240,25, 25
    TEXTBOX #w.so2, 354, 240,25, 25
    TEXTBOX #w.so3, 404, 240,25, 25
    TEXTBOX #w.so4, 455, 240,25, 25
    TEXTBOX #w.so5, 502, 240,25, 25
    button #w.r1, "Red", jeu, UL, 290, 10, 50, 25 'choix place boutons ligne
    button #w.r2, "Red", jeu, UL, 340, 10, 50, 25 'choix couleurs boutons colonnes
    button #w.r3, "Red", jeu, UL, 390, 10, 50, 25
    button #w.r4, "Red", jeu, UL, 440, 10, 50, 25
    button #w.r5, "Red", jeu, UL, 490, 10, 50, 25
    button #w.g1, "Green", jeu, UL, 290, 35, 50, 25
    button #w.g2, "Green", jeu, UL, 340, 35, 50, 25
    button #w.g3, "Green", jeu, UL, 390, 35, 50, 25
    button #w.g4, "Green", jeu, UL, 440, 35, 50, 25
    button #w.g5, "Green", jeu, UL, 490, 35, 50, 25
    button #w.y1, "Yellow", jeu, UL, 290, 60, 50, 25
    button #w.y2, "Yellow", jeu, UL, 340, 60, 50, 25
    button #w.y3, "Yellow", jeu, UL, 390, 60, 50, 25
    button #w.y4, "Yellow", jeu, UL, 440, 60, 50, 25
    button #w.y5, "Yellow", jeu, UL, 490, 60, 50, 25
    button #w.p1, "pink", jeu, UL, 290, 85, 50, 25
    button #w.p2, "pink", jeu, UL, 340, 85, 50, 25
    button #w.p3, "pink", jeu, UL, 390, 85, 50, 25
    button #w.p4, "pink", jeu, UL, 440, 85, 50, 25
    button #w.p5, "pink", jeu, UL, 490, 85, 50, 25
    button #w.b1, "blue", jeu, UL, 290, 110, 50, 25
    button #w.b2, "blue", jeu, UL, 340, 110, 50, 25
    button #w.b3, "blue", jeu, UL, 390, 110, 50, 25
    button #w.b4, "blue", jeu, UL, 440, 110, 50, 25
    button #w.b5, "blue", jeu, UL, 490, 110, 50, 25
    graphicbox #w.a, 5,5,180,555
    graphicbox #w.b, 195,5,80,555
    open "Mastermind..." for window_nf as #w
    #w "trapclose [quit]"
 
 global c$, pro$, prop$', propo$, source$, comb$
 global bcp, bc, y, p, f1
 DIM comb$(5):DIM propo$(5)
 
    'good practice to start with a clean sheet
    #w.a "cls ; down"
    #w.b "cls ; down"
 
    #w.a "fill lightgray"
    #w.a "flush videcreensegment"
    #w.b "fill lightgray"
    #w.b "flush videcreensegment"
    'wait

 [new]      '*******************************Début**********
    #w.a "redraw videcreensegment"  'efface l'ancien
    #w.b "redraw videcreensegment"
    PRINT #w.so1,"":PRINT #w.so2,"":PRINT #w.so3,""
    PRINT #w.so4,"":PRINT #w.so5,""
   ' for k=1 to 5
   '   propo$(k)="q"
   ' next k
    y=20 :p=0        'première ligne affichée
    source$="r g y p b"  'les initiales des couleurs(et le left handle$)
    for i=1 to 5
      co=int(rnd(1)*5)+1  'a revoir pour doublons trop frequents
      comb$(i)=word$(source$,co) 'méfiance y'a un comb$(0)
    next i
 ' alternative pour éviter les doublons ARCHTOUNGUE ! Redémmarrage requis
   ''    comb$=""
   '' while len(comb$)<5
   ''     do
   ''         co=int(rnd(1)*5)+1
   ''    loop until instr(comb$,word$(source$,co))=0  'la lettre tirée au sort n'est pas déjà dans solu$
   ''     comb$ = comb$ + word$(source$,co)
   '' wend
      '------------------------------Tour-------------
  wait
 
  sub jeu handle$ 
      pc = instr("rgypb",mid$(handle$,4,1))
      couleur$ = word$("red green yellow pink blue",pc)
      no = val(right$(handle$,1))
 
      #w.a "backcolor ";couleur$;"; color ";couleur$
      #w.a "place ";20+35*(no-1);" ";y;"; circlefilled 15"
      #w.a "flush redsegment"
      #w.a "flush greensegment"
      #w.a "flush yellowsegment"
      #w.a "flush pinksegment"
      #w.a "flush bluesegment"
 
       ' prop$=right$(handle$,2)
       ' pro$=left$(prop$,1) 'j'enlève le "chifre" de "lettre-chifre"
       ' p$=right$(prop$,1)
       ' 'propo$(p)=pro$
       ' propo$(val(p$))=pro$ 

        propo$(no) = left$(couleur$,1)
 
       f1=0
  end sub
  'wait

  [test]    'affiche les points noirs/blancs qu'il y ait des doublons ou pas.
    if len(propo$(1)+propo$(2)+propo$(3)+propo$(4)+propo$(5)) = 5 then
        for p = 1 to 5 :temp$(p) = comb$(p) :next   ' copie du tableau comb$() pour ne pas y toucher.
        noire = 0
        blanche = 0
        for p = 1 to 5
            if propo$(p) = temp$(p) then noire = noire + 1 :temp$(p) = ""   'couleurs à la bonne place : on les retire
        next
        test$ = temp$(1)+temp$(2)+temp$(3)+temp$(4)+temp$(5)  'constitution d'une chaine avec les temp$() restantes
        for p = 1 to 5
            if instr(test$,propo$(p)) > 0 then blanche = blanche + 1  'est-ce qu'on y trouve les propo$() ?
        next
        #w.b "backcolor black; color black"
        x = 10
        while noire > 0
            #w.b "place ";x;" ";y;"; circlefilled 5"  'tant qu'il y a des noires
            x=x+10
            noire = noire - 1
        wend
        #w.b "backcolor white; color white"
        while blanche > 0
            #w.b "place ";x;" ";y;"; circlefilled 5"  'tant qu'il y a des blanches
            x=x+10
            blanche = blanche - 1
        wend
        y=y+35
        redim propo$(5)
        if y>510 then wait  ' PERDU
    end if
  wait
 
[test1]
 
   bcp=0:bc=0:x=10:f1=f1+1
   x=10 ' j'ai l'impresion que des instructions sont sautées...
   bc=0   '... quand elles sont sur la meme ligne
     for j=1 to 5
       if propo$(j)=comb$(j-1) then ' Bonne Coul Place..
         bcp=bcp+1:propo$(j)="z"   ' z neutralise
       end if                       'bcp lue plus bas
     next        'toutes les bonnes coul/place sont neutralisées
     if bcp=0 then x=10  ' ici aussi

     for j=1 to 5
       if propo$(j)=comb$(0) then  'Bonne Coul
         bc=bc+1: propo$(j)="z"      'z neutralise
       end if
     next
     for j=1 to 5
       if propo$(j)=comb$(1) then
         bc=bc+1: propo$(j)="z"
       end if
     next
     for j=1 to 5
       if propo$(j)=comb$(2) then
         bc=bc+1: propo$(j)="z"
       end if
     next
     for j=1 to 5
       if propo$(j)=comb$(3) then
         bc=bc+1: propo$(j)="z"
       end if
     next
     for j=1 to 5
       if propo$(j)=comb$(4) then
         bc=bc+1: propo$(j)="z"
       end if
     next
      'affichage...bcp=total Bonne Coul/Place...bc=total Bonne Coul
     if bcp<>0 then     'bonne couleur bonne place
       for u=1 to bcp
         #w.b "backcolor black; color black"
         #w.b "place ";x;" ";y;"; circlefilled 5"
         #w.b "flush blacksegment"
         #w.b "redraw blacksegment"
         x=x+10
       next
     end if
 
     if bc<>0 and bcp<>0 then xx=x 'report dernier x si bcp<>0
       if bc<>0 then     'bonne couleur mauvaise place
         for u=1 to bc
            #w.b "backcolor white; color white"
            #w.b "place ";xx;" ";y;"; circlefilled 5"
            #w.b "flush whitesegment"
            #w.b "redraw whitesegment"
            xx=xx+10
         next
       end if
     if f1=1 then y=y+35 ' incrémente descente/tour
    p=0
    'for k=1 to 5
    '  propo$(k)="q"
    'next k
    if y>510 then wait  ' PERDU
 wait
 
[sou1]
    PRINT #w.so1, UPPER$(comb$(1));
 wait
[sou2]
    PRINT #w.so2, UPPER$(comb$(2));
 wait
[sou3]
    PRINT #w.so3, UPPER$(comb$(3));
 wait
[sou4]
    PRINT #w.so4, UPPER$(comb$(4));
 wait
[sou5]
    PRINT #w.so5, UPPER$(comb$(5));
 wait
 
[glop]   ' pas glop !
  'locate 200, 100
  'print "*";
 ' print #w, "place " 350, 400
  'print "string";
  #w.txt "Comment mettre un peu de texte dans ce bazard"; response$
  notice "Comment mettre un peu de texte dans ce bazard ? Statictext = pas glop "
   wait
 
    [quit]
    close #w
    end
 


@+



Edité par cassiope01 Le 06/05/2012 à 22h48
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 06/05/2012 à 18h35

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
J'ai mis ton code au " compreunnoir" (machine à comprendre), tout allait bien jusqu'au "instr$", où la machine à commençé d'émettre des bruits bizarres.
Je ralenti la cadence d'horloge pour éviter la surchauffe.
Te tiens au courant.........à+
____________________
Roro

   
Le 06/05/2012 à 23h19

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
OOPS ! désolé ! petite rectification :

Code VB :
  [test]    'affiche les points noirs/blancs qu'il y ait des doublons ou pas.
    if len(propo$(1)+propo$(2)+propo$(3)+propo$(4)+propo$(5)) = 5 then
        for p = 1 to 5 :temp$(p) = comb$(p) :next   ' copie du tableau comb$() pour ne pas y toucher.
        noire = 0
        blanche = 0
        for p = 1 to 5
            if temp$(p) = propo$(p) then
                noire = noire + 1
                propo$(p) = "_"   'couleurs à la bonne place : on les retire
                temp$(p) = "¤"    'et aussi ds la combinaison secrète
            end if
        next
        for p = 1 to 5
            test$ = propo$(1)+propo$(2)+propo$(3)+propo$(4)+propo$(5)  'constitution d'une chaine avec les propo$() restantes
            t = instr(test$,temp$(p))   'est-ce qu'on y trouve les propo$() ?
            if t > 0 then
                blanche = blanche + 1
                propo$(t) = "_"      'oui, donc on la retire.
            end if
        next
        #w.b "backcolor black; color black"
        x = 10
        while noire > 0
            #w.b "place ";x;" ";y;"; circlefilled 5"  'tant qu'il y a des noires
            x=x+10
            noire = noire - 1
        wend
        #w.b "backcolor white; color white"
        while blanche > 0
            #w.b "place ";x;" ";y;"; circlefilled 5"  'tant qu'il y a des blanches
            x=x+10
            blanche = blanche - 1
        wend
        y=y+35
        redim propo$(5)
        if y>510 then wait  ' PERDU
    end if
  wait
 


Euh ! au MasterMind si je me souvient bien, n'y aurait-il pas que 4 couleurs à choisir pour le joueur parmis 6 couleurs possibles ?

@+



Edité par cassiope01 Le 07/05/2012 à 08h22
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Général » Mastermind en panne La panne...  

 |  |

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