Bonjour
J'aimerais faire le jeu de la vie en OCaml.
Pour ça j'ai fait le bête programme suivant, le plus simple qui me soit venu à l'esprit :
Mais le problème que je rencontre est celui de la rapidité.
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 #load "graphics.cma";; Graphics.open_graph "";; Graphics.auto_synchronize false;; let vie col = (col = Graphics.black) || (col = Graphics.red);; (* Renvoie true si la cellule était vivante à ce tour *) let mort col = (col = Graphics.white) || (col = Graphics.green);; (* Renvoie true si la cellule était morte à ce tour *) Graphics.set_color Graphics.black;; Graphics.plot 3 15;; Graphics.plot 4 14;; Graphics.plot 4 13;; (* dessine un vaisseau *) Graphics.plot 3 13;; Graphics.plot 2 13;; for k = 2 to 100 do for i = 2 to 40 do for j = 2 to 40 do let nb = ref 0 in if vie (Graphics.point_color (i-1) j) then incr nb; if vie (Graphics.point_color (i+1) j) then incr nb; if vie (Graphics.point_color (i-1) (j-1)) then incr nb; if vie (Graphics.point_color (i-1) (j+1)) then incr nb; if vie (Graphics.point_color (i+1) (j-1)) then incr nb; if vie (Graphics.point_color (i+1) (j+1)) then incr nb; if vie (Graphics.point_color i (j+1)) then incr nb; if vie (Graphics.point_color i (j-1)) then incr nb; if Graphics.point_color i j = Graphics.black then if !nb < 2 || !nb > 3 then (Graphics.set_color Graphics.red; Graphics.plot i j) else () else if !nb = 3 then (Graphics.set_color Graphics.green; Graphics.plot i j) else (); done; done; for i = 2 to 40 do for j = 2 to 40 do if Graphics.point_color i j = Graphics.red then (Graphics.set_color Graphics.white; Graphics.plot i j); if Graphics.point_color i j = Graphics.green then (Graphics.set_color Graphics.black; Graphics.plot i j); done; done; Graphics.synchronize(); done;; Graphics.close_graph();;
En effet, là je travaille sur un carré de 40 pixels de côté, et il met déjà quasiment une seconde pour calculer une génération de plus, ce qui est un peu embêtant.
Auriez-vous quelque chose à me proposer pour en améliorer la rapidité? C'est sans doute possible de le faire aller bien plus vite.
Est-ce que travailler sur des tableaux plutôt que directement avec des Graphics.plot permettrait d'augmenter la vitesse?
EDIT : Et d'autre part, y a-t-il moyen de se débarrasser de ces "Graphics." qui traînent dans toutes les fonctions? J'ai essayé #use à toutes les sauces, mais impossible d'obtenir quelque chose.
Merci d'avance
Fractal
Partager