| summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'data/examples/blackjack/cards.fate')
| -rw-r--r-- | data/examples/blackjack/cards.fate | 123 |
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)) ) ) |


