papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Casse-tête : Echanger les positions des cavaliers Ven 21 Juil 2017 - 4:14 | |
| Salut tout le monde. Voici un jeu ou plutôt un casse-tête. Il s’agit d’échanger les positions de deux cavalières rouges avec celles des deux cavalières noires. Sur un échiquier de 4 x 4 cases dont la moitié des cases sont interdites (les cases rouges), vous devez déplacer les cavalières en respectant les règles du déplacement du cavalier du jeu d’échecs. Il est possible de trouver la solution en 40 déplacements, donc ce n’est pas du gâteau ! Vous pouvez demander de l’Aide à l’ordinateur et le programme se fait un plaisir de jouer pour vous les 22 premiers coups. C’est à vous de continuer : il en reste 18 mouvements que le programme garde jalousement pour lui. A ce stade, il est relativement aisé de trouver la solution. Une option AutoRun permet au programme de jouer tous les 40 coups, mais je l’ai volontairement inactivée pour ne pas gâcher le plaisir de se torturer les neurones. Je pourrais la poster si … Le programme nécessite la dernière version de Panoramic-Editor, à cause de l’utilisation de SHAPE. Si vous utilisez une version antérieure, vous pouvez supprimer ces SHAPEs qui n’ont qu’un rôle visuel. Le programme utilise 3 images JPG : Fond.jpg Cavaliere1.jpg Cavaliere2.jpg Voici les 3 images : Click-droit puis Enregistrer l’image sous … Enregistrez les 3 images dans le même dossier que celui du programme et … amusez-vous bien ! - Fond.jpg:
- cavaliere1.jpg:
- cavaliere2.jpg:
- Code:
- Code:
-
rem ============================================================================ rem Échange des cavaliers rem Papydall - Juillet 2017 rem ============================================================================
Jeu()
end rem ============================================================================ SUB Jeu()
label click dim rep$, fich$, h$, i, t(16), n, clic, depart, arrivee, nb_deplacement height 0,750 : width 0,1150 caption 0,"CASSE-TETE : ÉCHANGE DES CAVALIERS" application_title "CASSE-TETE : ÉCHANGE DES CAVALIERS" rep$ = dir_current$ + chr$(92) shape 100 : shape_rectangle_rounded 100 : top 100,10 : left 100,010 : width 100,740 : height 100,680 shape 110 : shape_rectangle_rounded 110 : top 110,10 : left 110,760 : width 110,100 : height 110,680 shape 120 : shape_rectangle_rounded 120 : top 120,10 : left 120,870 : width 120,250 : height 120,680 button 130 : top 130,050 : left 130,770 : caption 130,"&INFO" button 140 : top 140,100 : left 140,770 : caption 140,"&RAZ" button 150 : top 150,150 : left 150,770 : caption 150,"&Aide" button 160 : top 160,200 : left 160,770 : caption 160,"AU&TORUN" button 170 : top 170,250 : left 170,770 : caption 170,"A-&Propos" button 180 : top 180,300 : left 180,770 : caption 180,"&Quitter" alpha 190 : top 190,025 : left 190,950 : caption 190,"Nb Mouvements : " alpha 200 : top 200,025 : left 200,1050 list 210 : top 210,050 : left 210,900 : width 210,200 : height 210,600 for i = 190 to 210 step 10 : font_bold i : font_name i,"arial" : next i hint 130,"Informations sur le jeu" hint 140,"Remise à zéro" + chr$(13) + "pour un nouveau jeu" h$ = "Le programme joue les 22 premiers coups." + chr$(13) h$ = h$ + "A vous de compléter la suite" + chr$(13) hint 150,h$ hint 160,"Le programme joue tout seul" + chr$(13) + "et trouve la solution en 40 coups" hint 170,"Afficher l'à-propos" hint 180,"Quitter le programme" for i = 130 to 180 step 10 font_bold i : font_name i,"arial" : on_click i,click next i for i = 1 to 16 picture i : width i,150 : height i,150 : stretch_on i : on_click i,click next i top 01,030 : left 01,060 : top 02,030 : left 02,220 top 03,030 : left 03,380 : top 04,030 : left 04,540 top 05,190 : left 05,060 : top 06,190 : left 06,220 top 07,190 : left 07,380 : top 08,190 : left 08,540 top 09,350 : left 09,060 : top 10,350 : left 10,220 top 11,350 : left 11,380 : top 12,350 : left 12,540 top 13,510 : left 13,060 : top 14,510 : left 14,220 top 15,510 : left 15,380 : top 16,510 : left 16,540 picture 300 : left 300,790 : top 300,330 : width 300,50 : height 300,350 print_target_is 300 font_color 300,0,0,255 : font_name 300,"arial" : font_size 300,20 print_locate 10,000 : print "B" print_locate 10,030 : print "O" print_locate 10,060 : print "N" print_locate 10,090 : print "N" print_locate 10,120 : print "E" print_locate 10,170 : print "C" print_locate 10,200 : print "H" print_locate 10,230 : print "A" print_locate 10,260 : print "N" print_locate 10,290 : print "C" print_locate 10,320 : print "E" Initialiser_Jeu()
END_SUB rem ============================================================================ SUB Initialiser_Jeu() dim_local i for i = 1 to 16 : file_load i,"Fond.jpg" : t(i) = 0 : next i ' cases interdites for i = 2 to 4 : 2d_target_is i :2d_flood 50,50,255,0,0 : next i 2d_target_is 6 : 2d_flood 50,50,255,0,0 2d_target_is 12 : 2d_flood 50,50,255,0,0 2d_target_is 13 : 2d_flood 50,50,255,0,0 2d_target_is 15 : 2d_flood 50,50,255,0,0 2d_target_is 16 : 2d_flood 50,50,255,0,0 ' Cavalières Rouges file_load 1,rep$+"cavaliere2.jpg" : file_load 9,rep$+"cavaliere2.jpg" ' Cavalières Noires file_load 8,rep$+"cavaliere1.jpg" : file_load 10,rep$+"cavaliere1.jpg"
t(1) = 2 : t(9) = 2 : t(8) = 1 : t(10) = 1 : clic = 0 : Nb_deplacement = 0 caption 200,str$(nb_deplacement) clear 210 : item_add 210," Mouvements effectués" active 150 : active 160 END_SUB rem ============================================================================ Click: n = number_click : clic = clic + 1 select n case 130 : Info() : return case 140 : Initialiser_Jeu() : return case 150 : Aide() : return case 160 : AutoRun() : return case 170 : About() : return case 180 : Quitter() : return end_select if depart = 0 then depart = n if clic = 2 then arrivee = n : deplacement_Valide() return rem ============================================================================ SUB Info()
dim_local t$ t$ = "Pour résoudre ce casse-tête vous devez échanger les positions des deux cavalières rouges avec celles des deux noires," + chr$(13) t$ = t$ + "en respectant évidemment les règles du déplacement du cavalier sur un échiquier et en n'utilisant pas les huit cases " +chr$(13) t$ = t$ + "rouges qui sont interdites." + chr$(13) + chr$(13) t$ = t$ + "Il est seulement permis de déplacer une cavalière vers une case vide en utilisant " t$ = t$ + "les mouvements du cavalier du jeu d'échec." + chr$(13) t$ = t$ + "Cliquez sur la cavalière à déplacer, puis cliquez sur la case cible. " t$ = t$ + "Le programme veille à ce que le déplacement soit possible." + chr$(13) t$ = t$ + "Sinon, il ne se passe rien!" + chr$(13) t$ = t$ + "Il est possible de parvenir à la solution en 40 coups." + chr$(13) + chr$(13) t$ = t$ + "Vous pouvez demander de l'aide et le programme jouera pour vous les 22 premeirs coups " t$ = t$ + "et c'est à vous de compléter la solution." + chr$(13) t$ = t$ + "Il en manque 18 autres coups." + chr$(13) t$ = t$ + "Le choix AUTORUN c'est pour que le programme joue tous les 40 coups de la solution." + chr$(13) t$ = t$ + "Mais, dans ce cas, le jeu perd de son importance !" + chr$(13) t$ = t$ + "C'est pourquoi, ce choix est inopérant dans cette version." + chr$(13)+chr$(13) t$ = t$ + "En demandant au programme de l'aide, il ne vous reste plus que 18 coups à jouer pour trouver la solution"+chr$(13)+chr$(13) t$ = t$ + string$(80," ") + " !!! B O N N E C H A N C E !!!" message t$ END_SUB rem ============================================================================ SUB About()
dim_local t$ t$ = "Jeu / Problème / Casse-tête : Échange des cavaliers" + chr$(13) t$ = t$ + "Auteur : Papydall" + chr$(13) t$ = t$ + "Version Panoramic_Editor 0.9.28i12 ou supérieure" + chr$(13) t$ = t$ + "Date de création : 20 / 07 / 2017" + chr$(13) t$ = t$ + "Dernière modif : 21 / 07 / 2017" message t$ END_SUB 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 if (depart > 1 and depart < 5) or depart = 6 or depart = 12 or depart = 13 or depart = 15 or depart = 16 message "interdit" : clic = 0 : depart = 0 : arrivee = 0 : exit_sub end_if i = arrivee if (depart = 01) and ((arrivee = 07) or (arrivee = 10)) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 05) and ((arrivee = 11) or (arrivee = 14)) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 07) and ((arrivee = 01) or (arrivee = 09) or (arrivee = 14)) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 08) and ( arrivee = 10) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 09) and ( arrivee = 07) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 10) and ((arrivee = 01) or (arrivee = 08)) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 11) and ( arrivee = 05) and (t(i) = 0) then Deplacer() : exit_sub if (depart = 14) and ((arrivee = 05) or (arrivee = 07)) and (t(i) = 0) then Deplacer() : exit_sub clic = 0 : depart = 0 : arrivee = 0
END_SUB rem ============================================================================ SUB Deplacer() dim_local zero$ file_load depart,rep$ + "Fond.jpg" fich$ = "cavaliere" + str$(t(depart)) + ".jpg" file_load arrivee,rep$ + fich$ : t(arrivee) = t(depart) : t(depart) = 0 Nb_deplacement = Nb_deplacement + 1 if Nb_deplacement < 10 then zero$ = "0" : else : zero$ = "" item_add 210,zero$ + str$(Nb_deplacement) + " Case " + str$(depart) + " ==> case " + str$(arrivee) clic = 0 : depart = 0 : arrivee = 0 caption 200,str$(nb_deplacement) if Nb_deplacement > 39 then verif() END_SUB rem ============================================================================ ' Vérifier la solution SUB Verif()
dim_local t$ if (t(1) = 1) and (t(9) = 1) and (t(8) = 2) and (t(10) = 2) t$ = string$(20," ") + "*** Félicitations ***" + chr$(13) t$ = t$ + "Vous avez trouvé en " + str$(Nb_deplacement) + " coups !" + chr$(13) if Nb_deplacement = 40 t$ = t$ + "Vous êtes le champion des champions !!!" + chr$(13) t$ = t$ + "!!! Vous avez gagné le CHEVAL D'OR !!!" else if Nb_deplacement < 60 t$ = 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$ = 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 Quitter() terminate END_SUB rem ============================================================================ ' Le programme joue les 22 premiers coups. ' A vous de compléter la suite SUB Aide()
dim_local i,t$ if message_confirmation_yes_no("Est-ce que vous voulez que le programme joue pour vous les 22 premiers coups ?")=1 restore : Initialiser_Jeu() inactive 140 : inactive 150 : inactive 160 for i = 1 to 22 read depart : read arrivee : deplacer() : wait 500 : ' delai à adapter next i end_if t$ = "Maintenant, c'est à vous de continuer." + chr$(13) t$ = t$ + "Il en restera 18 coups pour la solution." + chr$(13) + chr$(13) t$ = t$ + " !!! BONNE CHANCE !!!" message t$ active 140 END_SUB rem ============================================================================ ' Le programme joue tout seul et trouve la solution en 40 coups SUB AutoRun() message "Essayez par vous-mêmes d'abord, ou choisissez Aide" END_SUB rem ============================================================================
' Cavalière Rouge data 1,7,7,14,14,5,5,11 : ' 4 mouvements ' Cavalière Noire data 10,1,1,7,7,14,14,5 : ' 4 mouvements data 8,10,10,1,1,7,7,14 : ' 4 mouvements ' Cavalière Rouge data 9,7,7,1,1,10,10,8 : ' 4 mouvements ' Cavalière Noire data 14,7,7,1,1,10 : ' 3 mouvements data 5,14,14,7,7,1 : ' 3 mouvements
rem ============================================================================
- Lancement du programme:
- résultat:
| |
|