Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| La tour de HANOÏ | |
| | |
Auteur | Message |
---|
bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: La tour de HANOÏ Mer 6 Juin 2012 - 23:12 | |
| Bonsoir à tous les amis panoramiciens, Le problème des tours de Hanoï est un jeu de réflexion imaginé par le mathématicien français Édouard Lucas, et consistant à déplacer des disques de diamètres différents d'une tour de « départ » à une tour d'« arrivée » en passant par une tour « intermédiaire » et ceci en un minimum de coups, tout en respectant les règles suivantes : on ne peut déplacer plus d'un disque à la fois, on ne peut placer un disque que sur un autre disque plus grand que lui ou sur un emplacement vide. Dans le grand temple de Bénarès, au-dessous du dôme qui marque le centre du monde, trois aiguilles de diamant, plantées dans une dalle d'airain, hautes d'une coudée et grosses comme le corps d'une abeille. Sur une de ces aiguilles, Dieu enfila au commencement des siècles, 64 disques d'or pur, le plus large reposant sur l'airain, et les autres, de plus en plus étroits, superposés jusqu'au sommet. C'est la tour sacrée du Brahmâ. Nuit et jour, les prêtres se succèdent sur les marches de l'autel, occupés à transporter la tour de la première aiguille sur la troisième, sans s'écarter des règles fixes que nous venons d'indiquer, et qui ont été imposées par Brahma. Quand tout sera fini, la tour et les brahmes tomberont, et ce sera la fin des mondes ! Un jeu à 64 disques requiert un minimum de (2 puissance 64) -1 déplacements. En admettant qu'il faille 1 seconde pour déplacer un disque, ce qui fait 86 400 déplacements par jour, la fin du jeu aurait lieu au bout d'environ 213 000 milliards de jours, ce qui équivaut à peu près à 584,5 milliards d'années, soit 43 fois l'âge estimé de l'univers (13,7 milliards d'années selon certaines sources). "Source Wikipédia"Donc, vous l'avez deviné, ce que je vous propose, c'est un casse tête, et j'ai fait ce petit programme de casse tête uniquement pour notre ami Jean-Claude, lui qui aime bien ça! Mon objectif était aussi de faire ce programme en moins de 100 lignes de code. Y'en a 90! Oui, je sais j'ai mis des lignes à rallonge aussi, et donc il devrait faire le triple en longueur au moins si on dépliait tout! Mais bon, il faut bien que je m'amuse un peu de temps en temps, non? Allez, voici le code - Code:
-
' TOUR DE HANOÏ fait en Panoramic par Jean-Louis NAUDIN du 06 Juin 2012: Version 1.00 dim i,j,k,h,hy,ma,md,mvt,pas,n,td1,td3,r,v,b,d(3,13),a$,nv$ label mat,dplc,mntr,blq,dblq,niveau,mvmnt,init width 0,1300:height 0,700:left 0,(screen_x-width(0))/2 j=203:for i=1 to 3:picture i:left i,j:top i,250:width i,14:height i,350:j=j+420:color i,90,90,90:next i: ' Les 3 piquets restore:j=40:for i=4 to 13:picture i:hide i:width i,j:height i,30:j=j+40:read r:read v:read b:color i,r,v,b:next i: ' Les 10 disques et en data la couleur des disques data 0,50,0,30,100,0,140,140,0,80,65,10,105,70,0,125,40,0,155,40,25,165,115,80,130,150,95,180,215,95 j=173:for i=14 to 16:button i :left i,j:top i,620:font_bold i:caption i,"Départ":j=j+420:on_click i,mat:next i: ' Les 3 boutons Arrivée/Départ for i=17 to 24:button i:width i,155:height i,50:left i,((i-16)*160)-160:top i,50:font_name i,"Arial Narrow" font_bold i:font_size i,18:read nv$:caption i,nv$:on_click i,niveau:next i:' Les 8 boutons niveaux et en data le nom du niveau data "TROP FACILE","FACILE","MOINS FACILE","NORMAL","DIFFICILE","TRES DIFFICILE","TRUC DE OUF!","SUICIDAIRE" alpha 25:hide 25:left 25,20:top 25,50:font_name 25,"Consolas":font_size 25,30:font_bold 25:font_color 25,190,0,0:caption 25,"MOUVEMENT IMPOSSIBLE" alpha 26:hide 26:left 26,20:top 26,10:font_name 26,"Times New Roman":font_size 26,14:font_bold 26:font_color 26,0,0,200 alpha 27:left 27,430:font_name 27,"Courier New":font_bold 27:font_size 27,40:caption 27,"TOUR DE HANOÏ":font_color 27,0,0,190 memo 28:width 28,1280:height 28,66:top 28,100:font_bold 28:font_size 28,12 item_add 28,"But du jeu: Il faut déplacer tous les disques du mât gauche vers le mât droit en vous aidant du mât central en un minimum de mouvements, sachant qu'on ne " item_add 28,"peut manipuler qu'un seul disque à la fois et qu'on ne peut le poser que sur un plus grand que lui ou sur un mât vide." inactive 28:gosub init end init: j=190:for i=4 to 13:left i,j:j=j-20:top i,180+(30*i):next i:for i=4 to 13:d(1,i)=i:d(2,i)=0:d(3,i)=0:hide i:next i: ' Initialisation mvt=0:gosub mvmnt:for j=17 to 24:show j:next j return mat: if (number_click=14 and caption$(14)="Départ") if d(1,13)=0 then return caption 15,"Arrivée":caption 16,"Arrivée":gosub blq:md=1:gosub mntr:gosub dblq end_if if (number_click=14 and caption$(14)="Arrivée") caption 14,"Départ":caption 15,"Départ":caption 16,"Départ":gosub blq:ma=1:gosub dplc:gosub dblq end_if if (number_click=15 and caption$(15)="Départ") if d(2,13)=0 then return caption 14,"Arrivée":caption 16,"Arrivée":gosub blq:md=2:gosub mntr:gosub dblq end_if if (number_click=15 and caption$(15)="Arrivée") caption 14,"Départ":caption 15,"Départ":caption 16,"Départ":gosub blq:ma=2:gosub dplc:gosub dblq end_if if (number_click=16 and caption$(16)="Départ") if d(3,13)=0 then return caption 14,"Arrivée":caption 15,"Arrivée":gosub blq:md=3:gosub mntr:gosub dblq end_if if (number_click=16 and caption$(16)="Arrivée") caption 14,"Départ":caption 15,"Départ":caption 16,"Départ":gosub blq:ma=3:gosub dplc:gosub dblq end_if return dplc: for j=13 to n step -1:if d(ma,j)=0 then exit_for next j if j<13 if width(d(ma,j+1))<width(d(md,i)) beep:show 25:wait 900 for k=210 to h step 30:top d(md,i),h:wait 100:next k:hide 25:return end_if end_if if (md=1 and ma=2) then hy=left(d(md,i))+420:pas=20 if (md=1 and ma=3) then hy=left(d(md,i))+840:pas=20 if (md=2 and ma=3) then hy=left(d(md,i))+420:pas=20 if (md=2 and ma=1) then hy=left(d(md,i))-420:pas=-20 if (md=3 and ma=1) then hy=left(d(md,i))-840:pas=-20 if (md=3 and ma=2) then hy=left(d(md,i))-420:pas=-20 for k=left(d(md,i)) to hy step pas:left d(md,i),k:wait 50:next k:for k=210 to 180+(30*j) step 30:top d(md,i),k:wait 50:next k d(ma,j)=d(md,i):d(md,i)=0:mvt=mvt+1:gosub mvmnt:td3=0:for i=n to 13:td3=td3+d(3,i):next i if td3=td1 if mvt=power(2,(14-n))-1 message "BRAVO! VOUS ETES UN CHAMPION!" else message "Vous avez réussi, mais hélas vous avez fait "+str$(mvt-(power(2,(14-n))-1))+" mouvements en trop" end_if if message_confirmation_yes_no("Voulez-vous rejouer?")=1 gosub init else terminate end_if end_if return mntr: for i=n to 13:if d(md,i)>0 then exit_for next i:h=top(d(md,i)):for j=top(d(md,i)) to 210 step -30:top d(md,i),j:wait 50:next j return mvmnt: a$="Nombre de mouvements:"+str$(mvt):caption 26,a$ return niveau: n=number_click-((number_click-14)*2):td1=0:message "Ce niveau est réalisable en "+str$(power(2,(14-n))-1)+" mouvements. Bonne chance!" for i=n to 13:td1=td1+d(1,i):show i:next i:for j=17 to 24:hide j:next j:show 26:return blq: inactive 14:inactive 15:inactive 16:return dblq: active 14:active 15:active 16:return Je pense que vous ne devriez pas avoir de problèmes à réussir les 4 premiers niveaux, mais à partir de "Difficile", ça se corse! Alors, ne vous prenez pas trop la tête, et lisez la source Wikipédia qui vous explique comment sont fait les déplacements de manière itérative suivant une même séquence. Et puis un truc: si vous avez un nombre de disques impairs mettez le premier sur le 3ème mât, et si vous avez un nombre pair de disque, commencez par le mât du milieu! Bon courage à tous! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: La tour de HANOÏ Mer 6 Juin 2012 - 23:17 | |
| Problème classique et à essayer... demain. Personnellement, à cette heure-ci, je n'ai pas besoin d'un casse-tête mais d'une bonne tisane, et au lit ! Jean Claude, si tu nous écoutes, bon courage ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: La tour de HANOÏ Mer 6 Juin 2012 - 23:42 | |
| Merci Bignono, plus "prise de tête" que le jeu des couleurs mais très bien fait et un bon vieux casse tête classique comme on les aime Perso, j'ai ajusté les wait à 20 et baissé pas à 10 | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: La tour de HANOÏ Mer 6 Juin 2012 - 23:58 | |
| Oui, mai t'as vu, j'ai fait le niveau "Trop Facile" spécial Jean-Claude Il pourra pas nous dire qu'il reste bloqué au niveau 1 maintenant! Et puis je suis sur que ça devrait lui plaire ce jeu! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: La tour de HANOÏ Jeu 7 Juin 2012 - 0:21 | |
| A moi aussi | |
| | | Invité Invité
| Sujet: Re: La tour de HANOÏ Jeu 7 Juin 2012 - 2:25 | |
| Bonsoir/jour/nuit. Tu fais des programmes intéressant, mais problème: la plupart je ne peux pas les essayer. Qaund je vois la mémoire qu'il faut pour les prendre, je tombe sur un os. Il y en a un qui fais je crois 950 MB, alors qu'il me reste quelque chose comme 150/150 MB, selon le cas. Donc je ne vais pas racheter une clé spécial Bignono.
Là tu fais un programme, et sur mon ordi, je ne vois que les deux premiers dessins. Il faut que je décale à chaque fois l'écran pour voir la suite, et en faisant l'essai en choisissant trop facile, car je ne m'estime pas plus fort que Jean-Claude, je me plante plusieurs fois, car j'ai sous-estimé la largeur des disques pour le placer sur celui que je ne voyais pas.
Mais qu'est-ce que vous avez comme ordi? Je sais que le mien est petit, mais le tour de Hanoi n'a pas besoin d'être en cinémascope ou cinérama.
Beau travail tout de même. Dernière réponse avant plusieurs jours. |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: La tour de HANOÏ Jeu 7 Juin 2012 - 3:40 | |
| Salut Bignono. La tour de Hanoï est un ancien casse-tête, c’est vrai. Mais tu en as fait un bon programme-jeu. Ça va plaire à beaucoup de gents, mais j’ai une remarque à te faire. Le niveau 8 (SUICIDAIRE) qui comporte pas moins de 1023 mouvements (si on joue correctement), me semble impossible pour des pauvres êtres humains que nous sommes. A mon avis, personne ne tentera d’essayer le suicide ! Le 1er niveau, que tu as qualifié de ‘TROP FACILE’, n’est pas aussi facile que ça pour quelqu’un que je connais ! Alors, je me suis permis de modifier un peu ton programme : J’ai supprimé le dernier niveau (SUICIDAIRE), et j’ai ajouté au début un niveau ‘SPECIAL’ mais vraiment SPECIAL pour qui je connais. Voici le code modifié - Code:
-
' TOUR DE HANOÏ fait en Panoramic par Jean-Louis NAUDIN du 06 Juin 2012: Version 1.00 dim i,j,k,h,hy,ma,md,mvt,pas,n,td1,td3,r,v,b,d(3,13),a$,nv$ label mat,dplc,mntr,blq,dblq,niveau,mvmnt,init width 0,1300:height 0,700:left 0,(screen_x-width(0))/2 j=203:for i=1 to 3:picture i:left i,j:top i,250:width i,14:height i,350:j=j+420:color i,90,90,90:next i: ' Les 3 piquets restore:j=40:for i=4 to 13:picture i:hide i:width i,j:height i,30:j=j+40:read r:read v:read b:color i,r,v,b:next i: ' Les 10 disques et en data la couleur des disques data 0,50,0,30,100,0,140,140,0,80,65,10,105,70,0,125,40,0,155,40,25,165,115,80,130,150,95,180,215,95 j=173:for i=14 to 16:button i :left i,j:top i,620:font_bold i:caption i,"Départ":j=j+420:on_click i,mat:next i: ' Les 3 boutons Arrivée/Départ for i=17 to 24:button i:width i,155:height i,50:left i,((i-16)*160)-160:top i,50:font_name i,"Arial Narrow" font_bold i:font_size i,18:read nv$:caption i,nv$:on_click i,niveau:next i:' Les 8 boutons niveaux et en data le nom du niveau data "SPECIAL","TROP FACILE","FACILE","MOINS FACILE","NORMAL","DIFFICILE","TRES DIFFICILE","TRUC DE OUF!" alpha 25:hide 25:left 25,20:top 25,50:font_name 25,"Consolas":font_size 25,30:font_bold 25:font_color 25,190,0,0:caption 25,"MOUVEMENT IMPOSSIBLE" alpha 26:hide 26:left 26,20:top 26,10:font_name 26,"Times New Roman":font_size 26,14:font_bold 26:font_color 26,0,0,200 alpha 27:left 27,430:font_name 27,"Courier New":font_bold 27:font_size 27,40:caption 27,"TOUR DE HANOÏ":font_color 27,0,0,190 memo 28:width 28,1280:height 28,66:top 28,100:font_bold 28:font_size 28,12 item_add 28,"But du jeu: Il faut déplacer tous les disques du mât gauche vers le mât droit en vous aidant du mât central en un minimum de mouvements, sachant qu'on ne " item_add 28,"peut manipuler qu'un seul disque à la fois et qu'on ne peut le poser que sur un plus grand que lui ou sur un mât vide." inactive 28:gosub init end init: j=190:for i=4 to 13:left i,j:j=j-20:top i,180+(30*i):next i:for i=4 to 13:d(1,i)=i:d(2,i)=0:d(3,i)=0:hide i:next i: ' Initialisation mvt=0:gosub mvmnt:for j=17 to 24:show j:next j return mat: if (number_click=14 and caption$(14)="Départ") if d(1,13)=0 then return caption 15,"Arrivée":caption 16,"Arrivée":gosub blq:md=1:gosub mntr:gosub dblq end_if if (number_click=14 and caption$(14)="Arrivée") caption 14,"Départ":caption 15,"Départ":caption 16,"Départ":gosub blq:ma=1:gosub dplc:gosub dblq end_if if (number_click=15 and caption$(15)="Départ") if d(2,13)=0 then return caption 14,"Arrivée":caption 16,"Arrivée":gosub blq:md=2:gosub mntr:gosub dblq end_if if (number_click=15 and caption$(15)="Arrivée") caption 14,"Départ":caption 15,"Départ":caption 16,"Départ":gosub blq:ma=2:gosub dplc:gosub dblq end_if if (number_click=16 and caption$(16)="Départ") if d(3,13)=0 then return caption 14,"Arrivée":caption 15,"Arrivée":gosub blq:md=3:gosub mntr:gosub dblq end_if if (number_click=16 and caption$(16)="Arrivée") caption 14,"Départ":caption 15,"Départ":caption 16,"Départ":gosub blq:ma=3:gosub dplc:gosub dblq end_if return dplc: for j=13 to n step -1:if d(ma,j)=0 then exit_for next j if j<13 if width(d(ma,j+1))<width(d(md,i)) beep:show 25:wait 100 for k=210 to h step 30:top d(md,i),h:wait 100:next k:hide 25:return end_if end_if if (md=1 and ma=2) then hy=left(d(md,i))+420:pas=10 if (md=1 and ma=3) then hy=left(d(md,i))+840:pas=10 if (md=2 and ma=3) then hy=left(d(md,i))+420:pas=10 if (md=2 and ma=1) then hy=left(d(md,i))-420:pas=-10 if (md=3 and ma=1) then hy=left(d(md,i))-840:pas=-10 if (md=3 and ma=2) then hy=left(d(md,i))-420:pas=-10 for k=left(d(md,i)) to hy step pas:left d(md,i),k:wait 50:next k:for k=210 to 180+(30*j) step 30:top d(md,i),k:wait 50:next k d(ma,j)=d(md,i):d(md,i)=0:mvt=mvt+1:gosub mvmnt:td3=0:for i=n to 13:td3=td3+d(3,i):next i if td3=td1 if mvt=power(2,(14-n))-1 message "BRAVO! VOUS ETES UN CHAMPION!" else message "Vous avez réussi, mais hélas vous avez fait "+str$(mvt-(power(2,(14-n))-1))+" mouvements en trop" end_if if message_confirmation_yes_no("Voulez-vous rejouer?")=1 gosub init else terminate end_if end_if return mntr: for i=n to 13:if d(md,i)>0 then exit_for next i:h=top(d(md,i)):for j=top(d(md,i)) to 210 step -30:top d(md,i),j:wait 50:next j return mvmnt: a$="Nombre de mouvements:"+str$(mvt):caption 26,a$ return niveau: if number_click = 17 then n = 13 : else : n=number_click-((number_click-15)*2)-1 td1=0:message "Ce niveau est réalisable en "+str$(power(2,(14-n))-1)+" mouvements. Bonne chance!" for i=n to 13:td1=td1+d(1,i):show i:next i:for j=17 to 24:hide j:next j:show 26:return blq: inactive 14:inactive 15:inactive 16:return dblq: active 14:active 15:active 16:return
Si vous trouvez cette blague de mauvais goût, alors je m’en excuse d’avance. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: La tour de HANOÏ Jeu 7 Juin 2012 - 11:57 | |
| Merci Bignono de faire des jeux spécialement pour moi, je suis touché...... et coulé Papydall, t'es sympa (pour le niveau spécial) mais là franchement "tu pousses le bouchon un peu loin, Maurice". Sérieusement, je suis arrivé au niveau "Normal" mais en dépassant le nombre de coups. Mais je l'aurait un jour, je l'aurait.... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: La tour de HANOÏ Jeu 7 Juin 2012 - 13:34 | |
| Salut Jean Claude. - Jean Claude a écrit:
Sérieusement, je suis arrivé au niveau "Normal" mais en dépassant le nombre de coups. Félicitations pour le niveau « Normal ». Bignono l’a qualifié de ‘Normal’, c’est donc normal qu’un joueur normal peut arriver à ce niveau ‘Normal’ ! Moi, j’ai dû trébucher avant d’y parvenir. Quant au dépassement du nombre de coups, il est tout à fait normal qu’un joueur normal arrive au niveau normal sans commettre quelques inexactitudes ! - Jean Claude a écrit:
Papydall, t'es sympa (pour le niveau spécial) mais là franchement "tu pousses le bouchon un peu loin, Maurice". | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: La tour de HANOÏ Jeu 7 Juin 2012 - 13:52 | |
| Bonjour Jean-Claude, Je suis content que le jeu te plaise et je savais bien que tu pouvais faire le niveau normal. Moi-même j'arrive à faire le niveau normal sans mouvements en plus, mais je m'emmèle dans le niveau difficile, et fatalement je fais plus que 127 mouvements. Mais je suis comme toi, "c'est la MAAF que je préfère", car je l'aurais un jour, je l'aurais! @ papydall, Je trouve que tu y es allé un peu fort là! Mais Jean-Claude, il est sympa, et il ne t'en voudra pas A+ | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: La tour de HANOÏ Jeu 7 Juin 2012 - 16:56 | |
| Pour le moment pas d'amélioration (Normal, je suis dehors et je m'amuse à monter des parpaings) @Papydall, ne soit pas inquiet, j'ai bien pris ta version spéciale comme de l'humour, nul besoin de t'excuser. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: La tour de HANOÏ Jeu 7 Juin 2012 - 18:36 | |
| quoique... ça ne m'aurait pas plu, mais bon... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: La tour de HANOÏ Jeu 7 Juin 2012 - 18:47 | |
| Salut tout le monde. @Bignono Je m’en veux un peu à moi. Je n’aurais pas dû oser. Heureusement que Jean Claude s’est montré plus sympa que moi. Toutes mes excuses à vous tous. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: La tour de HANOÏ Jeu 7 Juin 2012 - 20:23 | |
| | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: La tour de HANOÏ Jeu 7 Juin 2012 - 20:26 | |
| Bravo Jean-Claude (et quelle patiente ) PS: Papydall, tu veux bien mettre une photo sur le forum si tu t'autoflagèle ? | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: La tour de HANOÏ Jeu 7 Juin 2012 - 22:10 | |
| Alors là, chapeau bas Jean-Claude! Je n'arrive pas encore à faire le niveau difficile que toi t'es déjà au très difficile! Et dire que c'est moi qui ai programmé ce jeu! Je me sens ridicule. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: La tour de HANOÏ Jeu 7 Juin 2012 - 23:47 | |
| @Jicehel Pour le moment NOT DONE YET. Et je ne pense pas pouvoir le faire dans l’immédiat. @Jean Claude Tu es le MEILLEUR jusqu’à nouvel ordre ! Je me déculpabilise maintenant. Tu as relevé le défi. BRAVO Mais, avoue que tu as réussi cet exploit, un peu grâce à moi ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: La tour de HANOÏ Ven 8 Juin 2012 - 11:55 | |
| | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: La tour de HANOÏ Ven 8 Juin 2012 - 14:50 | |
| | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: La tour de HANOÏ Ven 8 Juin 2012 - 20:24 | |
| | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: La tour de HANOÏ Ven 8 Juin 2012 - 20:45 | |
| Sans dévoiler la procédure, je donne un indice: Dans ce jeu, c'est comme à l'armée, il faut rempiler.....
A+ | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: La tour de HANOÏ Ven 8 Juin 2012 - 22:29 | |
| | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: La tour de HANOÏ Ven 8 Juin 2012 - 23:57 | |
| Bon, je vois que mon jeu n'est pas encore assez dur pour vous! Il faut dire que chaque disque a une couleur différente, ce qui vous facilite les choses! Bon, et puis il faut que je tienne compte de la remarque de cosmos70, qui me dit que ma tour de Hanoï est en cinémascope et que son écran n'a pas autant de pixels en largeur que les notres! Alors, j'ai fait la version en 3D de la tour de Hanoï et ainsi j'ai réduit de 38% le nombre de pixels en largeur! Et exit les couleurs des disques, maintenant, ils sont tous pareils et la différence de diamètre entre eux est beaucoup plus minime! Mais, c'est jouable. - Code:
-
' TOUR DE HANOÏ en 3D fait en Panoramic par Jean-Louis NAUDIN du 08 Juin 2012: Version 2.00 dim i,j,k,h,hy,ma,md,mvt,pas,n,td1,td3,d(3,13),a$,nv$ label mat,dplc,mntr,blq,dblq,niveau,mvmnt,init width 0,800:left 0,(screen_x-width(0))/2:scene3d 1:full_space 1:color 1,180,180,235 3d_text 1,"TOUR DE HANOÏ":3d_position 1,-7,10,-15:3d_scale 1,2,2,2:3d_color 1,0,60,0 3d_text 2,"MOUVEMENT IMPOSSIBLE":3d_hide 2:3d_position 2,-8.2,8,-15:3d_scale 2,1.5,1.5,1.5:3d_color 2,190,60,0 3d_text 3,"":3d_position 3,-8.2,8,-15:3d_scale 3,1.5,1.5,1.5:3d_color 3,190,60,0 j=-2.5:for i=4 to 13:3d_torus i,2,1.5:3d_position i,-13,j,-20:3d_x_rotate i,90:3d_scale i,(1+((i-13)/15))*2,1,0.25:3d_color i,75,50,0:j=j-0.75:next i: ' Les 10 disques j=150:for i=14 to 16:button i:left i,j:top i,410:font_bold i:caption i,"Départ":j=j+200:on_click i,mat:next i: ' Les 3 boutons Arrivée/Départ restore:for i=17 to 24:button i:hide i:width i,85:left i,((i-16)*95)-80:top i,50:font_name i,"Arial Narrow" font_bold i:font_size i,9:read nv$:caption i,nv$:on_click i,niveau:next i:' Les 8 boutons niveaux et en data le nom du niveau data "TROP FACILE","FACILE","MOINS FACILE","NORMAL","DIFFICILE","TRES DIFFICILE","TRUC DE OUF!","SUICIDAIRE" 3d_box 25,40,1,5:3d_position 25,0,-10.75,-20:3d_color 25,125,40,0: ' Le socle 3d_cylinder 26,10,0.5,0.5:3d_position 26,-13,-5,-20:3d_cylinder 27,10,0.5,0.5:3d_position 27,0,-5,-20:3d_cylinder 28,10,0.5,0.5:3d_position 28,13,-5,-20:' Les 3 piquets memo 29:width 29,782:height 29,86:top 29,75:font_bold 29:font_size 29,12 item_add 29,"But du jeu: Il faut déplacer tous les disques du mât gauche vers le mât droit en vous aidant du " item_add 29,"mât central en un minimum de mouvements, sachant qu'on ne peut manipuler qu'un seul disque " item_add 29,"à la fois et qu'on ne peut le poser que sur un plus grand que lui ou sur un mât vide." inactive 29:gosub init end init: for i=4 to 13:3d_x_position i,-13:next i:for i=4 to 13:d(1,i)=i:d(2,i)=0:d(3,i)=0:3d_hide i:next i: ' Initialisation 3d_hide 3:mvt=0:gosub mvmnt:for j=17 to 24:show j:next j return mat: if (number_click=14 and caption$(14)="Départ") if d(1,13)=0 then return caption 15,"Arrivée":caption 16,"Arrivée":gosub blq:md=1:gosub mntr:gosub dblq end_if if (number_click=14 and caption$(14)="Arrivée") caption 14,"Départ":caption 15,"Départ":caption 16,"Départ":gosub blq:ma=1:gosub dplc:gosub dblq end_if if (number_click=15 and caption$(15)="Départ") if d(2,13)=0 then return caption 14,"Arrivée":caption 16,"Arrivée":gosub blq:md=2:gosub mntr:gosub dblq end_if if (number_click=15 and caption$(15)="Arrivée") caption 14,"Départ":caption 15,"Départ":caption 16,"Départ":gosub blq:ma=2:gosub dplc:gosub dblq end_if if (number_click=16 and caption$(16)="Départ") if d(3,13)=0 then return caption 14,"Arrivée":caption 15,"Arrivée":gosub blq:md=3:gosub mntr:gosub dblq end_if if (number_click=16 and caption$(16)="Arrivée") caption 14,"Départ":caption 15,"Départ":caption 16,"Départ":gosub blq:ma=3:gosub dplc:gosub dblq end_if return dplc: for j=13 to n step -1:if d(ma,j)=0 then exit_for next j if j<13 if d(ma,j+1)<d(md,i) beep:3d_hide 3:3d_show 2:wait 900 for k=2 to h step -0.5:3d_y_position d(md,i),k:wait 15:next k:3d_hide 2:3d_show 3:return end_if end_if if (md=1 and ma=2) then hy=o3d_x_position(d(md,i))+13:pas=0.5 if (md=1 and ma=3) then hy=o3d_x_position(d(md,i))+26:pas=0.5 if (md=2 and ma=3) then hy=o3d_x_position(d(md,i))+13:pas=0.5 if (md=2 and ma=1) then hy=o3d_x_position(d(md,i))-13:pas=-0.5 if (md=3 and ma=1) then hy=o3d_x_position(d(md,i))-26:pas=-0.5 if (md=3 and ma=2) then hy=o3d_x_position(d(md,i))-13:pas=-0.5 for k=o3d_x_position(d(md,i)) to hy step pas:3d_x_position (d(md,i)),k:wait 15:next k:for k=o3d_y_position(d(md,i)) to -0.75*j step abs(pas)*-1:3d_y_position (d(md,i)),k:wait 15:next k d(ma,j)=d(md,i):d(md,i)=0:mvt=mvt+1:gosub mvmnt:td3=0:for i=n to 13:td3=td3+d(3,i):next i if td3=td1 if mvt=power(2,(14-n))-1 message "BRAVO! VOUS ETES UN CHAMPION!" else message "Vous avez réussi, mais hélas vous avez fait "+str$(mvt-(power(2,(14-n))-1))+" mouvements en trop" end_if if message_confirmation_yes_no("Voulez-vous rejouer?")=1 gosub init else terminate end_if end_if return mntr: for i=n to 13:if d(md,i)>0 then exit_for next i:h=o3d_y_position(d(md,i)):for j=h to 2 step 0.5:3d_y_position d(md,i),j:wait 15:next j return mvmnt: a$="Nombre de mouvements:"+str$(mvt):3d_text_change 3,a$ return niveau: n=number_click-((number_click-14)*2):td1=0:message "Ce niveau est réalisable en "+str$(power(2,(14-n))-1)+" mouvements. Bonne chance!" for i=n to 13:td1=td1+d(1,i):3d_show i:next i:for j=17 to 24:hide j:next j:3d_show 3:return blq: inactive 14:inactive 15:inactive 16:return dblq: active 14:active 15:active 16:return A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: La tour de HANOÏ Sam 9 Juin 2012 - 0:25 | |
| Cool la version 3D. Perso, je préfère les anneaux colorés, alors je mets le source pour ceux qui préfère avec les couleurs pour les anneaux - Code:
-
' TOUR DE HANOÏ en 3D fait en Panoramic par Jean-Louis NAUDIN du 08 Juin 2012: Version 2.00 dim i,j,k,h,hy,ma,r,v,b,md,mvt,pas,n,td1,td3,d(3,13),a$,nv$ label mat,dplc,mntr,blq,dblq,niveau,mvmnt,init width 0,800:left 0,(screen_x-width(0))/2:scene3d 1:full_space 1:color 1,180,180,235 3d_text 1,"TOUR DE HANOÏ":3d_position 1,-7,10,-15:3d_scale 1,2,2,2:3d_color 1,0,60,0 3d_text 2,"MOUVEMENT IMPOSSIBLE":3d_hide 2:3d_position 2,-8.2,8,-15:3d_scale 2,1.5,1.5,1.5:3d_color 2,190,60,0 3d_text 3,"":3d_position 3,-8.2,8,-15:3d_scale 3,1.5,1.5,1.5:3d_color 3,190,60,0 light_x_position 60 : light_y_position -10 : light_z_position -60 restore:j=-2.5:for i=4 to 13:3d_torus i,2,1.5:3d_position i,-13,j,-20:3d_x_rotate i,90:3d_scale i,(1+((i-13)/15))*2,1,0.25::read r:read v:read b:3d_color i,r,v,b:j=j-0.75:next i: ' Les 10 disques data 0,50,0,30,100,0,140,140,0,80,65,10,105,70,0,125,40,0,155,40,25,165,115,80,130,150,95,180,215,95 j=150:for i=14 to 16:button i:left i,j:top i,410:font_bold i:caption i,"Départ":j=j+200:on_click i,mat:next i: ' Les 3 boutons Arrivée/Départ for i=17 to 24:button i:hide i:width i,85:left i,((i-16)*95)-80:top i,50:font_name i,"Arial Narrow" font_bold i:font_size i,9:read nv$:caption i,nv$:on_click i,niveau:next i:' Les 8 boutons niveaux et en data le nom du niveau data "TROP FACILE","FACILE","MOINS FACILE","NORMAL","DIFFICILE","TRES DIFFICILE","TRUC DE OUF!","SUICIDAIRE" 3d_box 25,40,1,5:3d_position 25,0,-10.75,-20:3d_color 25,125,80,80: ' Le socle 3d_cylinder 26,10,0.5,0.5:3d_position 26,-13,-5,-20:3d_cylinder 27,10,0.5,0.5:3d_position 27,0,-5,-20:3d_cylinder 28,10,0.5,0.5:3d_position 28,13,-5,-20:' Les 3 piquets memo 29:width 29,782:height 29,86:top 29,75:font_bold 29:font_size 29,12 item_add 29,"But du jeu: Il faut déplacer tous les disques du mât gauche vers le mât droit en vous aidant du " item_add 29,"mât central en un minimum de mouvements, sachant qu'on ne peut manipuler qu'un seul disque " item_add 29,"à la fois et qu'on ne peut le poser que sur un plus grand que lui ou sur un mât vide." inactive 29:gosub init end init: for i=4 to 13:3d_x_position i,-13:next i:for i=4 to 13:d(1,i)=i:d(2,i)=0:d(3,i)=0:3d_hide i:next i: ' Initialisation 3d_hide 3:mvt=0:gosub mvmnt:for j=17 to 24:show j:next j return mat: if (number_click=14 and caption$(14)="Départ") if d(1,13)=0 then return caption 15,"Arrivée":caption 16,"Arrivée":gosub blq:md=1:gosub mntr:gosub dblq end_if if (number_click=14 and caption$(14)="Arrivée") caption 14,"Départ":caption 15,"Départ":caption 16,"Départ":gosub blq:ma=1:gosub dplc:gosub dblq end_if if (number_click=15 and caption$(15)="Départ") if d(2,13)=0 then return caption 14,"Arrivée":caption 16,"Arrivée":gosub blq:md=2:gosub mntr:gosub dblq end_if if (number_click=15 and caption$(15)="Arrivée") caption 14,"Départ":caption 15,"Départ":caption 16,"Départ":gosub blq:ma=2:gosub dplc:gosub dblq end_if if (number_click=16 and caption$(16)="Départ") if d(3,13)=0 then return caption 14,"Arrivée":caption 15,"Arrivée":gosub blq:md=3:gosub mntr:gosub dblq end_if if (number_click=16 and caption$(16)="Arrivée") caption 14,"Départ":caption 15,"Départ":caption 16,"Départ":gosub blq:ma=3:gosub dplc:gosub dblq end_if return dplc: for j=13 to n step -1:if d(ma,j)=0 then exit_for next j if j<13 if d(ma,j+1)<d(md,i) beep:3d_hide 3:3d_show 2:wait 900 for k=2 to h step -0.5:3d_y_position d(md,i),k:wait 15:next k:3d_hide 2:3d_show 3:return end_if end_if if (md=1 and ma=2) then hy=o3d_x_position(d(md,i))+13:pas=0.5 if (md=1 and ma=3) then hy=o3d_x_position(d(md,i))+26:pas=0.5 if (md=2 and ma=3) then hy=o3d_x_position(d(md,i))+13:pas=0.5 if (md=2 and ma=1) then hy=o3d_x_position(d(md,i))-13:pas=-0.5 if (md=3 and ma=1) then hy=o3d_x_position(d(md,i))-26:pas=-0.5 if (md=3 and ma=2) then hy=o3d_x_position(d(md,i))-13:pas=-0.5 for k=o3d_x_position(d(md,i)) to hy step pas:3d_x_position (d(md,i)),k:wait 15:next k:for k=o3d_y_position(d(md,i)) to -0.75*j step abs(pas)*-1:3d_y_position (d(md,i)),k:wait 15:next k d(ma,j)=d(md,i):d(md,i)=0:mvt=mvt+1:gosub mvmnt:td3=0:for i=n to 13:td3=td3+d(3,i):next i if td3=td1 if mvt=power(2,(14-n))-1 message "BRAVO! VOUS ETES UN CHAMPION!" else message "Vous avez réussi, mais hélas vous avez fait "+str$(mvt-(power(2,(14-n))-1))+" mouvements en trop" end_if if message_confirmation_yes_no("Voulez-vous rejouer?")=1 gosub init else terminate end_if end_if return mntr: for i=n to 13:if d(md,i)>0 then exit_for next i:h=o3d_y_position(d(md,i)):for j=h to 2 step 0.5:3d_y_position d(md,i),j:wait 15:next j return mvmnt: a$="Nombre de mouvements:"+str$(mvt):3d_text_change 3,a$ return niveau: n=number_click-((number_click-14)*2):td1=0:message "Ce niveau est réalisable en "+str$(power(2,(14-n))-1)+" mouvements. Bonne chance!" for i=n to 13:td1=td1+d(1,i):3d_show i:next i:for j=17 to 24:hide j:next j:3d_show 3:return blq: inactive 14:inactive 15:inactive 16:return dblq: active 14:active 15:active 16:return | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: La tour de HANOÏ Sam 9 Juin 2012 - 1:29 | |
| Salut Bignono.
J’aime mieux cette version en 3D. L’affichage tient mieux sur l’écran sans la contrainte de déplacer les barres de défilements. C’est propre et ça a un look professionnel ! Quant à la couleur, je suis pour une couleur unique pour tous les disques et ça n’a aucune incidence sur la facilité ou la difficulté de jouer.
Pour dire vrai, j’ai trouvé sur le NET un algorithme qui peut donner la solution pour n’importe quel nombre de disques (aussi grand que l’on veut). Mais c’est un algorithme recursif. Or, PANORAMIC n’autorise pas encore la récursivité, j’ai dû écrire un petit programme en Virtual Pascal (qui, lui, permet la récursivité).
Le programme ne demande que la simple valeur N du nombres des disques. Une fois cette valeur entrée, le programme affiche immédiatement tous les mouvements nécessaires pour aboutir à la solution.
Pour ne pas gâcher le plaisir de jouer, je donne ici seulement la solution pour le niveau ‘moins facile’ qui comporte 5 disques et nécessite 31 mouvements.
1/3 1/2 3/2 1/3 2/1 2/3 1/3 1/2 3/2 3/1 2/1 3/2 1/3 1/2 3/2 1/3 2/1 2/3 1/3 2/1 3/2 3/1 2/1 2/3 1/3 1/2 3/2 1/3 2/1 2/3 1/3
Interpretation de la solution :
Les 3 tours sont numérotées 1 pour la tour de départ (celle la plus à gauche) 2 pour la tour intermédiaire (celle du milieu) 3 pour la tour d’arrivée (celle la plus à droite) La solution sous forme T/T’ veut dire : déplacer le disque se trouvant au sommet de la tour T vers la tour T’. En effectuant tous ces mouvements, on aboutit à la solution.
@Tous
Si vous voulez que je vous fournisse le programme en VP, je le ferais volontiers. Je peux poster le source HANOI.PAS, mais l’exécutable HANOI.EXE, je ne sais pas comment le poster.
A+
| |
| | | Contenu sponsorisé
| Sujet: Re: La tour de HANOÏ | |
| |
| | | | La tour de HANOÏ | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |