Bonjour,

c'est l'été, le moment de s'amuser et je vous propose un petit jeu à la portée de tous les débutants en VBA, ne serait ce que pour le fun de regarder comment on faisait des boucles, dans les temps préhistoriques.

Le principe du jeu de Conway est bien connu de tous les étudiants en programmation :
- quelques cellules 'vivantes' dans un tableau, sélectionnées par le joueur au départ,
- si chaque cellule du tableau a soit trop peu de voisins, soit trop de voisins, elle meurt...
mais inutile de rentrer dans les détails, puisqu'ils sont dans le code ci-dessous.

1- retranscrire en VBA le code créé en 1974 (résultat joué le 20 décembre, à 12h27 et 48s, pour être précis, voir image en bas), dans un langage Basic FRANÇAIS (Oui, cette chose très éphémère a bien existé !)
Note : j'ai quand même traduit les caractères trop spéciaux comme la petite flèche gauche (<-) pour affecter une valeur à une variable, et le # utilisé pour indiquer la différence "<>". Voir l'image du listing d'origine + l'image d'un résultat, en bas.
Le code du listing d'origine, presque brut :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
PERFORER A PARTIR DE 1
1*PROGRAMME CONWAY=====-----
5*LECTURE DU TABLEAU DEPART----
10
15 AFFICHER 'NOMBRE DE LIGNES=? '
16 LIRE G
20 AFFICHER 'NOMBRE DE COLONNES=? '
21 LIRE H;M=G+2;N=H+2
22 TABLEAU PREM[M,N];ZER PREM
25 AFFICHER 'COMBIEN DE CASES PLEINES ?';LIRE A
30 AFFICHER 'INDIQUE LEURS COORDONNEES'
33 B=0
34 AFFICHER[/]
35 LIRE I;LIRE J;B=B+1
37 PREM[I+1,J+1]=1
38 SI B=A ALORS ALLER EN 41
40 ALLER EN 34
41
45 &AFF(PREM)
50 TABLEAU SCND[M,N]
55 FAIRE 125 POUR I=2 JUSQUA M-1
60 FAIRE 125 POUR J=2 JUSQUA N-1
62 C=0
65 SI PREM[I-1,J]=1 ALORS C=C+1
70 SI PREM[I-1,J+1]=1 ALORS C=C+1
75 SI PREM[I,J+1]=1 ALORS C=C+1
80 SI PREM[I+1,J+1]=1 ALORS C=C+1
85 SI PREM[I+1,J]=1 ALORS C=C+1
90 SI PREM[I+1,J-1]=1 ALORS C=C+1
95 SI PREM[I,J-1]=1 ALORS C=C+1
100 SI PREM[I-1,J-1]=1 ALORS C=C+1
105 SI C<=1 ALORS DEBUT SCND[I,J]=0;ALLER EN 125 FIN
110 SI C=2 ALORS DEBUT SCND[I,J]=PREM[I,J];ALLER EN 125 FIN
115 SI C=3 ALORS DEBUT SCND[I,J]=1;ALLER EN 125 FIN
120 SI C>=4 ALORS DEBUT SCND[I,J]=0;ALLER EN 125 FIN
125
126 FAIRE 127 POUR J=1 JUSQUA N
127 SCND[1,J]=0;SCND[M,J]=0
128 FAIRE 129 POUR I=1 JUSQUA M
129 SCND[I,1]=0;SCND[I,N]=0
132 &AFF(SCND)
135 FAIRE 145 POUR I=1 JUSQUA M
140 FAIRE 145 POUR J=1 JUSQUA N
145 SI SCND[I,J]=1 ALORS ALLER EN 155
150 ALLER EN 170
155 FAIRE 165 POUR I=1 JUSQUA M
160 FAIRE 165 POUR J=1 JUSQUA N
165 SI SCND[I,J]<>PREM[I,J] ALORS ALLER EN 190
170 AFFICHER 'C''EST FINI.ON RECOMMENCE ?'
175 CHAINE REP;LIRE REP
180 SI REP='OUI' ALORS ALLER EN 10
185 TERMINER
190 FAIRE 200 POUR I=1 JUSQUA M
195 FAIRE 200 POUR J=1 JUSQUA N
200 PREM[I,J]=SCND[I,J]
205 ZER SCND;ALLER EN 55
210 PROCEDURE &AFF(T)
215 AFFICHER[/,2X]
220 FAIRE 225 POUR I=1 JUSQUA H
225 AFFICHER[F2.0]I
230 FAIRE 245 POUR I=1 JUSQUA G
235 AFFICHER[/,F2.0]I
240 FAIRE 245 POUR J=1 JUSQUA H
245 AFFICHER[X]SI T[I+1,J+1]=0 ALORS '.' SINON 'X'
250 RETOUR
et ne venez pas demander
- qu'est ce que ça fait "AFFICHER[/,F2.0]I" ?
Il y a un résultat ci-dessous, à vous de deviner

2- le vrai défi :
- transcrire ce jeu dans une grille (a priori Excel semble tout indiqué, mais tout est permis),
- améliorer l'interface (par rapport aux terminaux 'transcripteur' de l'époque, ça devrait être possible),
- voire, si vous êtes assez vicieux, compléter le code ci-dessus qui était, je précise, limité à 255 lignes de code MAXI.

La solution gagnante sera la plus belle, la plus ergonomique (taille de grille, choix initial...), la plus rapide (ce qui n'interdit pas de ralentir volontairement l'affichage, si vous êtes trop Top Gun ?) et la plus fiable !

Le listing d'origine :

Nom : Listing.jpg
Affichages : 876
Taille : 848,3 Ko

Une solution, grille de 9 x 9, 6 cases 'vivantes', fin en 5 étapes :

Nom : Test 9x9 - 5 transformations.jpg
Affichages : 538
Taille : 834,5 Ko