summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-09-19 13:59:20 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-09-19 13:59:20 +0200
commit63b3c43af5d402530a8c10c1f71aa0e7ca3aa06f (patch)
treec0703ae0bc72aac35dc92684588cac200fa5d698 /data/examples/blackjack/cards.fate
parent190cf9e6c79375ab1ae9f36b5d13f1fd07c082e5 (diff)
...
Diffstat (limited to 'data/examples/blackjack/cards.fate')
-rw-r--r--data/examples/blackjack/cards.fate123
1 files changed, 38 insertions, 85 deletions
diff --git a/data/examples/blackjack/cards.fate b/data/examples/blackjack/cards.fate
index fa2d9f5..16d0bf7 100644
--- a/data/examples/blackjack/cards.fate
+++ b/data/examples/blackjack/cards.fate
@@ -1,97 +1,50 @@
(fate_version 1)
(declare_structure card
- ( text name )
- ( int number )
- ( int score )
+ (text name)
+ (int number)
+ (int score)
)
-(local (list card) heart_cards)
-(local (list card) spade_cards)
-(local (list card) club_cards)
-(local (list card) diamond_cards)
+(local (lambda (list card) (string)) card_generator)
-(define_sequence generate_card_familly ((string name) ((ptr (list card)) deck))
- (local int i)
-
- (for (set i 1) (=< (var i) 13) (set i (+ (var i) 1))
- (local card c)
-
- (set c.number (var i))
-
- (set c.name
- (text
- (switch (var i)
- (1 Ace)
- (11 Jack)
- (12 Queen)
- (13 Kind)
- (cast string (var i))
+(set card_generator
+ (lambda ( (string family) )
+ (map
+ (lambda
+ (
+ (int number)
+ (string family)
)
- of (var name)
)
- )
-
- (set c.score
- (switch (var i)
- (11 10)
- (12 10)
- (13 10)
- (var i)
+ (set_fields (default card)
+ (number (var number))
+ (name
+ (text
+ (switch (var number)
+ (1 Ace)
+ (11 Jack)
+ (12 Queen)
+ (13 Kind)
+ (cast string (var number))
+ )
+ of (var name)
+ )
+ )
+ (score (max 10 number))
)
+ (range 1 13 1)
+ (var family)
)
-
- (add! (var c) (at deck))
)
)
-(visit generate_card_familly Hearts (ptr heart_cards))
-(visit generate_card_familly Spades (ptr spade_cards))
-(visit generate_card_familly Diamonds (ptr diamond_cards))
-(visit generate_card_familly Clubs (ptr club_cards))
-
(global (list card) deck_template)
-(add_all! heart_cards deck_template)
-(add_all! spade_cards deck_template)
-(add_all! diamond_cards deck_template)
-(add_all! club_cards deck_template)
-
-(define_sequence shuffle_into_deck
- (
- ((ptr (list card)) cards)
- ((ptr (list card)) deck)
- )
-
- (while (! (is_empty (at cards)))
- (local int o)
- (local int d)
-
- (set o (rand 0 (- (size (at cards)) 1)))
-
- (if_else (is_empty (at deck))
- (set d 0)
- (set d (rand 0 (- (size (at deck)) 1)))
- )
-
- (add_at! (var d) (access (at cards) (var o)) (at deck))
- (remove_at! (var o) (at cards))
- )
-)
-
-(define_sequence generate_shuffled_deck (((ptr (list card)) result))
- (local (list card) initial_deck)
-
- (set initial_deck (var deck_template))
-
- (clear (at result))
- (visit shuffle_into_deck (ptr initial_deck) (var result))
-)
-
-(define_sequence draw_a_card (((ptr (list card)) deck) ((ptr card) result))
- (set (at result) (access (at deck) 0))
- (remove_at! 0 (at deck))
-)
+(add_all! (eval card_generator Hearts) deck_template)
+(add_all! (eval card_generator Spades) deck_template)
+(add_all! (eval card_generator Diamonds) deck_template)
+(add_all! (eval card_generator Clubs) deck_template)
(define_sequence compute_score (((ptr (list card)) deck) ((ptr int) result))
(local int aces_count)
@@ -100,17 +53,17 @@
(set (at result) 0)
(foreach (at deck) card
- (set (at result) (+ (var card.score) (at result)))
- (if (= (var card.number) 1)
- (set aces_count (+ (var aces_count) 1))
+ (set (at result) (+ card.score (at result)))
+ (if (= card.number 1)
+ (set aces_count (+ aces_count 1))
)
)
- (while (> (var aces_count) 0)
+ (while (> aces_count 0)
(set maybe_better_score (+ (at result) 10))
- (if (=< (var maybe_better_score) 21)
+ (if (=< maybe_better_score 21)
(set (at result) (var maybe_better_score))
)
- (set aces_count (- (var aces_count) 1))
+ (set aces_count (- aces_count 1))
)
)