view src/rlm/mtg.clj @ 0:78a630e650d2

initial import
author Robert McIntyre <rlm@mit.edu>
date Tue, 18 Oct 2011 00:57:08 -0700
parents
children
line wrap: on
line source
1 ;; GAME TEMPLATES
3 ;player groups and alliances
4 (def *no-one 'group-no-one) ;no one
5 (def *self 'group-self) ;one's self
6 (def *allies 'group-allies) ;one's allies
7 (def *enemies 'group-enemies);one's enemies
8 (def *everyone 'group-everyone) ;everyone
9 (def *inherit 'group-inherit) ;default
12 (defn create-zonetype [name visibility]
13 (list 'zone-type name visibility)
14 )
16 (defn create-quantity [name initial-value]
17 (list 'quantity name initial-value)
18 )
21 (defn gametype-mtg[]
22 {
23 :zone-types
24 (list
25 (create-zonetype 'library *no-one)
26 (create-zonetype 'graveyard *everyone)
27 (create-zonetype 'out-of-play *inherit)
28 (create-zonetype 'batlefield *inherit)
29 (create-zonetype 'hand *self)
30 )
31 :player-quantities (list
32 (create-quantity 'life 20)
33 (create-quantity 'red-mana 0)
34 (create-quantity 'blue-mana 0)
35 (create-quantity 'green-mana 0)
36 (create-quantity 'white-mana 0)
37 (create-quantity 'black-mana 0)
38 (create-quantity 'colorless-mana 0)
39 )
41 :fn-add-player (fn[player-name & teammates]
42 (list 'player player-name)
43 )
44 }
46 )
49 ;; GAME INSTANCES
50 (defn add-player[game player-name & teammates]
51 (apply (game :gametype :fn-add-player) (cons player-name teammates))
52 )
54 (defn new-game [gametype]
55 {
56 :gametype (gametype)
57 :players (ref '())
58 :allies (ref '()) ;list of (player-1 player-2 relationship). transitive.
59 }
60 )