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 :
et ne venez pas demander
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
- 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 :
Une solution, grille de 9 x 9, 6 cases 'vivantes', fin en 5 étapes :
![]()
Partager