FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» demande explication KGF pour imprimer en mm
Lights Out Game : éteindre les lumières Emptypar JL35 Hier à 17:28

» Petit passage furtif
Lights Out Game : éteindre les lumières Emptypar Froggy One Mer 27 Mar 2024 - 14:26

» SPIN et aide langage (résolu)
Lights Out Game : éteindre les lumières Emptypar leclode Sam 23 Mar 2024 - 15:20

» Aide-mémoire des mots-clés Panoramic
Lights Out Game : éteindre les lumières Emptypar papydall Mer 20 Mar 2024 - 21:23

» Je ne comprend pas pourquoi la largeur de la scene 3d change
Lights Out Game : éteindre les lumières Emptypar Marc Mar 12 Mar 2024 - 20:06

» Comment télécharger panoramic?
Lights Out Game : éteindre les lumières Emptypar lepetitmarocain Sam 9 Mar 2024 - 13:31

» @lepetitmarocain <==> KGFGrid
Lights Out Game : éteindre les lumières Emptypar Klaus Dim 3 Mar 2024 - 9:59

» Tangram-Toukaré
Lights Out Game : éteindre les lumières Emptypar jjn4 Mer 28 Fév 2024 - 18:12

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Lights Out Game : éteindre les lumières Emptypar jjn4 Mer 28 Fév 2024 - 18:09

» KGF_dll - nouvelles versions
Lights Out Game : éteindre les lumières Emptypar Klaus Mer 28 Fév 2024 - 17:01

» Mes souhaits d'amélioration de Panoramic.
Lights Out Game : éteindre les lumières Emptypar Pedro Lun 26 Fév 2024 - 18:12

» Testez-votre-QI
Lights Out Game : éteindre les lumières Emptypar jjn4 Dim 25 Fév 2024 - 17:12

» Utilisation d'Élip
Lights Out Game : éteindre les lumières Emptypar jjn4 Sam 24 Fév 2024 - 18:33

» Récapitulatif ludothèque panoramic jjn4
Lights Out Game : éteindre les lumières Emptypar jjn4 Sam 24 Fév 2024 - 18:11

» Générateur de mots de passe
Lights Out Game : éteindre les lumières Emptypar mindstorm Mar 20 Fév 2024 - 20:09

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mars 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
25262728293031
CalendrierCalendrier
Le deal à ne pas rater :
Nike : Jusqu’à 50% sur les articles de fin de saison
Voir le deal

 

 Lights Out Game : éteindre les lumières

Aller en bas 
+2
Jean Claude
papydall
6 participants
AuteurMessage
papydall

papydall


Nombre de messages : 6985
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Lights Out Game : éteindre les lumières Empty
MessageSujet: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptyMar 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 ============================================================================
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptyMar 2 Oct 2018 - 8:31

Bravo Papydall,

Je viens de jouer, c'est un casse tête drunken drunken
Je n'ai pas encore réussi à gagner, mais ça viendra. Very Happy

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...

lol!
Revenir en haut Aller en bas
silverman

silverman


Nombre de messages : 968
Age : 51
Localisation : Picardie
Date d'inscription : 18/03/2015

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptyMar 2 Oct 2018 - 12:42

Pfff, en effet, c'est pas évident drunken
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' Idea
Je n'ai pas résisté à l'envie de coder un editeur si tu choisit les états binaires  Very Happy (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

Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 6985
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptyMar 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.
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptyMar 2 Oct 2018 - 13:44

J'ai hâte d'avoir une version finale...Very Happy

Voici ce que j'ai réussi avec le code aléatoire de Sylverman.

Lights Out Game : éteindre les lumières Image_11

A+
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 6985
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptyMer 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.
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptyMer 3 Oct 2018 - 7:36

Super, ce jeu. Very Happy

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.... clown

En attendant, j'ai de quoi me détendre entre mes recherches sur EPP et les pauses.

A+
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 6985
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptyMer 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 !  Idea
Ce n’est pas parce que le jeu s’appelle éteindre la lumière que tu la garderas au noir !

Bon amusement !
Et à +
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptyMer 3 Oct 2018 - 13:21

En fait, ma méthode est très simple, tant pis je la divulgue.  Embarassed  Embarassed

J'éteint l'écran.

lol!

Sérieusement, j'ai une méthode qui fonctionne bien pour commencer un puzzle, mais à la fin elle n'est plus valable.

A+
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2372
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptySam 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 !
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 6985
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptySam 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  scratch
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Marc

Marc


Nombre de messages : 2372
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptySam 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 Laughing

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 ! affraid affraid

Un compteur n'a pas dû être remis à zéro quelque part...

Lights Out Game : éteindre les lumières 131

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 Question Exclamation
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptySam 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. Very Happy

C'est un bon jeu, j'aime.

A+
Revenir en haut Aller en bas
silverman

silverman


Nombre de messages : 968
Age : 51
Localisation : Picardie
Date d'inscription : 18/03/2015

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptySam 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 Very Happy
Supposons que A soit généré avec 2 bits à 1, en combinatoire,  Combinaisons (2 parmi 25)=300 combinaisons possible --->pas trop difficile. bounce
Maintenant, supposons que A soit généré avec 12 bits à 1, Combinaisons (12 parmi 25)=5200300 combinaisons possible ---> +difficile ! scratch scratch  scratch  
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 ?
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 6985
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptyDim 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.
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Marc

Marc


Nombre de messages : 2372
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptyDim 7 Oct 2018 - 10:44

Merci Papydall !

Pas facile de faire des économies d'énergie...

Bon dimanche !
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 6985
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptyDim 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.



Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
silverman

silverman


Nombre de messages : 968
Age : 51
Localisation : Picardie
Date d'inscription : 18/03/2015

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptyDim 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. Very Happy
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 ============================================================================
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 6985
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptyLun 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.
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
joeeee2017




Nombre de messages : 60
Date d'inscription : 13/10/2017

Lights Out Game : éteindre les lumières Empty
MessageSujet: re   Lights Out Game : éteindre les lumières EmptyVen 16 Nov 2018 - 16:13

marche pas chez moi illégale instruction ligne 23
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 6985
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptyVen 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 Editor
De toutes les façons tu dois te mettre à jour joeee2017.


Télécharges la dernière version et tu verras que ça marche. tongue
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
jjn4

jjn4


Nombre de messages : 2677
Date d'inscription : 13/09/2009

Lights Out Game : éteindre les lumières Empty
MessageSujet: +++   Lights Out Game : éteindre les lumières EmptyVen 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 !!!
rabbit
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
papydall

papydall


Nombre de messages : 6985
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières EmptyVen 16 Nov 2018 - 23:13

Un Martien chevelu ce n’est pas drôle !

Lights Out Game : éteindre les lumières Martie10Lights Out Game : éteindre les lumières Martie10Lights Out Game : éteindre les lumières Martie10
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé





Lights Out Game : éteindre les lumières Empty
MessageSujet: Re: Lights Out Game : éteindre les lumières   Lights Out Game : éteindre les lumières Empty

Revenir en haut Aller en bas
 
Lights Out Game : éteindre les lumières
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Jeu "lights" (lumières)
» GUI for game
» game for practice
» Castle game Engine
» Coordination / Avancement / Demande de travail et IRC

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Les jeux faits avec Panoramic-
Sauter vers: