Je ne sais pas pourquoi mais le "jeu de la vie" m'a toujours faciné ... voir ces populations évoluer, ces figures se créer ...
Je peux proposer un petit détour par wiki, article très sympa a lire et relire, pour se remettre un peu tout ca en mémoire ! (on trouve pleins d'autres trucs en passant par Google aussi)
Revenons à nos pockets ... (les machines, pas l'admin !)
Récemment doté d'un PC-1600, j'ai voulu lui implémenter le jeu de la vie - disons "microbes" sur un pocket !
J'ai choisi de travailler directement en mode graphique dans un carré de 30x30 :

- la machine calcule le premier "carré" à gauche (ca ressemble à un code barre 2D !!)
- puis calcule la nouvelle génération dans le nouveau carré, celui de droite,
- a la fin du calcul, la nouvelle génération est recopiée dans le carré de gauche et ca recommence à l'étape ci avant.
Avec ce système, tout se passe sur l'écran, pas de variable nécessaire pour mémoriser les 900 cellules !
Code : Tout sélectionner
10 REM ***BABACROBES***
20 CLEAR :CLS :WAIT 0:RANDOM
40 N=0:R=1:Y=0:X=0:WAIT 100
45 CURSOR 5,1:PRINT "*** MICROBES ***":CURSOR 10,2:PRINT "by baba"
60 CLS :WAIT 0
70 CURSOR 13,0:PRINT "Generation 1":GOSUB 1000
75 GOSUB 700:CURSOR 13,0:PRINT "calcul ...":GOSUB 1500
80 GOSUB 1300:R=R+1
85 GOSUB 700:CURSOR 13,0:PRINT "Recopie":GOSUB 1500
90 GOSUB 1200:GOSUB 1500
100 GOTO 75
700 REM ****CLEARAFF****
710 FOR I=1 TO 3
720 CURSOR 13,I:PRINT " " : REM 12 SPACE
730 NEXT I : RETURN
1000 REM ***INIT***
1010 FOR J=1TO 30:FOR I=1TO 30
1020 A=RND 2-1
1030 IF A=1THEN PSET(I,J):N=N+1
1050 NEXT I:NEXT J:RETURN
1200 REM ****COPIE****
1210 FOR J=1TO 30:FOR I=1TO 30
1220 PRESET(I,J):IF POINT (I+40,J)THEN PSET(I,J)
1230 PRESET(I+40,J)
1240 NEXT I:NEXT J:RETURN
1300 REM **NEXTGEN***
1301 Y=0:X=0
1305 FOR J=1TO 30:FOR I=1TO 30
1390 F=POINT (I-1,J)+POINT (I+1,J)+POINT (I,J-1)+POINT (I,J+1)
1400 F=F+POINT (I-1,J-1)+POINT (I-1,J+1)+POINT (I+1,J-1)+POINT (I+1,J+1)
1410 IF POINT (I,J)AND (F<2OR F>3)THEN PRESET(I+40,J):N=N-1:X=X+1:GOTO 1450
1420 IF NOT POINT (I,J)AND F=3THEN PSET(I+40,J):N=N+1:Y=Y+1:GOTO 1450
1430 IF POINT (I,J)AND (F=2OR F=3)THEN PSET(I+40,J):GOTO 1450
1440 IF NOT POINT (I,J)AND F<>3THEN PRESET(I+40,J)
1450 NEXT I:NEXT J:RETURN
1500 REM ***AFFDATA***
1510 CURSOR 13,1:PRINT "Gen : ";R
1520 CURSOR 13,2:PRINT "Pop : ";N
1530 CURSOR 13,3:PRINT "+";Y;" -";X
1540 RETURN 
Génération 1 (routine ligne 1000) : 40 secondes
Génération 2 (routine ligne 1300) : env 3 minutes 30" !!!!
Recopie (routine ligne 1200) : 25 secondes
Et c'est là que vous intervenez !!!
Qui peut m'aider à écrire ces routines en assembleur ?
J'y connais quasi rien ...
Edit du 22/03 : petit correctif sur le code (retrait d'un morceau inutile)






