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 |
|
|
| Le jeu des quatre cavaliers | |
| | Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Le jeu des quatre cavaliers Ven 20 Juin 2014 - 1:09 | |
| Salut tout le monde. Je vous propose un petit casse-tête à résoudre. Petit, parce qu’il se déroule sur une grille de 3X3 cases, casse-tête parce qu’il peut (j’en suis persuadé) donner du fil à retordre à certains ! Principe du jeu : sur un plateau de 3X3 cases, on place deux cavaliers d’une couleur sur les deux coins du haut et deux autres cavaliers d’une autre couleur sur les deux coins du bas. Le but du jeu est de permuter les cavaliers : ceux du haut doivent prendre les places de ceux du bas et ceux du bas doivent prendre les places de ceux du haut. Il n’est permis de déplacer un cavalier que vers une case vide en utilisant les mouvements du cavalier du jeu d’échec. Simple, vous dites ? Alors tentez votre chance ! Vous pouvez (si vous voulez faire travailler vos neurones) télécharger le programme sur mon Webdav : 4Cavalieres.zipBon, je préfère des cavalières à la place des cavaliers, mais le principe du jeu reste le même. Dézippez le zip où bon vous semble, adaptez (ligne 16) le chemin qui mène au jeu et non à Rome (comme c’est écrit dans le code ! ) et puis ... je vous souhaite quelques moments de détente après les moments de réflexion. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Le jeu des quatre cavaliers Ven 20 Juin 2014 - 12:41 | |
| Ben ... c'est pas facile, J'aime bien les cavalières au bord de la plage, je suppose qu'elle son jumelles. Heu... les canassons aussi Pour le moment j'ai réussi à les faire passer du haut vers le bas et vice-versa, mais cote à cote. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le jeu des quatre cavaliers Ven 20 Juin 2014 - 13:08 | |
| Jean Claude, c’est bien ce que tu as réalisé mais ce n’est pas assez. Le but du jeu c’est qu’au final, celles du haut descendent (en bas) et celles du bas montent (en haut) et que les quatre occupent les coins et non côte à côte. Il te reste beaucoup de travail mais tu arriveras avec un peu (ou beaucoup) de réflexion et de persévérance ! Bon divertissement ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le jeu des quatre cavaliers Ven 20 Juin 2014 - 14:32 | |
| Pas encore testé, je viens de voir que tu avais fait ce nouveau jeu. J'y remédie dès que possible | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Le jeu des quatre cavaliers Ven 20 Juin 2014 - 16:54 | |
| papydall, tu nous embêtes, c'est trop dur... manque un petit bouton réinit quand on ne sait plus quoi faire et qu'on tourne en rond... Pour faire comme jean Claude ça va assez vite, mais après... et pour faire le puriste, je dirais qu'il manque le end_sub de la sub Jeu mais c'est juste pour t'embêter. PS je viens de réussir,mais en 26 coups (cheval de bronze), c'est plutôt laborieux ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le jeu des quatre cavaliers Ven 20 Juin 2014 - 20:24 | |
| Bien, Voilà JL35 a gagné le cheval de bronze ; il reste le cheval d’argent et surtout le cheval d’or, alors à vos boutons de souris ! Personnellement j’ai eu droit au cheval de bronze deux fois de suite et puis le cheval d’argent était lui aussi au rendez-vous, ensuite …. je ne sais plus refaire aucune de ces performances ! - JL35 a écrit:
- et pour faire le puriste, je dirais qu'il manque le end_sub de la sub Jeu mais c'est juste pour t'embêter.
Mais tu ne m’embêtes pas ; tu as bien fait pour me corriger (Heu … me corriger, non mais corriger ce que j’ai oublié de coder !) Et tu as aussi l’excellente idée d’ « un petit bouton réinit quand on ne sait plus quoi faire et qu'on tourne en rond... »Et bien c'est fait : voici comment je me suis pris. - Code:
-
rem ============================================================================ rem Problème des quatres cavalières rem 4cavalieres.bas rem Par Papydall rem ============================================================================
Jeu()
end rem ============================================================================ SUB Jeu()
label click dim rep$,fich$,i,t(9),n ,clic ,depart,arrivee, nb_deplacement height 0,700 : width 0,1200 rep$ = "C:\Users\acer\Desktop\4Cavalieres\" : ' Adapter le chemin qui mène à ... Rome !
button 5 : top 5,50 : left 5,900 : caption 5,"RAZ" : on_click 5,click alpha 6 : top 6,55 : left 6,1000: caption 6,"Nb Mouvements : " : font_bold 6 alpha 7 : top 7,55 : left 7,1100 for i = 10 to 90 step 10 picture i : width i,260 : height i,200 on_click i,click next i top 10,010 : left 10,030 : top 20,010 : left 20,300 top 30,010 : left 30,570 : top 40,220 : left 40,030 top 50,220 : left 50,300 : top 60,220 : left 60,570 top 70,430 : left 70,030 : top 80,430 : left 80,300 top 90,430 : left 90,570
Init(): info() end_sub rem ============================================================================ SUB Init() dim_local i
for i = 10 to 90 step 10 : file_load i,rep$+"cavaliere0.jpg" : t(i/10) = 0 : next i fich$ = "cavaliere1.jpg" : file_load 10,rep$+fich$ : file_load 30,rep$+fich$ fich$ = "cavaliere2.jpg" : file_load 70,rep$+fich$ : file_load 90,rep$+fich$ t(1) = 1 : t(3) = 1 : t(7) = 2 : t(9) = 2 : clic = 0 : Nb_deplacement = 0 caption 7,str$(nb_deplacement) END_SUB rem ============================================================================ ' Informations sur le jeu SUB Info()
label fermer form 1 : left 1,50 : top 1,50 : height 1,500 : width 1, 700 print_target_is 1 : font_bold 1 : font_size 1,12 : font_color 1,0,0,255 button 2 : parent 2,1 : top 2,400 : left 2, 300 : caption 2,"Fermer" on_click 2,fermer print : print : print " Problème des quatres cavaliers":print print " Sur un plateau de 3X3 cases, on place deux cavalières (sur la plage) en haut":print print " et deux autres cavalières (dans la forêt.) en bas" :print print " Le but du jeu est de permuter les cavalières (sur la plage et dans la forêt)": print print " avec le minimum de déplacements." : print print " Il est seulement permis de déplacer une cavalière vers une case vide en utilisant": print print " les mouvements du cavalier du jeu d'échec.": print print " Cliquez sur la cavalière à déplacer, puis cliquez sur la case cible.":print print " Le programme veille à ce que le déplacement soit possible" :print print " Sinon,il ne se passe rien!":print print " Il est possible de parvenir à la solution en effectuant seulement seize déplacements.": print print " Indice : Il faut passer d'une configuration en X à une configuration en + puis en X ..."
end_sub rem ============================================================================ ' Fermer la fenêtre d'info Fermer: hide 1 return rem ============================================================================ ' Gestion des clicks Click:
n = number_click : clic = clic + 1 if n = 5 then Init() : return if depart = 0 then depart = n if clic = 2 then arrivee = n : deplacement_Valide() return rem ============================================================================ ' Teste la validité du déplacement ' La case du départ doit contenir une cavalière et la case d'arrivée doit être libre ' et satisfaire au mouvement du cavalier du jeu d'échec. SUB Deplacement_Valide() dim_local i i = arrivee/10 if (depart = 10) and ((arrivee = 60) or ( arrivee = 80)) and (t(i) = 0) then Deplacer() if (depart = 20) and ((arrivee = 70) or ( arrivee = 90)) and (t(i) = 0) then Deplacer() if (depart = 30) and ((arrivee = 40) or ( arrivee = 80)) and (t(i) = 0) then Deplacer() if (depart = 40) and ((arrivee = 30) or ( arrivee = 90)) and (t(i) = 0) then Deplacer() if (depart = 60) and ((arrivee = 10) or ( arrivee = 70)) and (t(i) = 0) then Deplacer() if (depart = 70) and ((arrivee = 60) or ( arrivee = 20)) and (t(i) = 0) then Deplacer() if (depart = 80) and ((arrivee = 10) or ( arrivee = 30)) and (t(i) = 0) then Deplacer() if (depart = 90) and ((arrivee = 20) or ( arrivee = 40)) and (t(i) = 0) then Deplacer() clic = 0 : depart = 0 : arrivee = 0 caption 7,str$(nb_deplacement) if Nb_deplacement > 15 then verif() END_SUB rem ============================================================================ ' Ici, on effectue le mouvement de la cavalière SUB Deplacer() file_load depart,rep$+"cavaliere0.jpg" fich$ = "cavaliere" + str$(t(depart/10)) + ".jpg" file_load arrivee,rep$+fich$ : t(arrivee/10) = t(depart/10) : t(depart/10) = 0 if fich$ <> "cavaliere0.jpg" then Nb_deplacement = Nb_deplacement + 1 END_SUB rem ============================================================================ ' Ici, on vérifie si on a réussi à trouver la solution ' Si oui un message de félicitation (avec appréciation) s'affiche SUB Verif() dim_local t$ if (t(1) = 2) and (t(3) = 2) and (t(7) = 1) and (t(9) = 1) t$ = "*** Félicitations ***" if Nb_deplacement = 16 t$ = t$ + "!!! BRAVO ! Vous êtes le champion des champions !!!" + chr$(13) t$ = t$ + "!!! Vous avez gagné le CHEVAL D'OR !!!" else if Nb_deplacement < 23 t$ = "!!! BRAVO ! Vous êtes le champion !!!" + chr$(13) t$ = t$ + " Vous pouvez mieux faire !!!" + chr$(13) t$ = t$ + "!!! Vous avez gagné le CHEVAL D'ARGENT !!!" else t$ = "!!! BRAVO ! Vous êtes un champion !!!" + chr$(13) t$ = t$ + "Mais vous pouvez améliorer votre score !!!" + chr$(13) t$ = t$ + "!!! Vous avez gagné le CHEVAL DE BRONZE !!!" end_if end_if message t$ end_if end_sub rem ============================================================================
NB : je n’ai pas mis à jour le programme sur mon Webdav : il y aura peut-être d’autres modifications. Alors n’hésitez pas à commenter, à proposer et même à critiquer ! C'est comme ça qu'on apprend. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Le jeu des quatre cavaliers Ven 20 Juin 2014 - 21:06 | |
| Merci papydall. Mais j'arrive parfois à des situations bizarres où les clics restent sans effet, alors que j'ai des possibilités de bouger, tout reste figé et il faut quitter, je ne vois pas trop pourquoi... mais je n'ai pas étudié le code. là par exemple (mais je ne dis pas que c'est lié à cette configuration particulière, d'ailleurs si je la reproduis ça ne le fait plus, et c'était pareil avec la 1ère version): N'empêche papydall, c'est un beau jeu, en si peu de lignes. Remarque: la case centrale ne peut pas recevoir d'image (il n'y en a déjà pas trop de disponibles...) | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le jeu des quatre cavaliers Ven 20 Juin 2014 - 21:40 | |
| Ça m’a arrivé aussi la situation de ne plus pouvoir bouger alors que c’est possible et je ne vois pas pourquoi. Il y a certainement une solution à cela. Je regarderai quand j’aurai grandit un peu ! Pour le moment, j’ai d’autres chats à caresser (il ne faut surtout pas les fouetter ! ) En ce qui concerne la case centrale : c’est vrai qu’elle ne peut pas être une destination : c’est impossible. D’ailleurs, dans le code ( SUB Deplacement_Valide() ), je teste toutes les cases (départ ou arrivée) sauf la case centrale. Pour le moment je vais caresser mes chats ! D’ici-là si tu trouves le pourquoi de la situation figée, ça sera parfait. A + | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Le jeu des quatre cavaliers Ven 20 Juin 2014 - 22:14 | |
| Eh, moi aussi j'ai d'autres chats à fouetter (drôle d'expression d'ailleurs...). Je ne vois rien dans le code qui semble propre, à part le fait des subs qui appellent des subs qui appellent des sous-programmes externes..., je ne sais pas, ça me paraît un peu scabreux, même si ce n'est qu'un sentiment non justifié. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le jeu des quatre cavaliers Ven 20 Juin 2014 - 23:01 | |
| Qui dit mieux ?Juste ce qu'il faut : 16 coups et basta !La question qui se pose : puis-je refaire cette performance ? J'y retourne pour voir. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le jeu des quatre cavaliers Ven 20 Juin 2014 - 23:37 | |
| Une petite amélioration du programme. Désormais, les déplacements effectués sont affichés dans une liste. Je pense aussi avoir résolu le problème de l'image figée (les tests peuvent affirmer ou infirmer cela) J’ai relevé les 16 mouvements nécessaires à réaliser la tâche, mais je ne vais pas les dévoiler, sous peine de gâcher le plaisir de jouer ! - Code:
-
rem ============================================================================ rem Problème des quatres cavalières rem 4cavalieres.bas rem Par Papydall rem ============================================================================
Jeu()
end rem ============================================================================ SUB Jeu()
label click dim rep$,fich$,i,t(9),n ,clic ,depart,arrivee, nb_deplacement height 0,700 : width 0,1200 rep$ = "C:\Users\acer\Desktop\4Cavalieres\" : ' Adapter le chemin qui mène à ... Rome !
button 5 : top 5,50 : left 5,900 : caption 5,"RAZ" : on_click 5,click alpha 6 : top 6,55 : left 6,1000: caption 6,"Nb Mouvements : " : font_bold 6 alpha 7 : top 7,55 : left 7,1100 list 8 : top 8,100 : left 8, 900 : width 8,200 : height 8,550 : font_bold 8 for i = 10 to 90 step 10 picture i : width i,260 : height i,200 on_click i,click next i top 10,010 : left 10,030 : top 20,010 : left 20,300 top 30,010 : left 30,570 : top 40,220 : left 40,030 top 50,220 : left 50,300 : top 60,220 : left 60,570 top 70,430 : left 70,030 : top 80,430 : left 80,300 top 90,430 : left 90,570
Init(): info()
end_sub rem ============================================================================ SUB Init() dim_local i
for i = 10 to 90 step 10 : file_load i,rep$+"cavaliere0.jpg" : t(i/10) = 0 : next i fich$ = "cavaliere1.jpg" : file_load 10,rep$+fich$ : file_load 30,rep$+fich$ fich$ = "cavaliere2.jpg" : file_load 70,rep$+fich$ : file_load 90,rep$+fich$ t(1) = 1 : t(3) = 1 : t(7) = 2 : t(9) = 2 : clic = 0 : Nb_deplacement = 0 caption 7,str$(nb_deplacement) clear 8 : item_add 8," Mouvements effectués" END_SUB rem ============================================================================ ' Informations sur le jeu SUB Info()
label fermer form 1 : left 1,50 : top 1,50 : height 1,500 : width 1, 700 print_target_is 1 : font_bold 1 : font_size 1,12 : font_color 1,0,0,255 button 2 : parent 2,1 : top 2,400 : left 2, 300 : caption 2,"Fermer" on_click 2,fermer print : print : print " Problème des quatres cavaliers":print print " Sur un plateau de 3X3 cases, on place deux cavalières (sur la plage) en haut":print print " et deux autres cavalières (dans la forêt.) en bas" :print print " Le but du jeu est de permuter les cavalières (sur la plage et dans la forêt)": print print " avec le minimum de déplacements." : print print " Il est seulement permis de déplacer une cavalière vers une case vide en utilisant": print print " les mouvements du cavalier du jeu d'échec.": print print " Cliquez sur la cavalière à déplacer, puis cliquez sur la case cible.":print print " Le programme veille à ce que le déplacement soit possible" :print print " Sinon,il ne se passe rien!":print print " Il est possible de parvenir à la solution en effectuant seulement seize déplacements.": print print " Indice : Il faut passer d'une configuration en X à une configuration en + puis en X ..."
end_sub rem ============================================================================ ' Fermer la fenêtre d'info Fermer: hide 1 return rem ============================================================================ ' Gestion des clicks Click:
n = number_click : clic = clic + 1 if n = 5 then Init() : return if depart = 0 then depart = n if clic = 2 then arrivee = n : deplacement_Valide()
return rem ============================================================================ ' Teste la validité du déplacement ' La case du départ doit contenir une cavalière et la case d'arrivée doit être libre ' et satisfaire au mouvement du cavalier du jeu d'échec. SUB Deplacement_Valide() dim_local i i = arrivee/10 if (depart = 10) and ((arrivee = 60) or ( arrivee = 80)) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 20) and ((arrivee = 70) or ( arrivee = 90)) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 30) and ((arrivee = 40) or ( arrivee = 80)) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 40) and ((arrivee = 30) or ( arrivee = 90)) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 60) and ((arrivee = 10) or ( arrivee = 70)) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 70) and ((arrivee = 60) or ( arrivee = 20)) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 80) and ((arrivee = 10) or ( arrivee = 30)) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 90) and ((arrivee = 20) or ( arrivee = 40)) and (t(i) = 0) then Deplacer() : exit_sub clic = 0 : depart = 0 : arrivee = 0
END_SUB rem ============================================================================ ' Ici, on effectue le mouvement de la cavalière SUB Deplacer() file_load depart,rep$+"cavaliere0.jpg" fich$ = "cavaliere" + str$(t(depart/10)) + ".jpg" file_load arrivee,rep$+fich$ : t(arrivee/10) = t(depart/10) : t(depart/10) = 0 if fich$ <> "cavaliere0.jpg" then Nb_deplacement = Nb_deplacement + 1 item_add 8," Case " + str$(depart/10) + " ==> case " + str$(arrivee/10) clic = 0 : depart = 0 : arrivee = 0 caption 7,str$(nb_deplacement) if Nb_deplacement > 15 then verif() END_SUB rem ============================================================================ ' Ici, on vérifie si on a réussi à trouver la solution ' Si oui un message de félicitation (avec appréciation) s'affiche SUB Verif() dim_local t$ if (t(1) = 2) and (t(3) = 2) and (t(7) = 1) and (t(9) = 1) t$ = "*** Félicitations ***" if Nb_deplacement = 16 t$ = t$ + "!!! BRAVO ! Vous êtes le champion des champions !!!" + chr$(13) t$ = t$ + "!!! Vous avez gagné le CHEVAL D'OR !!!" else if Nb_deplacement < 23 t$ = "!!! BRAVO ! Vous êtes le champion !!!" + chr$(13) t$ = t$ + " Vous pouvez mieux faire !!!" + chr$(13) t$ = t$ + "!!! Vous avez gagné le CHEVAL D'ARGENT !!!" else t$ = "!!! BRAVO ! Vous êtes un champion !!!" + chr$(13) t$ = t$ + "Mais vous pouvez améliorer votre score !!!" + chr$(13) t$ = t$ + "!!! Vous avez gagné le CHEVAL DE BRONZE !!!" end_if end_if message t$ end_if end_sub rem ============================================================================
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Le jeu des quatre cavaliers Sam 21 Juin 2014 - 0:06 | |
| ça attendra un peu, pour le moment je ne vais pas me coucher énervé ! bonne nuit ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le jeu des quatre cavaliers Sam 21 Juin 2014 - 0:47 | |
| J’ai modifié mon programme en ajoutant un bouton AUTORUN pour le faire jouer tout seul comme un grand. Il trouve la solution en 16 coups : c’est juste le SMIG ! Toujours pour ne pas gâcher le plaisir de torturer ses neurones, je ne vais pas poster cette version. Il faut laisser le temps pour les Jean Claude, les Jean Charles, et les autres Panoramiciens pour une partie de torture cérébrale ! Peut-être si les demandes se font pressantes je posterais la version AUTORUN. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le jeu des quatre cavaliers Sam 21 Juin 2014 - 10:40 | |
| Première partie: Cheval d'or ... J'ai de la chance | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Le jeu des quatre cavaliers Sam 21 Juin 2014 - 11:34 | |
| Eh Jicehel, t'es sûr que papydall n'a pas mis la version autorun par erreur ? | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le jeu des quatre cavaliers Sam 21 Juin 2014 - 11:50 | |
| Joli ! Le cheval de bronze et le cheval d’or sont « tombés ». Il ne reste plus que le cheval d’argent. A qui le tour ? Puisque le talentueux Jicehel a décroché le cheval d’or et a posté l’image indiquant les mouvements à faire pour réussir le jeu, je vous poste le programme modifié avec l’option AUTORUN. NB : j’ai remis à jour mon Webdav. - Code:
-
rem ============================================================================ rem Problème des quatres cavalières rem 4cavalieres.bas rem Par Papydall rem ============================================================================
Jeu()
end rem ============================================================================ SUB Jeu()
label click dim rep$,fich$,i,t(9),n ,clic ,depart,arrivee, nb_deplacement height 0,700 : width 0,1200 rep$ = "C:\Users\acer\Desktop\4Cavalieres\" : ' Adapter le chemin qui mène à ... Rome !
button 5 : top 5,50 : left 5,850 : caption 5,"RAZ" : on_click 5,click alpha 6 : top 6,55 : left 6,950: caption 6,"Nb Mouvements : " : font_bold 6 alpha 7 : top 7,55 : left 7,1050 list 8 : top 8,100 : left 8, 900 : width 8,200 : height 8,550 : font_bold 8 button 9 : top 9,50 : left 9,1100 : caption 9,"AUTORUN" : on_click 9,click for i = 10 to 90 step 10 picture i : width i,260 : height i,200 : on_click i,click next i top 10,010 : left 10,030 : top 20,010 : left 20,300 top 30,010 : left 30,570 : top 40,220 : left 40,030 top 50,220 : left 50,300 : top 60,220 : left 60,570 top 70,430 : left 70,030 : top 80,430 : left 80,300 top 90,430 : left 90,570
Init(): info()
end_sub rem ============================================================================ SUB Init() dim_local i for i = 10 to 90 step 10 : file_load i,rep$+"cavaliere0.jpg" : t(i/10) = 0 : next i fich$ = "cavaliere1.jpg" : file_load 10,rep$+fich$ : file_load 30,rep$+fich$ fich$ = "cavaliere2.jpg" : file_load 70,rep$+fich$ : file_load 90,rep$+fich$ t(1) = 1 : t(3) = 1 : t(7) = 2 : t(9) = 2 : clic = 0 : Nb_deplacement = 0 caption 7,str$(nb_deplacement) clear 8 : item_add 8," Mouvements effectués" END_SUB rem ============================================================================ ' Informations sur le jeu SUB Info()
label fermer form 1 : left 1,50 : top 1,50 : height 1,500 : width 1, 700 print_target_is 1 : font_bold 1 : font_size 1,12 : font_color 1,0,0,255 button 2 : parent 2,1 : top 2,400 : left 2, 300 : caption 2,"Fermer" on_click 2,fermer print : print : print " Problème des quatres cavaliers":print print " Sur un plateau de 3X3 cases, on place deux cavalières (sur la plage) en haut":print print " et deux autres cavalières (dans la forêt.) en bas" :print print " Le but du jeu est de permuter les cavalières (sur la plage et dans la forêt)": print print " avec le minimum de déplacements." : print print " Il est seulement permis de déplacer une cavalière vers une case vide en utilisant": print print " les mouvements du cavalier du jeu d'échec.": print print " Cliquez sur la cavalière à déplacer, puis cliquez sur la case cible.":print print " Le programme veille à ce que le déplacement soit possible" :print print " Sinon,il ne se passe rien!":print print " Il est possible de parvenir à la solution en effectuant seulement seize déplacements.": print print " Indice : Il faut passer d'une configuration en X à une configuration en + puis en X ..."
end_sub rem ============================================================================ ' Fermer la fenêtre d'info Fermer: hide 1 return rem ============================================================================ ' Gestion des clicks Click:
n = number_click : clic = clic + 1 if n = 5 then Init() : return if n = 9 then autoRun() : return if depart = 0 then depart = n if clic = 2 then arrivee = n : deplacement_Valide()
return rem ============================================================================ ' Teste la validité du déplacement ' La case du départ doit contenir une cavalière et la case d'arrivée doit être libre ' et satisfaire au mouvement du cavalier du jeu d'échec. SUB Deplacement_Valide() dim_local i i = arrivee/10 if (depart = 10) and ((arrivee = 60) or ( arrivee = 80)) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 20) and ((arrivee = 70) or ( arrivee = 90)) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 30) and ((arrivee = 40) or ( arrivee = 80)) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 40) and ((arrivee = 30) or ( arrivee = 90)) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 60) and ((arrivee = 10) or ( arrivee = 70)) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 70) and ((arrivee = 60) or ( arrivee = 20)) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 80) and ((arrivee = 10) or ( arrivee = 30)) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 90) and ((arrivee = 20) or ( arrivee = 40)) and (t(i) = 0) then Deplacer() : exit_sub clic = 0 : depart = 0 : arrivee = 0
END_SUB rem ============================================================================ ' Ici, on effectue le mouvement de la cavalière SUB Deplacer() file_load depart,rep$+"cavaliere0.jpg" fich$ = "cavaliere" + str$(t(depart/10)) + ".jpg" file_load arrivee,rep$+fich$ : t(arrivee/10) = t(depart/10) : t(depart/10) = 0 if fich$ <> "cavaliere0.jpg" then Nb_deplacement = Nb_deplacement + 1 item_add 8," Case " + str$(depart/10) + " ==> case " + str$(arrivee/10) clic = 0 : depart = 0 : arrivee = 0 caption 7,str$(nb_deplacement) if Nb_deplacement > 15 then verif() END_SUB rem ============================================================================ ' Ici, on vérifie si on a réussi à trouver la solution ' Si oui un message de félicitation (avec appréciation) s'affiche SUB Verif() dim_local t$ if (t(1) = 2) and (t(3) = 2) and (t(7) = 1) and (t(9) = 1) t$ = "*** Félicitations ***" if Nb_deplacement = 16 t$ = t$ + "!!! BRAVO ! Vous êtes le champion des champions !!!" + chr$(13) t$ = t$ + string$(30," ") + "!!! Vous avez gagné le CHEVAL D'OR !!!" else if Nb_deplacement < 23 t$ = "!!! BRAVO ! Vous êtes le champion !!!" + chr$(13) t$ = t$ + " Vous pouvez mieux faire !!!" + chr$(13) t$ = t$ + "!!! Vous avez gagné le CHEVAL D'ARGENT !!!" else t$ = "!!! BRAVO ! Vous êtes un champion !!!" + chr$(13) t$ = t$ + "Mais vous pouvez améliorer votre score !!!" + chr$(13) t$ = t$ + "!!! Vous avez gagné le CHEVAL DE BRONZE !!!" end_if end_if message t$ end_if end_sub rem ============================================================================ SUB AutoRun() dim_local i restore : Init() for i = 1 to 16 read depart : read arrivee depart = depart * 10 : arrivee = arrivee * 10 deplacer() : wait 1000 : ' delai à adapter next i END_SUB rem ============================================================================ data 9,4,7,2,1,6,3,8,6,7,4,3,2,9,8,1,3,8,1,6,8,1,9,4,7,2,6,7,4,3,2,9 rem ============================================================================
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 21 Juin 2014 - 17:38 | |
| | |
| | | Contenu sponsorisé
| Sujet: Re: Le jeu des quatre cavaliers | |
| |
| | | | Le jeu des quatre cavaliers | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |