Created
April 25, 2012 15:52
-
-
Save laurentpetit/2490821 to your computer and use it in GitHub Desktop.
Ajout d'un visualiseur swing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; Pour ajouter un visualiseur Swing | |
;; | |
;; 1. coller ce texte à la fin de votre namespace mixit.life | |
;; 2. evaluer | |
;; 3. demarrer un visualiseur swing : | |
;; (swing-board board 7 5) | |
;; 4. attention, la fenetre swing est peut etre cachee derriere votre fenetre Eclipse | |
;; 5. lancer l'animation en calculant 10 générations à partir de l'état init : | |
;; (play init 20) | |
(defn str-board | |
"Represente les cells dans une chaîne | |
de caractères de largeur w et de hauteur | |
h." | |
[cells w h] | |
(apply str (for [y (range h) | |
x (range (inc w))] | |
(cond | |
(= x w) \newline | |
(cells [x y]) \O | |
:else \.)))) | |
(defn pb | |
"Fonction utilitaire pour afficher | |
les cellules vivantes pour la plage | |
7 5" | |
[cells] | |
(print (str-board cells 7 5))) | |
(def poll-period 40) | |
(def continue? true) | |
(defn swing-board | |
"Affiche la plage [w h] de cellules vivantes dans un | |
TextArea Swing, en allant toutes les poll-period millisecondes | |
recuperer la valeur de r et en l'affichant." | |
[r w h] | |
(let [t (doto (javax.swing.JTextArea. "" h w) | |
(.setFont (java.awt.Font/decode "Monospaced 48"))) | |
j (doto (javax.swing.JFrame. "Jeu de la vie") | |
(.add t) | |
.pack | |
.show)] | |
(future (while continue? | |
(Thread/sleep poll-period) | |
(.setText t (str-board @r w h)))))) | |
(def board "atom dans lequel on stocke la valeur courante a afficher" | |
(atom #{})) | |
(def sleep "Temps d'attente(ms) avant de calculer l'etat suivant du jeu" | |
200) | |
(defn play | |
"En partant d'un etat initial init du jeu, calcule times etats | |
suivants, et met a jour la variable board a intervalles sleep." | |
[init times] | |
(future | |
(reset! board init) | |
(dotimes [_ times] | |
(Thread/sleep sleep) | |
(swap! board step)))) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment