| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2020-09-19 13:59:20 +0200 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2020-09-19 13:59:20 +0200 | 
| commit | 63b3c43af5d402530a8c10c1f71aa0e7ca3aa06f (patch) | |
| tree | c0703ae0bc72aac35dc92684588cac200fa5d698 /data/examples/blackjack/cards.fate | |
| parent | 190cf9e6c79375ab1ae9f36b5d13f1fd07c082e5 (diff) | |
...
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))     )  ) | 


