summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-08-31 00:44:25 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-08-31 00:44:25 +0200
commit0ebd88472a6bd195f2f5ff34165c7fa79053105d (patch)
tree8488f24e7cb16c7ed589703361ce9604c317520a /data
parent23c5a3b1bd89e7a394a4cc4881e0764d601632c7 (diff)
Adds more list instr, Blackjack example.
Diffstat (limited to 'data')
-rw-r--r--data/examples/blackjack/cards.fate116
-rw-r--r--data/examples/blackjack/global.fate36
-rw-r--r--data/examples/blackjack/main.fate77
-rw-r--r--data/examples/blackjack/play.fate293
-rw-r--r--data/examples/blackjack/player.fate9
-rw-r--r--data/examples/blackjack/rules.fate5
-rw-r--r--data/tests/user_inputs.fate14
7 files changed, 550 insertions, 0 deletions
diff --git a/data/examples/blackjack/cards.fate b/data/examples/blackjack/cards.fate
new file mode 100644
index 0000000..2312f03
--- /dev/null
+++ b/data/examples/blackjack/cards.fate
@@ -0,0 +1,116 @@
+(fate_version 1)
+
+(declare_structure card
+ ( 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)
+
+(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))
+ )
+ of (var name)
+ )
+ )
+
+ (set c.score
+ (switch (var i)
+ (11 10)
+ (12 10)
+ (13 10)
+ (var i)
+ )
+ )
+
+ (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))
+)
+
+(define_sequence compute_score (((ptr (list card)) deck) ((ptr int) result))
+ (local int aces_count)
+ (local int maybe_better_score)
+
+ (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))
+ )
+ )
+
+ (while (> (var aces_count) 0)
+ (set maybe_better_score (+ (at result) 10))
+ (if (=< (var maybe_better_score) 21)
+ (set (at result) (var maybe_better_score))
+ )
+ (set aces_count (- (var aces_count) 1))
+ )
+)
diff --git a/data/examples/blackjack/global.fate b/data/examples/blackjack/global.fate
new file mode 100644
index 0000000..9c10c9f
--- /dev/null
+++ b/data/examples/blackjack/global.fate
@@ -0,0 +1,36 @@
+(fate_version 1)
+
+(require player.fate)
+
+(global player player)
+
+(global (lambda text (int)) coins_word)
+
+(set coins_word
+ (lambda ((int i))
+ (if_else (= (var i) 1)
+ (text a single coin )
+ (text (var i) coins )
+ )
+ )
+)
+
+(declare_text_effect action_description)
+
+(define_sequence money_acquisition ((int amount))
+ (set player.money (+ (var player.money) (var amount)))
+ (if (> (var amount) 0)
+ (text_effect action_description
+ You acquired (eval coins_word (var amount))!
+ )
+ )
+)
+
+(define_sequence money_loss ((int amount))
+ (set player.money (- (var player.money) (var amount)))
+ (if (> (var 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
new file mode 100644
index 0000000..0b5acf8
--- /dev/null
+++ b/data/examples/blackjack/main.fate
@@ -0,0 +1,77 @@
+(fate_version 1)
+
+(require player.fate)
+(require global.fate)
+(require cards.fate)
+(require rules.fate)
+(require play.fate)
+
+(local int original_amount)
+
+(set player.money 0)
+
+Welcome to Tonkadur's wonderful and totally original blackjack!
+Say, I don't think I've seen you before...
+No, no, I am sure I haven't, actually.
+(prompt_string player.name 1 64 What's your name, then?)
+Alright, (var player.name), well, since it's your first time here, let me give
+you some coins.
+Just between you and me, someone left those laying around, they aren't mine.
+
+(visit money_acquisition (+ 100 (rand 0 100)))
+(set original_amount (var player.money))
+
+Now, you're all set to go... unless you don't know how to play?
+
+(player_choice
+ (
+ ( As it happens, I do not. )
+ (visit rules_of_blackjack)
+ (text_effect action_description
+ You leave the counter and approach one of the tables.
+ )
+ (visit play_a_game)
+ )
+ (
+ ( I am familiar with BlackJack. )
+ (text_effect action_description
+ You leave the counter and approach one of the tables.
+ )
+ (visit play_a_game)
+ )
+)
+(text_effect action_description
+ As you leave the establishment, the receptionist notices you.
+)
+
+(cond
+ (
+ (=< (var player.money) (/ (var original_amount) 2))
+ Outch. I suppose all your luck was spent by getting these free coins.
+ )
+ (
+ (< (var player.money) (var 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))
+ Had a good day, I hope?
+ )
+ (
+ (< (var player.money) (* (var original_amount) 4))
+ Well! That was some fine play, if I do say so myself!
+ )
+ (
+ (true)
+ (var player.name)! How did you do that?! You have to teach me! I did give
+ you the tools of your success, so please?
+ )
+)
+
+(text_effect action_description
+ You walk out, having turned (eval coins_word (var original_amount)) into
+ (eval coins_word (var player.money)).
+)
+
+(end)
diff --git a/data/examples/blackjack/play.fate b/data/examples/blackjack/play.fate
new file mode 100644
index 0000000..4c2913f
--- /dev/null
+++ b/data/examples/blackjack/play.fate
@@ -0,0 +1,293 @@
+(fate_version 1)
+
+(require player.fate)
+(require global.fate)
+(require cards.fate)
+
+(global bool has_played)
+(global (list card) current_deck)
+(global (list card) dealer_hand)
+(global int bet)
+(global bool has_doubled)
+
+(set has_played (false))
+
+(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.
+ )
+ )
+ (if (= (var player.money) 0)
+ (
+ I am sorry, (var player.name), but you appear to have ran out of coins.
+ (done)
+ )
+ )
+ (prompt_integer bet 1 (var player.money) How much would you like to bet?)
+ (text_effect action_description
+ The dealer shuffles the cards and starts dealing.
+ )
+
+ (newline)
+
+ (visit generate_shuffled_deck (ptr current_deck))
+
+ (visit draw_a_card (ptr current_deck) (ptr new_card))
+ (add (var new_card) player.hand)
+
+ (text_effect action_description
+ You have been dealt the (var new_card.name).
+ (newline)
+ )
+
+
+ (visit draw_a_card (ptr current_deck) (ptr new_card))
+ (add (var new_card) dealer_hand)
+
+ (text_effect action_description
+ The dealer has drawn the (var new_card.name).
+ (newline)
+ )
+
+ (visit draw_a_card (ptr current_deck) (ptr new_card))
+ (add (var new_card) player.hand)
+
+ (text_effect action_description
+ You have been dealt the (var new_card.name).
+ (newline)
+ )
+
+ (newline)
+
+ (visit draw_a_card (ptr current_deck) (ptr new_card))
+ (add (var new_card) dealer_hand)
+
+ (text_effect action_description
+ The dealer has drawn a card, face down.
+ (newline)
+ )
+
+ (visit initial_draw)
+
+ (clear dealer_hand)
+
+ (newline)
+ Interesting. Would you like to go again?
+
+ (player_choice
+ (
+ ( Yes, please. )
+ Very well.
+ (newline)
+ (jump_to play_a_game)
+ )
+ (
+ ( No, thank you. )
+ It was a pleasure to play with you. Farewell.
+ (newline)
+ (done)
+ )
+ )
+)
+
+(define_sequence initial_draw ()
+ (local int dealer_score)
+ (local int player_score)
+
+ (visit compute_score (ptr dealer_hand) (ptr dealer_score))
+ (visit compute_score (ptr player.hand) (ptr player_score))
+
+ (if (= (var dealer_score) 21)
+ (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)
+ )
+ )
+ )
+
+ (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)
+ )
+ )
+
+ (player_choice
+ (
+ ( Another card, please. )
+ (set has_doubled (false))
+ (jump_to acquire_card)
+ )
+ (
+ ( I will stand. )
+ (jump_to resolve_dealer)
+ )
+ (if (and (>= (var player_score) 9) (<= (var player_score) 11))
+ (
+ ( Double my bet, I'll only take one card. )
+ (set bet (* (var bet) 2))
+ (set has_doubled (true))
+ (jump_to acquire_card)
+ )
+ )
+ )
+)
+
+(define_sequence acquire_card ()
+ (local card new_card)
+ (local int player_score)
+
+ (visit draw_a_card (ptr current_deck) (ptr new_card))
+ (add (var new_card) player.hand)
+
+ (visit compute_score (ptr player.hand) (ptr player_score))
+
+ (text_effect action_description
+ You have been dealt the (var new_card.name).
+ (newline)
+ Your hand is currently:
+ )
+ (foreach player.hand card
+ (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. )
+ )
+ )
+ )
+ (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 (var has_doubled)
+ (jump_to resolve_dealer)
+ )
+
+ (player_choice
+ (
+ ( Another card, please. )
+ (jump_to acquire_card)
+ )
+ (
+ ( This will do. I stand. )
+ (jump_to resolve_dealer)
+ )
+ )
+)
+
+(define_sequence resolve_dealer ()
+ (local int dealer_score)
+ (local int player_score)
+ (visit compute_score (ptr dealer_hand) (ptr dealer_score))
+
+ Very well. I shall now play my turn.
+ (newline)
+
+ (text_effect action_description
+ My current hand is:
+ (newline)
+ )
+ (foreach dealer_hand card
+ (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. )
+ )
+ )
+ )
+ (newline)
+
+ (while (< (var dealer_score) 17)
+ (local card new_card)
+
+ (visit draw_a_card (ptr current_deck) (ptr new_card))
+ (add (var new_card) dealer_hand)
+
+ (text_effect action_description
+ The dealer has drawn the (var new_card.name).
+ (newline)
+ )
+
+ (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)
+ )
+ )
+
+ (visit compute_score (ptr player.hand) (ptr player_score))
+
+ (var player_score) for you, against (var dealer_score) for me.
+
+ (newline)
+
+ (if (= (var player_score) (var dealer_score))
+ (
+ A tie, then.
+ (done)
+ )
+ )
+
+ (if_else (> (var player_score) (var dealer_score))
+ (
+ Congratulation, you won.
+ (newline)
+ (visit money_acquisition (var bet))
+ (done)
+ )
+ (
+ It would appear I have won this game.
+ (newline)
+ (visit money_loss (var bet))
+ (done)
+ )
+ )
+)
diff --git a/data/examples/blackjack/player.fate b/data/examples/blackjack/player.fate
new file mode 100644
index 0000000..7d8b947
--- /dev/null
+++ b/data/examples/blackjack/player.fate
@@ -0,0 +1,9 @@
+(fate_version 1)
+
+(require cards.fate)
+
+(define_structure player
+ (string name)
+ (int money)
+ ((list card) hand)
+)
diff --git a/data/examples/blackjack/rules.fate b/data/examples/blackjack/rules.fate
new file mode 100644
index 0000000..3e4c378
--- /dev/null
+++ b/data/examples/blackjack/rules.fate
@@ -0,0 +1,5 @@
+(fate_version 1)
+
+(define_sequence rules_of_blackjack ()
+ TODO
+)
diff --git a/data/tests/user_inputs.fate b/data/tests/user_inputs.fate
new file mode 100644
index 0000000..d238c7f
--- /dev/null
+++ b/data/tests/user_inputs.fate
@@ -0,0 +1,14 @@
+(fate_version 1)
+
+(local int i)
+
+(prompt_integer i 0 100 How likely is this test to fail?)
+Did you say (var i)? That sounds
+(ifelse (=< (var i) 50) ( unreasable ) ( very reasonable indeed)).
+
+(local string name)
+(prompt_string name 0 64 Oh, and what's your name?)
+
+I see, (var name), you might be on to something there...
+
+(end)