Forum Liberty Basic France

Le 24/03/2014 à 12h32

Libertynaute Débutant

Groupe: Membre

Inscrit le: 03/08/2013
Messages: 16
En voyant ce programme dans JB ou tout est manuel
j'ai repensé a un vieux programme que j'avais fait
sur un ZX81et je n'ai pu m'empecher de vous le soumètre
j'avais des prog's en mode récurcif et je trouvais ça trop
compliqué donc voici ma façon de faire

Code VB :
 
'TOURE DE Hanoî Version Final

    dim color$(4)
    color$(1) = "red"
    color$(2) = "blue"
    color$(3) = "green"
    color$(4) = "yellow"
    base=210
    nd=4                     'nombre de disques
    nc=2^nd-1                'nombre ce coups
 pq(1)=base-nd*10           'Niveau des piquets
 pq(2)=base
 pq(3)=base
on error goto [quit]
 'nomainwin
 WindowWidth = 410
 WindowHeight = 300
 UpperLeftX = 10
 UpperLeftY = 20
 open "Tour de Hanoi" for graphics_nsb as #hanoi
 'print #hanoi, "trapclose [quitHanoi]" ;

 [décor]                        'Affiche plateau

 print #hanoi, "cls ; fill black ; down ; backcolor black" ;
 print #hanoi, "color lightgray ; size 1 " ;
 for y= base to base+10
  print #hanoi,"line 0 ";  y ; " 400 " ; y ;
 next y
                                'Affiche piquets
    print #hanoi, "color darkgray ; size 1 ";
for y =120 to 210
    print #hanoi, "line 95 ";  y ; " 105 " ; y ;
    print #hanoi, "line 195 ";  y ; " 205 " ; y ;
    print #hanoi, "line 295 ";  y ; " 305 " ; y ;
  next y
  #hanoi "flush "
call pause
 h=pq(1)                       'Affiche disques
 for d=1 to  nd                 ' d indice n° disk et couleur !
    for y=h to h+9
    x1=100-10*d: x2=100+10*d
    print #hanoi, "size 1 ";
    print #hanoi, "color "; color$(d)
    print #hanoi, "line "; x1 ; " "; y ;" "; x2; " "; y
    next y
    h=h+10
 next d
 call pause
[déplacement]
DIM disk(nd)
for i= 1 to nd :disk(i)=1 :next i
 
[hanoi]
print"déplacer les ";nd;" disques du piquet 1 au piquet 2 en "; nc;" coups !"
print
for n =1 to nc
    for p=1 to nd 
    d=2^(p-1)
if d and n then exit for
    next p
 depart=disk(p)
    if p and 1 then arrivée=depart+1 else arrivée=depart-1
    if arrivée >3 then arrivée=1
    if arrivée <1 then arrivée=3
 print " déplacer le disque N° "; p;
 print tab(30);" du piquet ";depart;tab(45);" au piquet ";arrivée
 disk(p)=arrivée
gosub [Effacer]
next n
print
print"TERMINE"
[quit]
 wait
 input r$
 playwave "tada.wav"
 close #hanoi
 end
'--------------------------------------------------------------------
[Effacer]
call pause
y=pq(depart)+5
x1=depart*100-40 :x2=depart*100+40
print #hanoi, "color black; size 10";
print #hanoi, "line "; x1 ; " "; y ;" "; x2; " "; y
pq(depart)=pq(depart)+10
'refaire le poteau effacé
x=depart
x1=100*x-5 :x2=100*x+5          'largeur du poteau =10
print #hanoi, "color darkgray ; size 1 ";
for y=pq(depart) to pq(depart)-10 step -1
    print #hanoi, "line "; x1 ; " "; y ;" "; x2; " "; y
next y
 
[Afficher]
x1=arrivée*100-p*10:x2=arrivée*100+p*10
z= pq(arrivée)
print #hanoi, "size 1 ";
    print #hanoi, "color "; color$(p)
for y=z to z-10 step-1
    print #hanoi, "line "; x1 ; " "; y ;" "; x2; " "; y
 next y
pq(arrivée)=pq(arrivée)-10
return
 
sub pause    'pause for a tenth of a second
    start = time$("ms")
    while start + 1000 > time$("ms")'+1000 !------------------------------
    wend
end sub
 
____________________
Les programmes les plus court sont les meilleurs

Web    

 |  |

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