summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
Diffstat (limited to 'data')
-rw-r--r--data/examples/blackjack/cards.fate123
-rw-r--r--data/examples/blackjack/global.fate12
-rw-r--r--data/examples/blackjack/main.fate8
-rw-r--r--data/examples/blackjack/play.fate155
4 files changed, 118 insertions, 180 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))
)
)
diff --git a/data/examples/blackjack/global.fate b/data/examples/blackjack/global.fate
index 9c10c9f..16574e6 100644
--- a/data/examples/blackjack/global.fate
+++ b/data/examples/blackjack/global.fate
@@ -9,8 +9,8 @@
(set coins_word
(lambda ((int i))
(if_else (= (var i) 1)
- (text a single coin )
- (text (var i) coins )
+ (text a single coin)
+ (text (var i) coins)
)
)
)
@@ -18,8 +18,8 @@
(declare_text_effect action_description)
(define_sequence money_acquisition ((int amount))
- (set player.money (+ (var player.money) (var amount)))
- (if (> (var amount) 0)
+ (set player.money (+ player.money amount))
+ (if (> amount 0)
(text_effect action_description
You acquired (eval coins_word (var amount))!
)
@@ -27,8 +27,8 @@
)
(define_sequence money_loss ((int amount))
- (set player.money (- (var player.money) (var amount)))
- (if (> (var amount) 0)
+ (set player.money (- player.money amount))
+ (if (> amount 0)
(text_effect action_description
You lost (eval coins_word (var amount)).
)
diff --git a/data/examples/blackjack/main.fate b/data/examples/blackjack/main.fate
index 0ab9b7d..acfee7e 100644
--- a/data/examples/blackjack/main.fate
+++ b/data/examples/blackjack/main.fate
@@ -46,20 +46,20 @@ Now, you're all set to go... unless you don't know how to play?
(cond
(
- (=< (var player.money) (/ (var original_amount) 2))
+ (=< player.money (/ original_amount 2))
Outch. I suppose all your luck was spent by getting these free coins.
)
(
- (< (var player.money) (var original_amount))
+ (< player.money original_amount)
Well, that's not too bad for your first time. Come back tomorrow, I am
sure you'll be getting it all back.
)
(
- (< (var player.money) (* (var original_amount) 2))
+ (< player.money (* original_amount 2))
Had a good day, I hope?
)
(
- (< (var player.money) (* (var original_amount) 4))
+ (< player.money (* original_amount 4))
Well! That was some fine play, if I do say so myself!
)
(
diff --git a/data/examples/blackjack/play.fate b/data/examples/blackjack/play.fate
index 3dc9536..2cf2407 100644
--- a/data/examples/blackjack/play.fate
+++ b/data/examples/blackjack/play.fate
@@ -15,20 +15,16 @@
(define_sequence play_a_game ()
(local card new_card)
- (if (not (var has_played))
- (
- (text_effect action_description
- Sitting yourself at a table, you see someone rushing to set up the
- cards and manage the game.
- )
- (set has_played (true))
+ (if (not has_played)
+ (text_effect action_description
+ Sitting yourself at a table, you see someone rushing to set up the
+ cards and manage the game.
)
+ (set has_played (true))
)
(if (= (var player.money) 0)
- (
- I am sorry, (var player.name), but you appear to have ran out of coins.
- (done)
- )
+ I am sorry, (var player.name), but you appear to have ran out of coins.
+ (done)
)
(prompt_integer
(ptr bet)
@@ -42,9 +38,9 @@
(newline)
- (visit generate_shuffled_deck (ptr current_deck))
+ (set current_deck (shuffle deck_template))
- (visit draw_a_card (ptr current_deck) (ptr new_card))
+ (pop_left! current_deck (ptr new_card))
(add! (var new_card) player.hand)
(text_effect action_description
@@ -52,8 +48,7 @@
(newline)
)
-
- (visit draw_a_card (ptr current_deck) (ptr new_card))
+ (pop_left! current_deck (ptr new_card))
(add! (var new_card) dealer_hand)
(text_effect action_description
@@ -61,7 +56,7 @@
(newline)
)
- (visit draw_a_card (ptr current_deck) (ptr new_card))
+ (pop_left! current_deck (ptr new_card))
(add! (var new_card) player.hand)
(text_effect action_description
@@ -71,7 +66,7 @@
(newline)
- (visit draw_a_card (ptr current_deck) (ptr new_card))
+ (pop_left! current_deck (ptr new_card))
(add! (var new_card) dealer_hand)
(text_effect action_description
@@ -111,54 +106,50 @@
(visit compute_score (ptr player.hand) (ptr player_score))
(if (= (var dealer_score) 21)
- (
+ (text_effect action_description
+ The dealer reveals their full hand:
+ )
+ (foreach dealer_hand card
(text_effect action_description
- The dealer reveals their full hand:
+ (newline)
+ * The (var card.name), worth
+ (if_else (= (var card.number) 1)
+ (text 1 or 11 points.)
+ (text (var card.score) points.)
+ )
)
- (foreach dealer_hand card
+ )
+ (newline)
+ (ifelse (= (var player_score) 21)
+ (
(text_effect action_description
- (newline)
- * The (var card.name), worth
- (if_else (= (var card.number) 1)
- (text 1 or 11 points. )
- (text (var card.score) points. )
- )
+ The dealer looks very surprised.
)
+ (newline)
+ Double Blackjack! A tie, then.
+ (done)
)
- (newline)
- (ifelse (= (var player_score) 21)
- (
- (text_effect action_description
- The dealer looks very surprised.
- )
- (newline)
- Double Blackjack! A tie, then.
- (done)
- )
- (
- (text_effect action_description
- The dealer looks surprised, but happy.
- )
- (newline)
- Blackjack! Looks like I win, this time.
- (visit money_loss (var bet))
- (done)
+ (
+ (text_effect action_description
+ The dealer looks surprised, but happy.
)
+ (newline)
+ Blackjack! Looks like I win, this time.
+ (visit money_loss (var bet))
+ (done)
)
)
)
(if (= (var player_score) 21)
- (
- (text_effect action_description
- The dealer looks surprised.
- )
- (newline)
- Blackjack! Looks like you win, this time.
- (newline)
- (visit money_acquisition (cast int (* (cast float (var bet)) 1.5)))
- (done)
+ (text_effect action_description
+ The dealer looks surprised.
)
+ (newline)
+ Blackjack! Looks like you win, this time.
+ (newline)
+ (visit money_acquisition (cast int (* (cast float (var bet)) 1.5)))
+ (done)
)
(player_choice
@@ -171,10 +162,10 @@
( I will stand. )
(jump_to resolve_dealer)
)
- (if (and (>= (var player_score) 9) (<= (var player_score) 11))
+ (if (and (>= player_score 9) (<= player_score 11))
(
( Double my bet, I'll only take one card. )
- (set bet (* (var bet) 2))
+ (set bet (* bet 2))
(set has_doubled (true))
(jump_to acquire_card)
)
@@ -186,7 +177,7 @@
(local card new_card)
(local int player_score)
- (visit draw_a_card (ptr current_deck) (ptr new_card))
+ (pop_left! current_deck (ptr new_card))
(add! (var new_card) player.hand)
(visit compute_score (ptr player.hand) (ptr player_score))
@@ -201,24 +192,22 @@
(newline)
* The (var card.name), worth
(if_else (= (var card.number) 1)
- (text 1 or 11 points. )
- (text (var card.score) points. )
+ (text 1 or 11 points.)
+ (text (var card.score) points.)
)
)
)
(newline)
- (if (> (var player_score) 21)
- (
- (text_effect action_description
- The dealer looks disappointed.
- )
- (newline)
- A bust! What a shame...
- (newline)
- (visit money_loss (var bet))
- (done)
+ (if (> player_score 21)
+ (text_effect action_description
+ The dealer looks disappointed.
)
+ (newline)
+ A bust! What a shame...
+ (newline)
+ (visit money_loss (var bet))
+ (done)
)
(if (var has_doubled)
@@ -261,10 +250,10 @@
)
(newline)
- (while (< (var dealer_score) 17)
+ (while (< dealer_score 17)
(local card new_card)
- (visit draw_a_card (ptr current_deck) (ptr new_card))
+ (pop_left! current_deck (ptr new_card))
(add! (var new_card) dealer_hand)
(text_effect action_description
@@ -275,17 +264,15 @@
(visit compute_score (ptr dealer_hand) (ptr dealer_score))
)
- (if (> (var dealer_score) 21)
- (
- (text_effect action_description
- The dealer looks disappointed.
- )
- (newline)
- Ah. It would appear I have gone above the limit.
- (newline)
- (visit money_acquisition (var bet))
- (done)
+ (if (> dealer_score 21)
+ (text_effect action_description
+ The dealer looks disappointed.
)
+ (newline)
+ Ah. It would appear I have gone above the limit.
+ (newline)
+ (visit money_acquisition (var bet))
+ (done)
)
(visit compute_score (ptr player.hand) (ptr player_score))
@@ -295,13 +282,11 @@
(newline)
(if (= (var player_score) (var dealer_score))
- (
- A tie, then.
- (done)
- )
+ A tie, then.
+ (done)
)
- (if_else (> (var player_score) (var dealer_score))
+ (if_else (> player_score dealer_score)
(
Congratulation, you won.
(newline)