Mars 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 | 31 | Calendrier |
|
| | Lights Out Game : éteindre les lumières | |
| | Auteur | Message |
---|
papydall
Nombre de messages : 6985 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Lights Out Game : éteindre les lumières Mar 2 Oct 2018 - 6:09 | |
| Je vous propose un jeu de casse-tête. Le jeu du tout éteint (light out game) On se place dans un rectangle de 5 x 5 cases. Ces cases peuvent être soit éteintes, soit allumées On a la règle d’évolution suivante : Lorsque l’on appuie sur une case, celle-ci change d’état ainsi que ses quatre voisines dans les directions sud, est, nord, ouest, du moins celles qui existent dans les limites du rectangle. Les cellules du coin n’ont que deux voisines, et celles de la bordure sauf les coins en ont trois Au départ toutes les cases, ou une partie d’entre elles sont allumées. Le jeu consiste à trouver sur quelles cases appuyer pour finir en ayant toutes les cases éteintes. Remarque : Lorsque tout est allumé au départ, y a toujours au moins une solution. Pour un rectangle de 5 x 5, il y a exactement 4 solutions. Essayez d'en retrouver au moins une ! B O N N E C H A N C H E !!! Le jeu n’est pas encore complètement codé, mais il est jouable. J’ai prévu de coder 99 configurations différentes et de proposer une solution pour chaque puzzle. J’ai aussi prévu de donner une méthode générale pour trouver au moins une solution si le problème en possède car il existe de configurations qui n’ont pas de solutions. Pour le moment je ne vous fournis pas la méthode pour ne pas gâcher le plaisir de chercher par vous-même, car (j’avoue) ce casse tête n’est pas si simple qu’il parait ! Dans le code ci-dessous, j’ai codé les 5 premières configurations ainsi que celles portant le N° 98 et le N° 99. Le N° 98 affiche une configuration aléatoire à chaque fois. Le N° 99 affiche une configuration où toutes les lumières sont allumées. - Code:
-
rem ============================================================================ rem Eteindre la lumière rem Light Out Game rem Papydall rem ============================================================================ Light_Out() end rem ============================================================================ SUB Light_Out() Initialisation() Cacher_Bordure() Initialiser_List(140) Nouveau_Jeu() END_SUB rem ============================================================================ ' Initialisation globale SUB Initialisation() label clic dim ligne,colonne,n,coup,etat(49) caption 0,"Le jeu du tout éteint (light out game)" application_title "Le jeu du tout éteint (light out game)" color 0,0,128,0 shape 99 : top 99,5 : left 99,15 : width 99,width_client(0)-30 : height 99,height_client(0)-10 shape_rectangle_rounded 99 for ligne = 0 to 6 for colonne = 0 to 6 n = 1+colonne+7*(ligne) : print n picture n : color n,250,250,250 top n,100 +50*(ligne-1) : left n,100+50*(colonne-1) : width n,40 : height n,40 next colonne next ligne
alpha 130 : top 130,25 : left 130,325 : font_bold 130 : font_name 130,"arial font_size 130,12 : font_color 130,255,255,255 : caption 130," Puzzle : " list 140 : top 140,20 : left 140,400 : font_bold 140 : height 140,400 font_name 140,"tahoma" : font_color 140,200,100,50 : on_click 140,clic button 150 : font_bold 150 : top 150,380 : left 150,050 : caption 150,"Solve" : on_click 150,clic : inactive 150 button 160 : font_bold 160 : top 160,380 : left 160,150 : caption 160,"Reset" : on_click 160,clic : inactive 160 button 170 : font_bold 170 : top 170,380 : left 170,250 : caption 170,"Quitter" : on_click 170,clic button 180 : font_bold 180 : top 180,050 : left 180,050 : caption 180,"Infos" : on_click 180,clic button 190 : font_bold 190 : top 190,050 : left 190,150 : caption 190,"Aide" : on_click 190,clic button 200 : font_bold 200 : top 200,050 : left 200,250 : caption 200,"A-Propos" : on_click 200,clic END_SUB rem ============================================================================ SUB Cacher_Bordure() dim_local n for n = 1 to 7 : hide n : hide 42+n : next n for n = 1 to 43 step 7 : hide n : hide n+6 : next n END_SUB rem ============================================================================ Clic: select number_click case 140 : Init_Puzzle(item_index(140)) case 150 : Solve(item_index(140)) case 160 : Nouveau_Jeu() case 170 : if message_confirmation_yes_no("Vous voulez vraiment quitter") = 1 then terminate case 180 : Infos() case 190 : Aide() case 200 : A_Propos() end_select if number_click <= 49 then Changer_Etat(number_click) return rem ============================================================================ SUB Initialiser_List(n) dim_local i for i = 1 to 99 item_add n,"Puzzle " + str$(i) next i END_SUB rem ============================================================================ SUB Init_Puzzle(n) dim_local i,j Nouveau_Jeu() active 150 : active 160 hint 150, "Pour résoudre ce puzzle cliquez sur les cellules avec points rouges dans n'importe quel ordre" hint 160,"Eteindre toutes les lumières" select n ' ---------------------------------------------------------------------- case 01 : 2d_target_is 23 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(23) = 1 2d_target_is 25 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(25) = 1 2d_target_is 27 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(27) = 1 ' ---------------------------------------------------------------------- case 02 : 2d_target_is 09 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(09) = 1 2d_target_is 11 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(11) = 1 2d_target_is 13 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(13) = 1 2d_target_is 16 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(16) = 1 2d_target_is 18 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(18) = 1 2d_target_is 20 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(20) = 1 2d_target_is 30 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(30) = 1 2d_target_is 32 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(32) = 1 2d_target_is 34 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(34) = 1 2d_target_is 37 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(37) = 1 2d_target_is 39 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(39) = 1 2d_target_is 41 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(41) = 1 ' ---------------------------------------------------------------------- case 03 : 2d_target_is 10 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(10) = 1 2d_target_is 12 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(12) = 1 2d_target_is 16 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(16) = 1 2d_target_is 17 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(17) = 1 2d_target_is 19 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(19) = 1 2d_target_is 20 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(20) = 1 2d_target_is 23 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(23) = 1 2d_target_is 24 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(24) = 1 2d_target_is 26 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(26) = 1 2d_target_is 27 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(27) = 1 2d_target_is 30 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(30) = 1 2d_target_is 31 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(31) = 1 2d_target_is 33 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(33) = 1 2d_target_is 34 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(34) = 1 2d_target_is 38 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(38) = 1 2d_target_is 40 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(40) = 1 ' ---------------------------------------------------------------------- case 04 : 2d_target_is 16 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(16) = 1 2d_target_is 17 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(17) = 1 2d_target_is 19 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(19) = 1 2d_target_is 20 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(20) = 1 2d_target_is 30 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(30) = 1 2d_target_is 34 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(34) = 1 2d_target_is 37 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(37) = 1 2d_target_is 38 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(38) = 1 2d_target_is 40 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(40) = 1 2d_target_is 41 : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(41) = 1 ' ---------------------------------------------------------------------- case 05 : for i = 1 to 48 2d_target_is i : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(i) = 1 next i 2d_target_is 13 : 2d_fill_color 0,0,0 : 2d_circle 20,20,20 : etat(13) = 0 2d_target_is 19 : 2d_fill_color 0,0,0 : 2d_circle 20,20,20 : etat(19) = 0 2d_target_is 26 : 2d_fill_color 0,0,0 : 2d_circle 20,20,20 : etat(26) = 0 2d_target_is 30 : 2d_fill_color 0,0,0 : 2d_circle 20,20,20 : etat(30) = 0 2d_target_is 31 : 2d_fill_color 0,0,0 : 2d_circle 20,20,20 : etat(31) = 0 2d_target_is 32 : 2d_fill_color 0,0,0 : 2d_circle 20,20,20 : etat(32) = 0 2d_target_is 39 : 2d_fill_color 0,0,0 : 2d_circle 20,20,20 : etat(39) = 0 ' ---------------------------------------------------------------------- case 06 : ' Pas encore codé .... ' ....... ' ....... case 98 : for i = 1 to 16 j = int(rnd(38)+5) 2d_target_is j : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(j) = 1 next i case 99 : for i = 1 to 42 : ' toutes les lumières sont allumées 2d_target_is i : 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(i) = 1 next i inactive 150 ' ------------------------------------------------------------------------------ end_select
END_SUB rem ============================================================================ ' Afficher un nouveau jeu : toutes les lumières sont éteintes SUB Nouveau_Jeu() dim_local i coup = 0 for n = 1 to 49 2d_target_is n : show n 2d_fill_color 0,0,0 : 2d_circle 20,20,20 : on_click n,Clic etat(n) = 0 : ' Toutes les lumières sont éteintes au départ next n Cacher_Bordure() inactive 150 : inactive 160 END_SUB rem ============================================================================ ' Afficher la solution la plus courte SUB Solve(n) message "Pas encore codé" END_SUB rem ============================================================================ SUB Infos() dim_local t$ t$ = "Le jeu du tout éteint (light out game)" + chr$(13) + chr$(13) t$ = t$ + "On se place dans un rectangle de 5 x 5 cases. Ces cases peuvent être soit éteintes, soit allumées." + chr$(13) t$ = t$ + "On a la règle d’évolution suivante :" + chr$(13) t$ = t$ + "Lorsque l’on appuie sur une case, celle-ci change d’état ainsi que ses quatre voisines dans les directions" + chr$(13) t$ = t$ + "sud,est, nord, ouest, du moins celles qui existent dans les limites du rectangle." + chr$(13) t$ = t$ + " Les cellules du coin n’ont que deux voisines, et celles de la bordure sauf les coins en ont trois." + chr$(13) t$ = t$ + " Au départ toutes les cases, ou une partie d’entre elles sont allumées." + chr$(13) t$ = t$ + " Le jeu consiste à trouver sur quelles cases appuyer pour finir en ayant toutes les cases éteintes." + chr$(13) t$ = t$ + chr$(13) + "Remarque" + chr$(13) t$ = t$ + "Lorsque tout est allumé au départ, y a toujours au moins une solution." + chr$(13) t$ = t$ + "Pour un rectangle de 5 x 5, il y a exactement 4 solutions." + chr$(13) t$ = t$ + "Essayez d'en retrouver au moins une !" + chr$(13) t$ = t$ + chr$(13) + " B O N N E C H A N C H E !!!" message t$
END_SUB rem ============================================================================ SUB Aide() dim_local t$ t$ = "Pas encore codée" message t$ END_SUB rem ============================================================================ SUB A_Propos() dim_local t$ t$ = "Eteindre la lumière : Jeu du tout éteint (light out game)" + chr$(13) t$ = t$ + "Auteur : Papydall" + chr$(13) t$ = t$ + "Date : 29 / 09 / 2018" + chr$(13) t$ = t$ + "Dernière modif : 02 / 10 / 2018" message t$ END_SUB rem ============================================================================ SUB Allumer(n) 2d_target_is n 2d_fill_color 255,255,000 : 2d_circle 20,20,20 : etat(n) = 1 END_SUB rem ============================================================================ SUB Eteindre(n) 2d_target_is n 2d_fill_color 0,0,0 : 2d_circle 20,20,20 : etat(n) = 0 END_SUB rem ============================================================================ SUB Determiner_Ligne_Colonne(n) ligne = 1 + int(n/7.1) colonne = mod(n,7) : if colonne = 0 then colonne = 7 END_SUB rem ============================================================================
SUB Changer_Etat(n) Determiner_Ligne_Colonne(n) if etat(n) = 0 Allumer(n) else Eteindre(n) end_if if etat(n+1) = 0 : Allumer(n+1) : else : Eteindre(n+1) : end_if if etat(n-1) = 0 : Allumer(n-1) : else : Eteindre(n-1) : end_if if etat(n+7) = 0 : Allumer(n+7) : else : Eteindre(n+7) : end_if if etat(n-7) = 0 : Allumer(n-7) : else : Eteindre(n-7) : end_if Verifier() END_SUB rem ============================================================================ ' A-t-on trouvé une solution ? SUB Verifier() dim_local lumiere, i,t$ coup = coup + 1 for i = 1 to 7 : etat(i) = 0 : etat(42+i) = 0 : next i for i = 1 to 43 step 7 : etat(i) = 0 : etat(i+6) = 0 : next i for i = 1 to 49 if etat(i) = 1 then lumiere = 1 : exit_for next i if lumiere <> 1 t$ = "Félicitations ! Tu as trouvé une solution en " + str$(coup) + " coups!" t$ = t$ + chr$(13) + "Tu es un champion !" message t$ end_if END_SUB rem ============================================================================
| |
| | | Jean Claude
Nombre de messages : 5948 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Lights Out Game : éteindre les lumières Mar 2 Oct 2018 - 8:31 | |
| Bravo Papydall, Je viens de jouer, c'est un casse tête Je n'ai pas encore réussi à gagner, mais ça viendra. Celui là, une fois terminé, je le montrerai à mes petit enfants, histoire de leur montrer le geste écologiste. - N'oublies pas d'éteindre la lumière. - Ben je l'ai fait Papy ! mais quand j'éteins dans la salle à manger, ça s'allume dans le garage et la cuisine... | |
| | | silverman
Nombre de messages : 968 Age : 51 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Lights Out Game : éteindre les lumières Mar 2 Oct 2018 - 12:42 | |
| Pfff, en effet, c'est pas évident Tu pourrais utiliser l'état binaire de nombre pour fabriquer une grille, et stocker ces nombres dans des datas, ce serait plus simple que tous ces 'case' Je n'ai pas résisté à l'envie de coder un editeur si tu choisit les états binaires (Si la variable editeur=0 alors ça fabrique une grille aléatoire): - Code:
-
label change_etat dim size,gx,gy,gl,gh,i,j,clic,editeur gl=5 : gh=5 :' grille 5*5 dim etat(gl*gh)
editeur=1
' dessin d'une led size=50 led1 99 : width 99,size : height 99,size image 128 : 2d_image_copy 128,0,0,size,size mark_on 99 image 129 : 2d_image_copy 129,0,0,size,size delete 99
' placement d'une grille de leds éteintes gx=100 : gy=100 for i=0 to gh-1 for j=1 to gl picture j+(gl*i) width j+(gl*i),size:height j+(gl*i),size left j+(gl*i),gx+size*(j-1) : top j+(gl*i),gy+size*i led(j+(gl*i),0) :' éteinte par défaut on_click j+(gl*i),change_etat next j next i
' allumer des leds au hasard (si le mode editeur=0) if editeur=0 i=int(rnd(power(2,25)-1)) else i=0 end_if grille(i) caption 0,"Code grille = "+str$(i)
END ' allumer/éteindre les leds change_etat: clic=number_click off_click clic ' if editeur=0 :' pour mode edition if mod(clic,gl)<>1 then led(clic-1,1-etat(clic-1)) :' change état led gauche if mod(clic,gl)<>0 then led(clic+1,1-etat(clic+1)) :' change état led droite if gh>1 :' si plusieurs lignes if (clic-gh)>0 then led(clic-gh,1-etat(clic-gh)) :' change état led haut if (clic+gh)<(gl*gh)+1 then led(clic+gh,1-etat(clic+gh)) :' change état led bas end_if end_if ' led(clic,1-etat(clic)) :' change état led centre affiche_code_grille() on_click clic,change_etat return
' changer et mémoriser l'état d'une led sub led(nb,stat) if nb=0 then exit_sub 2d_target_is nb if stat=0 2d_image_paste 128,0,0 else 2d_image_paste 129,0,0 end_if etat(nb)=stat end_sub
' fabriquer une grille de leds allumées à partir des bits d'un nombre sub grille(nb%) dim_local i for i=0 to (gl*gh)-1 if bin_and(nb%,power(2,i))<>0 led(i+1,1) :' on else led(i+1,0) :' off end_if next i end_sub
' afficher le code binaire d'une grille sub affiche_code_grille() dim_local i,j j=0 for i=0 to (gl*gh)-1 if etat(i+1)=1 then j=j+power(2,i) next i caption 0,"Code grille = "+str$(j) clipboard_string_copy str$(j) :' écrire le code dans le presse-papiers end_sub
| |
| | | papydall
Nombre de messages : 6985 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Lights Out Game : éteindre les lumières Mar 2 Oct 2018 - 13:40 | |
| Indice pour trouver une solution : Partons d’une configuration initiale, avec certaines cases allumées. Commençons par mettre la ligne 1 en noir en utilisant la ligne 2 suivante. Il suffit pour cela d’appuyer sur la case en dessous de chaque case lumineuse. Quand la ligne 1 est en noir, on fait de même pour la ligne 2 en s’aidant de la ligne 3. Et l’on continue ainsi jusqu’à ce que l’avant-dernière ligne soit noire, en s’aidant de la dernière ligne. Mais cette dernière n’est pas noire, sauf exception. Bon, pour ne pas vous faire souffrir, je vous fourni les solutions pour les configurations 1, 2 et 3. Il faut cliquer sur les cases avec un point rouge. - 1:
- 2:
- 3:
@silverman Merci pour ta solution pour la fabrication de la grille. En effet ça simplifie énormément le codage. Pour le moment j’ai des tâches imprévues et urgentes à faire et ça va me prendre quelques jours. Je mets le programme en stand by jusqu’à nouvel ordre. Si tu veux bien intégrer ta solution dans le codage, tu as toute la liberté pour le faire. | |
| | | Jean Claude
Nombre de messages : 5948 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Lights Out Game : éteindre les lumières Mar 2 Oct 2018 - 13:44 | |
| J'ai hâte d'avoir une version finale... Voici ce que j'ai réussi avec le code aléatoire de Sylverman. A+ | |
| | | papydall
Nombre de messages : 6985 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Lights Out Game : éteindre les lumières Mer 3 Oct 2018 - 5:46 | |
| J’ai revu la structure de mon programme en adoptant l’idée de l’homme d’argent (merci silverman) pour l’emploi du binaire pour définir une grille. J’ai codé les 10 premières configurations avec leur solution la plus courte. Vous pouvez tester vos capacités de réflexion sans demander la solution (solve), sinon vous saurez comment procéder. Les deux dernières configurations 98 et 99 vous sont données sans solutions. Ça vous permet de vous … casser la tête (après tout, c’est un casse-tête ce jeu, n’est-ce pas ?) La configuration 98 présente une grille avec quelques lumières aléatoires allumées, tant disque la 99 avec toutes les lumières allumées. Pour comprendre comment faire pour trouver une solution, lisez l’aide, ça donne une indication à suivre. Remarque : Certaines configurations n’ont pas de solutions. Dans Aide vous saurez lesquelles. Mais rassurez-vous, les configurations proposées ont toutes au moins une solution, sauf (peut-être) la 98 qui présente une grille aléatoire. Bon, assez de blablabla et voici le programme. - Code:
-
rem ============================================================================ rem Eteindre la lumière rem Light Out Game rem Papydall rem ============================================================================ Initialisation() Initialiser_List() end rem ============================================================================ SUB Initialisation() label choix dim size,gx,gy,gl,gh,i,j,coup size = 50 : gx = 40 : gy = 100-20 gl = 5 : gh = 5 : ' grille 5*5 dim etat(gl*gh) dim Nb_Puzzles : Nb_Puzzles = 99 dim Puzzle(Nb_Puzzles),Solution(Nb_Puzzles) led1 99 : width 99,size : height 99,size image 128 : 2d_image_copy 128,0,0,size,size : mark_on 99 image 129 : 2d_image_copy 129,0,0,size,size delete 99 size = size+10 caption 0,"Le jeu du tout éteint (light out game)" application_title "Le jeu du tout éteint (light out game)" color 0,0,128,0 shape 99 : top 99,5 : left 99,15 : width 99,width_client(0)-30 : height 99,height_client(0)-10 shape_rectangle_rounded 99 alpha 130 : top 130,25 : left 130,325 : font_bold 130 : font_name 130,"arial font_size 130,12 : font_color 130,255,255,255 : caption 130," Puzzle : " list 140 : top 140,20 : left 140,400 : font_bold 140 : height 140,400 font_name 140,"tahoma" : font_color 140,200,100,50 : on_click 140,choix button 150 : font_bold 150 : top 150,380 : left 150,050 : caption 150,"Solve" : on_click 150,choix : inactive 150 button 160 : font_bold 160 : top 160,380 : left 160,150 : caption 160,"Reset" : on_click 160,choix : inactive 160 button 170 : font_bold 170 : top 170,380 : left 170,250 : caption 170,"Quitter" : on_click 170,choix button 180 : font_bold 180 : top 180,050 : left 180,050 : caption 180,"Infos" : on_click 180,choix button 190 : font_bold 190 : top 190,050 : left 190,150 : caption 190,"Aide" : on_click 190,choix button 200 : font_bold 200 : top 200,050 : left 200,250 : caption 200,"A-Propos" : on_click 200,choix for i = 0 to gh-1 for j = 1 to gl picture j+(gl*i) : width j+(gl*i),size : height j+(gl*i),size left j+(gl*i),gx+size*(j-1) : top j+(gl*i),gy+size*i : on_click j+(gl*i), choix Led(j+(gl*i),0) : ' éteinte par défaut next j next i END_SUB rem ============================================================================ Choix: select number_click case 140 : Init_Puzzle(item_index(140)) case 150 : Solve(solution(item_index(140))) case 160 : Reset() case 170 : if message_confirmation_yes_no("Vous voulez vraiment quitter") = 1 then terminate case 180 : Infos() case 190 : Aide() case 200 : A_Propos() end_select if number_click <= gl*gh then change_etat(number_click) return rem ============================================================================ SUB Initialiser_List() dim_local i for i = 1 to Nb_Puzzles item_add 140,"Puzzle " + str$(i) next i i = 1 : read Puzzle(i) while puzzle(i) <> 0 read solution(i) : i = i + 1 : read puzzle(i) end_while END_SUB rem ============================================================================ SUB Init_Puzzle(n) active 150 : active 160 hint 150,"Pour résoudre ce puzzle cliquez sur les cellules avec points rouges dans n'importe quel ordre" hint 160,"Eteindre toutes les lumières" if n < 98 Grille(puzzle(n)) end_if select n case 98 : i = int(rnd(power(2,25)-1)) : Grille(i) : ' quelques lumières aléatoires allumées case 99 : for i = 1 to gl*gh : Grille(33554431) : next i : ' toutes les lumières allumées end_select END_SUB rem ============================================================================ ' Placement d'une grille de leds éteintes SUB Nouveau_jeu() dim_local i,j for i = 0 to gh-1 for j = 1 to gl picture j+(gl*i) width j+(gl*i),size : height j+(gl*i),size left j+(gl*i),gx+size*(j-1) : top j+(gl*i),gy+size*i Led(j+(gl*i),0) next j next i END_SUB rem ============================================================================ ' changer et mémoriser l'état d'une led SUB Led(nb,stat) if nb=0 then exit_sub 2d_target_is nb if stat = 0 2d_image_paste 128,0,0 else 2d_image_paste 129,0,0 end_if etat(nb)=stat END_SUB rem ============================================================================ ' Afficher une nouvelle grille toutes les lumières éteintes SUB Reset() for i = 0 to (gl*gh)-1 : color i+1,255,255,255 : led(i+1,0) : next i END_SUB rem ============================================================================ ' allumer/éteindre les leds SUB Change_etat(clic) off_click clic if mod(clic,gl)<>1 then led(clic-1,1-etat(clic-1)) :' change état led gauche if mod(clic,gl)<>0 then led(clic+1,1-etat(clic+1)) :' change état led droite if gh>1 :' si plusieurs lignes if (clic-gh)>0 then led(clic-gh,1-etat(clic-gh)) :' change état led haut if (clic+gh)<(gl*gh)+1 then led(clic+gh,1-etat(clic+gh)) :' change état led bas end_if led(clic,1-etat(clic)) :' change état led centre Verifier() on_click clic,choix END_SUB rem ============================================================================ ' Construire une grille de leds allumées à partir des bits d'un nombre SUB grille(nb%) dim_local i for i = 0 to (gl*gh)-1 if bin_and(nb%,power(2,i)) <> 0 led(i+1,1) : ' allumée else led(i+1,0) : ' éteinte end_if next i END_SUB rem ============================================================================ ' Afficher la solution la plus courte SUB Solve(n) dim_local i if n = 0 then exit_sub for i = 0 to (gl*gh)-1 if bin_and(n,power(2,i)) <> 0 2d_target_is i+1 : 2d_fill_color 255,0,0 : 2d_circle 25,25,4 end_if next i END_SUB rem ============================================================================ ' A-t-on trouvé une solution ? SUB Verifier() dim_local lumiere, i,t$ coup = coup + 1 for i = 1 to gl*gh if etat(i) = 1 then lumiere = 1 : exit_for next i if lumiere <> 1 Reset() t$ = "Félicitations ! Tu as trouvé une solution en " + str$(coup) + " coups!" t$ = t$ + chr$(13) + "Tu es un champion !" message t$ coup = 0 end_if END_SUB rem ============================================================================ SUB Infos() dim_local t$ t$ = "Le jeu du tout éteint (light out game)" + chr$(13) + chr$(13) t$ = t$ + "On se place dans un rectangle de 5 x 5 cases. Ces cases peuvent être soit éteintes, soit allumées." + chr$(13) t$ = t$ + "On a la règle d’évolution suivante :" + chr$(13) t$ = t$ + "Lorsque l’on appuie sur une case, celle-ci change d’état ainsi que ses quatre voisines dans les directions" + chr$(13) t$ = t$ + "sud,est, nord, ouest, du moins celles qui existent dans les limites du rectangle." + chr$(13) t$ = t$ + " Les cellules du coin n’ont que deux voisines, et celles de la bordure sauf les coins en ont trois." + chr$(13) t$ = t$ + " Au départ toutes les cases, ou une partie d’entre elles sont allumées." + chr$(13) t$ = t$ + " Le jeu consiste à trouver sur quelles cases appuyer pour finir en ayant toutes les cases éteintes." + chr$(13) t$ = t$ + chr$(13) + "Remarque" + chr$(13) t$ = t$ + "Lorsque tout est allumé au départ, y a toujours au moins une solution." + chr$(13) t$ = t$ + "Pour un rectangle de 5 x 5, il y a exactement 4 solutions." + chr$(13) t$ = t$ + "Essayez d'en retrouver au moins une !" + chr$(13) +chr$(13) t$ = t$ + "Quand on demande Solve, le programme affiche les cases à cliquer avec un petit rond rouge au centre." + chr$(13) t$ = t$ + "Vous mémorisez ces cases à cliquer car certaines perdront leur rond rouge lors d'un clic sur une case adjacente."+chr$(13) t$ = t$ + chr$(13) + " B O N N E C H A N C H E !!!" message t$ END_SUB rem ============================================================================ SUB Aide() dim_local t$ t$ = "Partons d’une configuration initiale, avec certaines cases allumées." + chr$(13) t$ = t$ + " Commençons par mettre la ligne 1 en noir en utilisant la ligne 2 suivante." + chr$(13) t$ = t$ + "Il suffit pour cela d’appuyer sur la case en dessous de chaque case lumineuse." + chr$(13) t$ = t$ + "Quand la ligne 1 est en noir, on fait de même pour la ligne 2 en s’aidant de la ligne 3." + chr$(13) t$ = t$ + "Et l’on continue ainsi jusqu’à ce que l’avant-dernière ligne soit noire, en s’aidant de la dernière ligne." + chr$(13) t$ = t$ + "Mais cette dernière n’est pas noire, sauf exception." + chr$(13) t$ = t$ + "Si la dernière ligne est un de ces 7 cas (colonne de gauche ci-dessous),( 1 = allumée ; 0 = éteinte)"+ chr$(13) t$ = t$ + "alors on reprend la première ligne et on allume les cases indiquées sur le dessin correspondant à chacun des 7 cas" + chr$(13) t$ = t$ + "dans la colonne de droite ci-dessous." + chr$(13) t$ = t$ + "Puis on recommence le processus d’extinction ligne par ligne. A la fin, tout est éteint." + chr$(13) + chr$(13) t$ = t$ + " 1 0 0 0 1 1 1 0 0 0" + chr$(13) t$ = t$ + " 0 1 0 1 0 1 0 0 1 0" + chr$(13) t$ = t$ + " 1 1 1 0 0 0 1 0 0 0" + chr$(13) t$ = t$ + " 0 0 1 1 1 0 0 0 1 0" + chr$(13) t$ = t$ + " 1 0 1 1 0 0 0 0 0 1" + chr$(13) t$ = t$ + " 0 1 1 0 1 1 0 0 0 0" + chr$(13) t$ = t$ + " 1 1 0 1 1 0 0 1 0 0" + chr$(13) + chr$(13) t$ = t$ + " dernière ligne première ligne" + chr$(13) + chr$(13) t$ = t$ + "Si la dernière ligne n’est pas un des 7 cas, le problème n’a pas de solution,la configuration initiale n’est pas gagnante." message t$ END_SUB rem ============================================================================ SUB A_Propos() dim_local t$ t$ = "Eteindre la lumière : Jeu du tout éteint (light out game)" + chr$(13) t$ = t$ + "Auteur : Papydall" + chr$(13) t$ = t$ + "Date : 29 / 09 / 2018" + chr$(13) t$ = t$ + "Dernière modif : 03 / 10 / 2018" message t$ END_SUB rem ============================================================================ data 21504,22708224 data 22708917,688800 data 11399018,4342916 data 28869472,10513408 data 29122287,17835266 data 15389696,4212164 data 16303663,4249636 data 11184256,32641024 data 8207338,5574976 data 14798,475 ' .... to be continued ........... data 0 rem ============================================================================
Pour résoudre le puzzle N°5 en demandant Solve vous devez cliquer sur les cases marquées par un rond rouge. - Spoiler:
Amusez-vous bien et n'oubliez pas de proposer des améliorations à ce jeu. | |
| | | Jean Claude
Nombre de messages : 5948 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Lights Out Game : éteindre les lumières Mer 3 Oct 2018 - 7:36 | |
| Super, ce jeu. J'ai trouvé une méthode: grâce à la solution de la partie 1, j'ai réussi à faire la partie 2 sans erreur. Maintenant, je ne suis pas certain que ma méthode va marcher pour les autres parties.... En attendant, j'ai de quoi me détendre entre mes recherches sur EPP et les pauses. A+ | |
| | | papydall
Nombre de messages : 6985 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Lights Out Game : éteindre les lumières Mer 3 Oct 2018 - 11:41 | |
| Bonjour tout le monde. Bonjour Jean Claude. Se détendre en se torturant les neurones est souvent bénéfique pour la santé mentale. Pour ta méthode tu peux la garder dans le noir pour un certain temps (juste le temps pour que d’autres essayerons d’en trouver), mais il faut qu’un jour ou l’autre tu la mets en lumière ! Ce n’est pas parce que le jeu s’appelle éteindre la lumière que tu la garderas au noir ! Bon amusement ! Et à + | |
| | | Jean Claude
Nombre de messages : 5948 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Lights Out Game : éteindre les lumières Mer 3 Oct 2018 - 13:21 | |
| En fait, ma méthode est très simple, tant pis je la divulgue. J'éteint l'écran. Sérieusement, j'ai une méthode qui fonctionne bien pour commencer un puzzle, mais à la fin elle n'est plus valable. A+ | |
| | | Marc
Nombre de messages : 2372 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Lights Out Game : éteindre les lumières Sam 6 Oct 2018 - 10:48 | |
| Bonjour Papydall !
Bonjour à tous !
Super sympathique ton jeu ! Et tellement bien fait !
On pourrait croire que c'est facile... euh... et bien non ! On s'y accroche... on persiste... on peste... on devient addict ! Sacrées LEDs ! Il y en a toujours une qui s'allume quand il ne faut pas !
BRAVO ! Quant au code, une fois de plus, un vrai régal !
MERCI Papydall ! | |
| | | papydall
Nombre de messages : 6985 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Lights Out Game : éteindre les lumières Sam 6 Oct 2018 - 15:42 | |
| Merci Marc pour avoir apprécier mon code. En effet, ce jeu dont la règle d’évolution est apparemment simple, n’est pas aussi simple qu’on peut croire. C’est un vrai casse-tête. Ça peut même énerver quelques uns, et je ne suis pas responsable si Jean Claude (ou autre) jettera son ordi par la fenêtre ou donnera un bon coup de poing à l’écran ! Vous jouez à vos risques et périls. Pour les plus calmes et qui veulent savoir comment procéder. Méthode générale de résolution du jeu Lights Out Game.Pour une configuration initiale avec cases allumées (quelques unes ou toutes allumées) on procède comme ceci : On commence par éteindre toutes les lumières de la ligne 1. Pour cela, il suffit d’appuyer sur la case en dessous de chaque case lumineuse. Quand la ligne est toute en noir, on fait de même pour la ligne 2 en s’aidant de la ligne 3. On continue ainsi avec la ligne 3 puis la ligne 4. Arrivé à cette étape on a toutes les lumières éteintes des lignes 1 à 4. La dernière ligne (sauf exception) contient encore une case ou plus allumées. Selon la configuration de cette ligne 5, on peut savoir s’il y a une solution pour le problème ou non. Adoptons la codification suivante pour indiquer une lumière allumée (1) ou éteinte (0). Si la dernière ligne est un des 7 cas suivants (colonne de gauche ci-dessous), alors le problème possède au moins une solution et on cherche une solution comme indiqué plus bas. Si la dernière ligne n’est pas dans ces 7 cas, alors il n’y a aucune solution pour le problème et on arrête. Les 7 cas où il y a une solution.Selon la configuration de la dernière ligne, on reprend la 1ere ligne et on allume la ou les deux cases indiquées par 1. Puis on recommence le processus d’extinction ligne par ligne. A la fin toutes les lumières sont éteintes. Dernière ligne ===== ==== ====> Première ligne 1 0 0 0 1 ===== ==== ===> 1 1 0 0 0 0 1 0 1 0 ===== ==== ===> 1 0 0 1 0 1 1 1 0 0 ===== ==== ===> 0 1 0 0 0 0 0 1 1 1 ===== ==== ===> 0 0 0 1 0 1 0 1 1 0 ===== ==== ===> 0 0 0 0 1 0 1 1 0 1 ===== ==== ===> 1 0 0 0 0 1 1 0 1 1 ===== ==== ===> 0 0 1 0 0 Remarque :Cette méthode trouvera une solution, mais elle n’est ni la plus courte ni la plus optimale. Bon casse-tête | |
| | | Marc
Nombre de messages : 2372 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Lights Out Game : éteindre les lumières Sam 6 Oct 2018 - 16:09 | |
| @Papydall Bon, mon PC résiste à mes assauts... pour l'instant... J'ai besoin de joindre le S.A.V. pour une réclamation Après avoir tenté de résoudre quelques niveaux, y compris les 98 et 99, je suis revenu sur le puzzle 1 après avoir cliqué sur Reset. Là, j'ai cliqué 6 coups pour arriver à tout éteindre et j'ai eu le message comme quoi j'avais gagné en 37 coups ! Un compteur n'a pas dû être remis à zéro quelque part... EDIT : Un petit coup d'oeil sur le source m'a permis de voir que la variable "coup" n'est remise à zéro que si on gagne un niveau. Le changement de puzzle ou le "reset" ne remettent pas le compteur à zéro. Peut-être est-ce volontaire et donc normal | |
| | | Jean Claude
Nombre de messages : 5948 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Lights Out Game : éteindre les lumières Sam 6 Oct 2018 - 17:29 | |
| Bon et hé bien, j'avais bien trouvé la première partie de la procédure à suivre, il ne me manquait que la fin. C'est un bon jeu, j'aime. A+ | |
| | | silverman
Nombre de messages : 968 Age : 51 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Lights Out Game : éteindre les lumières Sam 6 Oct 2018 - 20:49 | |
| Papydall, en faisant des recherches sur les statistiques, je me rends compte que tu peux proposer des grilles à difficulté croissante, généré aléatoirement. On sait que la grille fait 5*5 cases, et qu'une grille peut être généré par un 0> nombre aléatoire<(2^26), appelons-le A. Du coup, chaque bit de A allume/éteind en mémoire une séquence de led (nord,sud,est,ouest), et A devient la solution de la grille, pas besoin du solveur Supposons que A soit généré avec 2 bits à 1, en combinatoire, Combinaisons (2 parmi 25)=300 combinaisons possible --->pas trop difficile. Maintenant, supposons que A soit généré avec 12 bits à 1, Combinaisons (12 parmi 25)=5200300 combinaisons possible ---> +difficile ! 12 et 13 bits donne le maximum de combinaisons, partant de cela, tu peux proposer une difficulté croissante! Je ne suis pas du tout familier des arrangements/combinaisons/permutations, mais je crois bien que c'est les combinaisons qu'il faut utiliser. Qu’en pense tu, ai-je le bon raisonnement ? | |
| | | papydall
Nombre de messages : 6985 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Lights Out Game : éteindre les lumières Dim 7 Oct 2018 - 2:26 | |
| Merci à tous ceux qui ont testé ce jeu et principalement à ceux qui ont donné leurs appréciations. Un grand bravo pour Silverman pour sa contribution et son code de l’éditeur des grilles. J’ai terminé de coder tous les niveaux et j'ai modifié un peu la structure du code. De 1 à 97 tous les jeux ont des solutions (à vous d’en trouver) sinon le click sur solve affiche les cases à cliquer pour une solution optimale (le minimum de coups). 98 : affiche une grille aléatoire dont la configuration peut avoir une ou des solutions comme elle peut n’en avoir aucune ! 99 : toutes les lumières sont allumées : cette configuration possède exactement 4 solutions et c’est à vous d’en trouver au moins une. NB : J’ai corrigé le bug du nombre des coups signalé par Marc. - Code:
-
rem ============================================================================ rem Eteindre la lumière rem Light Out Game rem Papydall rem ============================================================================ Light_Out() END rem ============================================================================ SUB Light_Out() Initialisation() Initialiser_List() END_SUB rem ============================================================================ SUB Initialisation() label choix dim size,gx,gy,gl,gh,i,j,coup size = 50 : gx = 40 : gy = 100-20 gl = 5 : gh = 5 : ' grille 5*5 dim etat(gl*gh) dim Nb_Puzzles : Nb_Puzzles = 99 dim Puzzle(Nb_Puzzles),Solution(Nb_Puzzles) led1 99 : width 99,size : height 99,size image 128 : 2d_image_copy 128,0,0,size,size : mark_on 99 image 129 : 2d_image_copy 129,0,0,size,size delete 99 size = size+10 caption 0,"Le jeu du tout éteint (light out game)" application_title "Le jeu du tout éteint (light out game)" color 0,0,128,0 shape 99 : top 99,5 : left 99,15 : width 99,width_client(0)-30 : height 99,height_client(0)-10 shape_rectangle_rounded 99 alpha 130 : top 130,25 : left 130,325 : font_bold 130 : font_name 130,"arial font_size 130,12 : font_color 130,255,255,255 : caption 130," Puzzle : " list 140 : top 140,20 : left 140,400 : font_bold 140 : height 140,400 font_name 140,"tahoma" : font_color 140,200,100,50 : on_click 140,choix button 150 : font_bold 150 : top 150,380 : left 150,050 : caption 150,"Solve" : on_click 150,choix : inactive 150 button 160 : font_bold 160 : top 160,380 : left 160,150 : caption 160,"Reset" : on_click 160,choix : inactive 160 button 170 : font_bold 170 : top 170,380 : left 170,250 : caption 170,"Quitter" : on_click 170,choix button 180 : font_bold 180 : top 180,050 : left 180,050 : caption 180,"Infos" : on_click 180,choix button 190 : font_bold 190 : top 190,050 : left 190,150 : caption 190,"Aide" : on_click 190,choix button 200 : font_bold 200 : top 200,050 : left 200,250 : caption 200,"A-Propos" : on_click 200,choix for i = 0 to gh-1 for j = 1 to gl picture j+(gl*i) : width j+(gl*i),size : height j+(gl*i),size left j+(gl*i),gx+size*(j-1) : top j+(gl*i),gy+size*i Led(j+(gl*i),0) : ' éteinte par défaut next j next i END_SUB rem ============================================================================ Choix: select number_click case 140 : Init_Puzzle(item_index(140)) : ' Choix du Puzzle case 150 : Solve(solution(item_index(140))) : ' Solution du Puzzle case 160 : Reset() : ' Nouvelle grille toute lumière éteinte case 170 : if message_confirmation_yes_no("Vous voulez vraiment quitter") = 1 then terminate case 180 : Infos() case 190 : Aide() case 200 : A_Propos() end_select if number_click <= gl*gh change_etat(number_click) inactive 150 end_if return rem ============================================================================ ' Initialisation des 99 configurations et de leurs solutions SUB Initialiser_List() dim_local i for i = 1 to Nb_Puzzles item_add 140,"Puzzle " + str$(i) next i for i = 1 to Nb_Puzzles - 2 read Puzzle(i) : read solution(i) next i END_SUB rem ============================================================================ SUB Init_Puzzle(n) active 150 : active 160 hint 150,"Pour résoudre ce puzzle cliquez sur les cellules avec points rouges dans n'importe quel ordre" hint 160,"Eteindre toutes les lumières" if clicked(140) = 0 for i = 1 to gl*gh : off_click i : next i else for i = 1 to gl*gh : on_click i,choix : next i end_if if n < 98 Grille(puzzle(n)) end_if if n = 98 i = int(rnd(power(2,25)-1)) : Grille(i) : ' quelques lumières aléatoires allumées inactive 150 end_if if n = 99 for i = 1 to gl*gh : Grille(33554431) : next i : ' toutes les lumières allumées inactive 150 end_if coup = 0 END_SUB rem ============================================================================ ' Placement d'une grille de leds éteintes SUB Nouveau_jeu() dim_local i,j for i = 0 to gh-1 for j = 1 to gl picture j+(gl*i) width j+(gl*i),size : height j+(gl*i),size left j+(gl*i),gx+size*(j-1) : top j+(gl*i),gy+size*i Led(j+(gl*i),0) next j next i END_SUB rem ============================================================================ ' changer et mémoriser l'état d'une led SUB Led(nb,stat) if nb = 0 then exit_sub 2d_target_is nb if stat = 0 2d_image_paste 128,0,0 else 2d_image_paste 129,0,0 end_if etat(nb) = stat END_SUB rem ============================================================================ ' Afficher une nouvelle grille toutes les lumières éteintes SUB Reset() for i = 0 to (gl*gh)-1 color i+1,255,255,255 : led(i+1,0) off_click i+1 next i inactive 150 : inactive 160 END_SUB rem ============================================================================ ' allumer/éteindre les leds SUB Change_etat(clic) off_click clic if mod(clic,gl)<>1 then led(clic-1,1-etat(clic-1)) :' change état led gauche if mod(clic,gl)<>0 then led(clic+1,1-etat(clic+1)) :' change état led droite if gh>1 :' si plusieurs lignes if (clic-gh)>0 then led(clic-gh,1-etat(clic-gh)) :' change état led haut if (clic+gh)<(gl*gh)+1 then led(clic+gh,1-etat(clic+gh)) :' change état led bas end_if led(clic,1-etat(clic)) :' change état led centre Verifier() on_click clic,choix END_SUB rem ============================================================================ ' Construire une grille de leds allumées à partir des bits d'un nombre SUB grille(nb%) dim_local i for i = 0 to (gl*gh)-1 if bin_and(nb%,power(2,i)) <> 0 led(i+1,1) : ' allumée else led(i+1,0) : ' éteinte end_if next i END_SUB rem ============================================================================ ' Afficher la solution la plus courte SUB Solve(n) dim_local i if n = 0 then exit_sub for i = 0 to (gl*gh)-1 if bin_and(n,power(2,i)) <> 0 2d_target_is i+1 : 2d_fill_color 255,0,0 : 2d_circle 25,25,4 end_if next i END_SUB rem ============================================================================ ' A-t-on trouvé une solution ? SUB Verifier() dim_local lumiere, i,t$ coup = coup + 1 for i = 1 to gl*gh if etat(i) = 1 then lumiere = 1 : exit_for next i if lumiere <> 1 Reset() t$ = "Félicitations ! Tu as trouvé une solution en " + str$(coup) + " coups!" t$ = t$ + chr$(13) + "Tu es un champion !" message t$ coup = 0 inactive 160 end_if END_SUB rem ============================================================================ SUB Infos() dim_local t$ t$ = "Le jeu du tout éteint (light out game)" + chr$(13) + chr$(13) t$ = t$ + "On se place dans un rectangle de 5 x 5 cases. Ces cases peuvent être soit éteintes, soit allumées." + chr$(13) t$ = t$ + "On a la règle d’évolution suivante :" + chr$(13) t$ = t$ + "Lorsque l’on appuie sur une case, celle-ci change d’état ainsi que ses quatre voisines dans les directions" + chr$(13) t$ = t$ + "sud,est, nord, ouest, du moins celles qui existent dans les limites du rectangle." + chr$(13) t$ = t$ + " Les cellules du coin n’ont que deux voisines, et celles de la bordure sauf les coins en ont trois." + chr$(13) t$ = t$ + " Au départ toutes les cases, ou une partie d’entre elles sont allumées." + chr$(13) t$ = t$ + " Le jeu consiste à trouver sur quelles cases appuyer pour finir en ayant toutes les cases éteintes." + chr$(13) t$ = t$ + chr$(13) + "Remarque" + chr$(13) t$ = t$ + "Lorsque tout est allumé au départ, y a toujours au moins une solution." + chr$(13) t$ = t$ + "Pour un rectangle de 5 x 5, il y a exactement 4 solutions." + chr$(13) t$ = t$ + "Essayez d'en retrouver au moins une !" + chr$(13) +chr$(13) t$ = t$ + "Quand on demande Solve, le programme affiche les cases à cliquer avec un petit rond rouge au centre." + chr$(13) t$ = t$ + "Vous mémorisez ces cases à cliquer car certaines perdront leur rond rouge lors d'un clic sur une case adjacente."+chr$(13) t$ = t$ + chr$(13) + " B O N N E C H A N C H E !!!" message t$ END_SUB rem ============================================================================ SUB Aide() dim_local t$ t$ = "Partons d’une configuration initiale, avec certaines cases allumées." + chr$(13) t$ = t$ + " Commençons par mettre la ligne 1 en noir en utilisant la ligne 2 suivante." + chr$(13) t$ = t$ + "Il suffit pour cela d’appuyer sur la case en dessous de chaque case lumineuse." + chr$(13) t$ = t$ + "Quand la ligne 1 est en noir, on fait de même pour la ligne 2 en s’aidant de la ligne 3." + chr$(13) t$ = t$ + "Et l’on continue ainsi jusqu’à ce que l’avant-dernière ligne soit noire, en s’aidant de la dernière ligne." + chr$(13) t$ = t$ + "Mais cette dernière n’est pas noire, sauf exception." + chr$(13) t$ = t$ + "Si la dernière ligne est un de ces 7 cas (colonne de gauche ci-dessous),( 1 = allumée ; 0 = éteinte)"+ chr$(13) t$ = t$ + "alors on reprend la première ligne et on allume les cases indiquées sur le dessin correspondant à chacun des 7 cas" + chr$(13) t$ = t$ + "dans la colonne de droite ci-dessous." + chr$(13) t$ = t$ + "Puis on recommence le processus d’extinction ligne par ligne. A la fin, tout est éteint." + chr$(13) + chr$(13) t$ = t$ + " 1 0 0 0 1 1 1 0 0 0" + chr$(13) t$ = t$ + " 0 1 0 1 0 1 0 0 1 0" + chr$(13) t$ = t$ + " 1 1 1 0 0 0 1 0 0 0" + chr$(13) t$ = t$ + " 0 0 1 1 1 0 0 0 1 0" + chr$(13) t$ = t$ + " 1 0 1 1 0 0 0 0 0 1" + chr$(13) t$ = t$ + " 0 1 1 0 1 1 0 0 0 0" + chr$(13) t$ = t$ + " 1 1 0 1 1 0 0 1 0 0" + chr$(13) + chr$(13) t$ = t$ + " dernière ligne première ligne" + chr$(13) + chr$(13) t$ = t$ + "Si la dernière ligne n’est pas un des 7 cas, le problème n’a pas de solution,la configuration initiale n’est pas gagnante." message t$ END_SUB rem ============================================================================ SUB A_Propos() dim_local t$ t$ = "Eteindre la lumière : Jeu du tout éteint (light out game)" + chr$(13) t$ = t$ + "Auteur : Papydall" + chr$(13) t$ = t$ + "Date : 29 / 09 / 2018" + chr$(13) t$ = t$ + "Dernière modif : 06 / 10 / 2018" message t$ END_SUB rem ============================================================================ ' De 1 à 10 data 21504,22708224 data 22708917,688800 data 11399018,4342916 data 28869472,10513408 data 29122287,17835266 data 15389696,4212164 data 16303663,4249636 data 11184256,32641024 data 8207338,5574976 data 14798,475 ' De 11 à 20 data 15390389,4212177 data 10972511,349329 data 2271880,13124646 data 2164736,4608784 data 65600,9307016 data 32539681,1976514 data 32968704,4769220 data 4543812,4543812 data 22041621,710304 data 17408,3290243 ' De 21 à 30 data 2177118,3351196 data 15255086,19456135 data 4616192,5560472 data 19907584,17125797 data 31956065,16996877 data 18415153,23076515 data 4329924, 25194951 data 30306304,14988419 data 64,13192644 data 4096,23639171 ' De 31 à 40 data 18667121,26953478 data 32575775,16042565 data 26793224,27202756 data 32196148,4021060 data 705880,13179223 data 18859332,19358578 data 473536,4685252 data 22369621,5094244 data 10882090,352118 data 10240,7696711 ' De 41 à 50 data 4329809,10335698 data 7642407,17816901 data 14753137,483196 data 14843744,25501682 data 22212782,8362328 data 4685252,19788231 data 17373156,30225863 data 561696,19903815 data 18157905,19347303 data 28339227,17843217 ' De 51 à 60 data 32637087,10616970 data 32837983,18898962 data 18711082,557610 data 4615364,9175138 data 11524074,4347012 data 22605365,22024864 data 79872,2365 data 5443856,26304535 data 18532000,14832640 data 32979423,17974820 ' De 61 à 70 data 18153809,18153809 data 14956878,4207500 data 9682223,6292890 data 15390389,4212177 data 14956622,2414152 data 33084991,4766244 data 22041621,718496 data 11188906,4357252 data 22020117,22042272 data 33288127,8515330 ' De 71 à 80 data 18414751,19355666 data 28667227,895840 data 33094980,9462642 data 18405233,14828881 data 33226431,18882215 data 14815374,17347719 data 28802382,23399986 data 4096,23639171 data 17829905,23091875 data 29197179,913248 ' De 81 à 90 data 4670474,10329095 data 22506965,5090148 data 18667121,26953478 data 22736565,5097316 data 22722692,17357255 data 33216181,9466855 data 33488575,23559040 data 32969183,23541603 data 4914852,19766727 data 17825809,15583086 ' De 91 à 97 data 14711822,7480455 data 69888,27390373 data 4211716,23759875 data 4198404,3148803 data 3148803,1049601 data 328000,4681156 data 4681156,4539716 ' 98 grille aléatoire pouvant être non résoluble ' 99 grille toutes les cases sont allumées ' ------------------------------------------------------------------------------ rem ============================================================================
Amusez-vous bien en éteignant toutes les lumières. | |
| | | Marc
Nombre de messages : 2372 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Lights Out Game : éteindre les lumières Dim 7 Oct 2018 - 10:44 | |
| Merci Papydall !
Pas facile de faire des économies d'énergie...
Bon dimanche ! | |
| | | papydall
Nombre de messages : 6985 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Lights Out Game : éteindre les lumières Dim 7 Oct 2018 - 11:53 | |
| On peut imaginer une autre version plus difficile de ce jeu. Les lumières n’ont plus deux mais trois états : éteintes (noir) ou allumées (vert ou rouge). Le clic sur une lumière le fait passer d’un état à l’un de deux autres états. Si elle était noire elle devient rouge. Si elle est rouge elle devient verte. Si elle est verte elle s’éteint et elle devient noire.
Bon on peut imaginer d’autres scénarios. Avis aux programmeurs de dimanche ; moi je m’arrête à deux états.
| |
| | | silverman
Nombre de messages : 968 Age : 51 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Lights Out Game : éteindre les lumières Dim 7 Oct 2018 - 15:12 | |
| Voici une SUB qui génère un code de grille aléatoire + code de solution. Ainsi, pour la grille n°98, il y aura toujours une solution. - Code:
-
' variables existantes dim gl,gh gl=5 : gh=5 dim dim etat(gl*gh)
' nouvelles variables dim grille_code,grille_solution, dlist_bn ' nouvel objet dlist_bn=30 : dlist dlist_bn
grille_aleatoire(int(rnd(6))) :' niveau de difficulté aléatoire print "code grille :",grille_code print "code solution :",grille_solution
END SUB grille_aleatoire(niveau) dim_local compteur,bit_number,tmp ' initialiser l'état des leds à 0 for compteur=1 to (gl*gh) etat(compteur)=0 next compteur clear dlist_bn ' créer un nombre à '6+niveau' bits, chaque bit à 1 --->dlist bit_number=int(rnd((gl*gh)-1)+1) if bit_number<10 item_add dlist_bn,"0"+str$(bit_number) :' place un 0 pour les nombres<10 --->pas de pb de tri else item_add dlist_bn,str$(bit_number) end_if for compteur=1 to 6+niveau tmp=pas_unique(bit_number) while tmp=1 bit_number=int(rnd((gl*gh)-1)+1) :' tirage aléatoire d'un numéro de bit à poser à 1 tmp=pas_unique(bit_number) :' vérifier qu'il n'est pas déjà à 1 end_while :' dans ce cas, nouveau tirage if bit_number<10 item_add dlist_bn,"0"+str$(bit_number) :' place un 0 pour les nombres<10 --->pas de pb de tri else item_add dlist_bn,str$(bit_number) end_if next compteur ' trier les bits à 1 par ordre croissant sort dlist_bn ' solution de la grille grille_solution=0 for compteur=1 to count(dlist_bn) grille_solution=grille_solution+power(2,val(item_read$(dlist_bn,compteur))-1) :' ###### grille_solution ###### next compteur ' convertir les bits en valeur numérique pour la sub grille(N) for compteur=1 to count(dlist_bn) bit_number=val(item_read$(dlist_bn,compteur)) ' cls : print bit_number-1," ",bit_number+1," ",bit_number-gh," ",bit_number+gh," ","" :' message "ok" if mod(bit_number,gl)<>1 etat(bit_number-1)=not_etat(etat(bit_number-1)) :' change état led gauche end_if if mod(bit_number,gl)<>0 etat(bit_number+1)=not_etat(etat(bit_number+1)) :' change état led droite end_if if gh>1 :' si plusieurs lignes if (bit_number-gh)>0 etat(bit_number-gh)=not_etat(etat(bit_number-gh)) :' change état led haut end_if if (bit_number+gh)<(gl*gh)+1 etat(bit_number+gh)=not_etat(etat(bit_number+gh)) :' change état led bas end_if end_if etat(bit_number)=not_etat(etat(bit_number)) next compteur grille_code=0 for compteur=1 to (gl*gh) if etat(compteur)=1 then grille_code=grille_code+power(2,compteur-1) :' ###### grille_code ###### next compteur END_SUB rem ============================================================================ FNC pas_unique(n) dim_local k,trouve trouve=0 for k=1 to count(dlist_bn) if val(item_read$(dlist_bn,k))=n trouve=1 exit_for end_if next k result trouve END_FNC rem ============================================================================ FNC not_etat(n%) result 1-n% END_FNC rem ============================================================================
| |
| | | papydall
Nombre de messages : 6985 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Lights Out Game : éteindre les lumières Lun 8 Oct 2018 - 22:23 | |
| Merci Silverman pour ta contribution et tes idées. Ceux qui veulent incorporer cette SUB dans le code ont toute la liberté de le faire.
| |
| | | joeeee2017
Nombre de messages : 60 Date d'inscription : 13/10/2017
| Sujet: re Ven 16 Nov 2018 - 16:13 | |
| marche pas chez moi illégale instruction ligne 23 | |
| | | papydall
Nombre de messages : 6985 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Lights Out Game : éteindre les lumières Ven 16 Nov 2018 - 17:45 | |
| - joeeee2017 a écrit:
- marche pas chez moi illégale instruction ligne 23
La ligne 23 : - Code:
-
led1 99 : width 99,size : height 99,size led1 s’affiche-t-elle en bleu ou en noir ? Si elle ne s’affiche pas en bleu, c’est que tu n’utilises pas la bonne version de Panoramic EditorDe toutes les façons tu dois te mettre à jour joeee 2017. Télécharges la dernière version et tu verras que ça marche. | |
| | | jjn4
Nombre de messages : 2677 Date d'inscription : 13/09/2009
| Sujet: +++ Ven 16 Nov 2018 - 19:45 | |
| Comme d'habitude, Papydall veut nous voir finir complètement chauve à force de nous arracher les cheveux. Mais j'y arriverai, j'y arriverai !!! | |
| | | papydall
Nombre de messages : 6985 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Lights Out Game : éteindre les lumières Ven 16 Nov 2018 - 23:13 | |
| | |
| | | Contenu sponsorisé
| Sujet: Re: Lights Out Game : éteindre les lumières | |
| |
| | | | Lights Out Game : éteindre les lumières | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |