Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions project.clj
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,7 @@
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.8.0"]]
:main game-of-life.core)
:main ^:skip-aot game-of-life.core
:dependencies [[org.clojure/clojure "1.8.0"]
[clj-launchpad "0.3.2"]
[circleci/bond "0.2.9"]])
29 changes: 10 additions & 19 deletions src/game_of_life/core.clj
Original file line number Diff line number Diff line change
@@ -1,26 +1,17 @@
(ns game-of-life.core
(:require [game-of-life.game :refer :all]))
(:require [game-of-life.game :refer :all]
[game-of-life.renderer :as r]
[clj-launchpad :as launchpad]))

(def initial-grid
(random-grid 80 60 0.4))

(defn clear
[]
(print (str (char 27) "[2J"))) ; clear screen
(def lpad (launchpad/open))

(defn render
[grid cell empty]
(print (str (char 27) "[;H")) ; move cursor to the top left corner of the screen
(println (to-string grid cell empty)))
(def initial-grid
(random-grid 9 8 0.35))

(defn -main
"Run some thing!"
[]
(let [emoji "◻️"]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we keep both drawing methods and have an easy way to switch between them in the -main?

(clear)
(render initial-grid emoji " ")
(Thread/sleep 1000)
(loop [grid initial-grid]
(render grid emoji " ")
(Thread/sleep 100)
(recur (game-step grid)))))
(loop [grid initial-grid]
(r/draw-grid lpad grid)
(Thread/sleep 100)
(recur (game-step grid))))
13 changes: 13 additions & 0 deletions src/game_of_life/renderer.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
(ns game-of-life.renderer
(:require [clj-launchpad :as launchpad]
[game-of-life.game :as game]))

(defn draw-grid
"Draws a grid on the launchpad"
[device grid]
(game/grid-map
(fn [x y v]
(if (true? v)
(launchpad/draw-grid device x y :green)
(launchpad/draw-grid device x y :off)))
grid))
38 changes: 38 additions & 0 deletions test/game_of_life/renderer_test.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
(ns game-of-life.renderer-test
(:require [clojure.test :refer :all]
[bond.james :as bond :refer [with-stub]]
[game-of-life.renderer :as renderer]
[clj-launchpad :as launchpad]))

(def lpad :lpad)

(deftest renderer-test
(testing "lights up top left corner light"
(with-stub [[launchpad/draw-grid (fn [& args] args)]]
(let [initial-grid [[true false]
[false false]]]
(renderer/draw-grid lpad initial-grid)
(is (= '(:lpad 0 0 :green) (-> launchpad/draw-grid bond/calls (nth 0) :args)))
(is (= '(:lpad 1 0 :off) (-> launchpad/draw-grid bond/calls (nth 1) :args)))
(is (= '(:lpad 0 1 :off) (-> launchpad/draw-grid bond/calls (nth 2) :args)))
(is (= '(:lpad 1 1 :off) (-> launchpad/draw-grid bond/calls (nth 3) :args))))))

(testing "lights up bottom right corner"
(with-stub [[launchpad/draw-grid (fn [& args] args)]]
(let [initial-grid [[false false]
[false true]]]
(renderer/draw-grid lpad initial-grid)
(is (= '(:lpad 0 0 :off) (-> launchpad/draw-grid bond/calls (nth 0) :args)))
(is (= '(:lpad 1 0 :off) (-> launchpad/draw-grid bond/calls (nth 1) :args)))
(is (= '(:lpad 0 1 :off) (-> launchpad/draw-grid bond/calls (nth 2) :args)))
(is (= '(:lpad 1 1 :green) (-> launchpad/draw-grid bond/calls (nth 3) :args))))))

(testing "lights up bottom right and top left"
(with-stub [[launchpad/draw-grid (fn [& args] args)]]
(let [initial-grid [[true false]
[false true]]]
(renderer/draw-grid lpad initial-grid)
(is (= '(:lpad 0 0 :green) (-> launchpad/draw-grid bond/calls (nth 0) :args)))
(is (= '(:lpad 1 0 :off) (-> launchpad/draw-grid bond/calls (nth 1) :args)))
(is (= '(:lpad 0 1 :off) (-> launchpad/draw-grid bond/calls (nth 2) :args)))
(is (= '(:lpad 1 1 :green) (-> launchpad/draw-grid bond/calls (nth 3) :args)))))))