Page 1
Writing a Tile-Matching Game
FP StyleHakim Cassimally
@osfameron, @lambdamcr
Page 4
(({:colour :red} {:colour :red} {:colour :red} {:colour :blue} {:colour :blue}) ({:colour :green} {:colour :green} {:colour :red} {:colour :red} {:colour :blue})({:colour :red} {:colour :green} {:colour:blue} {:colour :blue} {:colour :blue})({:colour :green} {:colour :green} {:colour :green} {:colour :green} {:colour :blue})({:colour :red} {:colour :green} {:colour :green} {:colour :red} {:colour :blue}))
Page 6
{:colour :blue:type :candy}
Page 8
(map (partial partition-by :colour))
Page 9
(map (partial partition-by :colour))
Page 10
(map match)(defn match [groups](filter#(>= (count %) 3)groups))
Page 11
(map match)(defn match [groups](filter#(>= (count %) 3)groups))
Page 24
[0 0][ [1 0] [2 0]
Page 25
[0 0][ [1 0] [2 0] [3 0]
Page 26
[0 0][ [1 0] [2 0] [3 0] [4 0] ]
zip(defn zip [list1 list2](map vector list1 list2))
Page 27
(defn zip-over-grid [list1 list2](map zip list1 list2))
Page 37
(repeat (range)) (map repeat (range))
...
...
...
...
...
...
...
...
...
...... ...
Page 38
...
...
...
......
...
+
Page 42
(defn transpose [m](apply map vector m))
Page 47
(defn points [runs](->> runs
(map count)(apply +)))
= 19
Page 62
State or Change?
{:colour :blue:pos [0 1]:to [1 1]:animate :fall}
Page 63
Display
User Input
Check Matches
Remove Matches
Adjust Score
Fall/Fill (animate)
{:score 0}:grid
}
Page 64
{:score 0}:grid
}
Display
User Input
Check Matches
Remove Matches
Adjust Score
Fall/Fill (animate)
Page 65
Display
User Input
Check Matches
Remove Matches
Adjust Score
Fall/Fill (animate)
{:score 0}:grid
:matches}
Page 66
Display
User Input
Check Matches
Remove Matches
Adjust Score
Fall/Fill (animate)
{:score 0}:grid
:matches}
Page 67
Display
User Input
Check Matches
Remove Matches
Adjust Score
Fall/Fill (animate)
{:score 5}:grid
}
Page 68
Display
User Input
Check Matches
Remove Matches
Adjust Score
Fall/Fill (animate)
{:score 5}:grid
}
Page 69
Display
User Input
Check Matches
Remove Matches
Adjust Score
Fall/Fill (animate)
{:score 5}:grid
}
Page 70
THANK YOU!Any Questions?