papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Jeu de la vie Mar 28 Juin 2016 - 23:58 | |
| Jean_Debord a proposé le jeu de la vie en FBPano ici. Je vous propose le même jeu en Panoramic. Certes mon programme est plus modeste que celui de Jean_Debord, mais ça m’a donné l’occasion de le faire. Si vous voulez vous en inspirer pour faire un meilleur programme que le mien ou si vous voulez l’améliorer, donnez-vous du plaisir. Le jeu de la vie n’est pas un jeu au sens strict ; c’est pourquoi je le poste dans Vos sources, vos utilitaires à partager et non pas dans Les jeux faits avec Panoramic - Code:
-
rem ============================================================================ rem JEU DE LA VIE rem ============================================================================ ' Les cellules meurent ou naissent suivant 3 lois : ' Parmi les cellules adjacentes, ' 1) si plus de 3 sont vivantes ==> la cellule meurt d'étouffement; ' 2) si moins de 2 sont vivantes ==> la cellule meurt d'isolement; ' 3) si 2 ou 3 vivantes ==> la cellule reste en l'état; ' 4) si 2 vivantes ==> la cellule naît (si elle était morte) rem ============================================================================ ' On rencontre des structures remarquables : ' * Figure stable ' * Figure 2-périodiques et fixe et sa rotation de 90° ' * Figure 5-périodiques et se déplaçant (appelée "planeurs" et ses images par rotation rem ============================================================================
Jeu_De_La_Vie() terminate
END rem ============================================================================ SUB Jeu_De_La_Vie() Init() Grille_De_Jeu() ' Essayez N_Periodiques() puis Clown() ' N_Periodiques() Clown() repeat Evolution() Affichage() until scancode = 27 END_SUB REM ============================================================================ SUB Init() dim w,h : w = 800 : h = 800 dim NbLigne, NbColonne : NbLigne = 30 : NbColonne = 30 : ' Nombre de cellules dim centre : centre = (NbLigne*NbColonne + NbColonne)/2 : ' Centre de la grille dim wc,hc : wc = (w-100)/NbColonne-2 : hc = wc : ' dimensions d'une cellule dim matrice(NbColonne+1,NbLigne+1) dim ligne,colonne,x,y,r dim generation width 0,w : height 0,h : color 0,200,150,50 alpha 9999 : top 9999,5 : left 9999,200 : font_bold 9999 : font_size 9999,18 font_color 9999,0,0,255 : caption 9999,"J E U D E L A V I E" panel 9998 :width 9998,width(0)-100 : height 9998,height(0)-100 top 9998,50 :left 9998,50
END_SUB rem ============================================================================ SUB Grille_De_Jeu() dim_local ligne,colonne,n hide 9998 for ligne = 1 to NbLigne for colonne = 1 to NbColonne n = (ligne-1)*NbColonne + colonne picture n : parent n,9998 : width n,wc : height n,hc : color n,0,255,255 top n,8+ligne+(ligne-1)*hc : left n,8+colonne+(colonne-1)*wc 2d_target_is n : x = wc/2 : y = hc/2 : r = x : 2d_circle x,y,r matrice(ligne,colonne) = 0 : ' cellule initialement morte next colonne next ligne show 9998 END_SUB rem ============================================================================ SUB N_Periodiques() dim_local i,l,c,d,f 2d_fill_on ' Essayez ces n-périodiques ' d = 308 : f = d+2 : ' 2-Périodiques ' d = 308 : f = d+4 : ' 8-Périodiques d = 308 : f = d+10 : ' 15-Périodiques for i = d to f 2d_target_is i : 2d_fill_color 0,0,0 : 2d_circle x,y,r l = int(i/NbLigne) + 1 c = mod(i,NbColonne) : if c = 0 then c = NbColonne matrice(c,l) = 1 : ' cellule vivante display next i END_SUB rem ============================================================================ SUB Evolution() Dim_local Hg, Hm, Hd, Mg, Md, Bg, Bm, Bd, Som : ' ce sont les 8 cases adjacentes dim_local x,y,mat(Nbcolonne,NbLigne) caption 0,"J E U D E L A V I E Génération : " + str$(generation) + " <ESC> pour arrêter" generation = generation + 1 For X = 1 To NBColonne For Y = 1 To NbLigne ' variables ayant l'état des cellules adjacentes Hg = Matrice(X - 1, Y - 1) Hm = Matrice(X, Y - 1) Hd = Matrice(X + 1, Y - 1) Mg = Matrice(X - 1, Y) Md = Matrice(X + 1, Y) Bg = Matrice(X - 1, Y + 1) Bm = Matrice(X, Y + 1) Bd = Matrice(X + 1, Y + 1) Som = Hg + Hm + Hd + Mg + Md + Bg + Bd + Bm : ' nombre de cellules vivantes adjacentes If (Som < 2) Or (Som > 3) ' alors la cellule crève soit par isolement, soit par étouffement Mat(X, Y) = 0 End_If If Som = 3 then mat(x,y) = 1 if (som = 2) and (matrice(x,y) = 1) then mat(x,y) = 1
Next Y Next X ' maintenant, on copie Mat dans Matrice For X = 1 To NbColonne For Y = 1 To NbLigne : Matrice(X, Y) = Mat(X, Y) : Next Y Next X END_SUB rem ============================================================================ SUB Affichage() dim_local l,c,n
For c = 1 To NBColonne For l = 1 To NbLigne n = (l-1)*NbColonne + c : 2d_target_is n If Matrice(c,l) = 1 : ' alors cellule vivante 2d_fill_color 0,0,0 else 2d_fill_color 255,255,255 : ' cellule morte End_If 2d_circle x,y,r : ' afficher la cellule Next l Next c
END_SUB rem ============================================================================ SUB Clown() dim_local i,d,f,l,c 2d_fill_on d = centre-1 : f = d+2
for i = d to f step 2 2d_target_is i : 2d_fill_color 0,0,0 : 2d_circle x,y,r l = int(i/NbLigne) + 1 c = mod(i,NbColonne) : if c = 0 then c = NbColonne matrice(c,l) = 1 : ' cellule vivante next i d = d + NbColonne : f = d+2 for i = d to f step 2 2d_target_is i : 2d_fill_color 0,0,0 : 2d_circle x,y,r l = int(i/NbLigne) + 1 c = mod(i,NbColonne) : if c = 0 then c = NbColonne matrice(c,l) = 1 : ' cellule vivante next i d = d + NbColonne : f = d+2 for i = d to f 2d_target_is i : 2d_fill_color 0,0,0 : 2d_circle x,y,r l = int(i/NbLigne) + 1 c = mod(i,NbColonne) : if c = 0 then c = NbColonne matrice(c,l) = 1 : ' cellule vivante next i END_SUB rem ============================================================================
| |
|
jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Jeu de la vie Mer 29 Juin 2016 - 10:03 | |
| Merci Papydall Une remarque : les motifs 8-périodiques et 15-périodiques ne marchent pas car ils redonnent le 2-périodique. Pour le 8-périodique on peut prendre : - Code:
-
*** *** *** *** *** ***
Pour le 15-périodique : le segment à 10 cellules (non 11) PS. On trouve plein de motifs ici : http://www.bitstorm.org/gameoflife/lexicon/ | |
|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Jeu de la vie Mer 29 Juin 2016 - 18:12 | |
| Merci Jean. En cette période, ramadan (pour nous), chaleur, mer, retrouvailles de la grande famille, etc., pas de temps pour autre chose. J’ai fait le code du jeu de la vie à la va vite. Merci pour le lien : c’est intéressant. | |
|