commit 9ade9bd524d1df57d5d19deae0e48cf425a822da
parent dd0ba4f191c334ec76db5e9a827ac0260c98117d
Author: neauoire <aliceffekt@gmail.com>
Date: Wed, 6 Apr 2022 11:24:43 -0700
(pig.tal) Added pig game in exercises
Diffstat:
1 file changed, 70 insertions(+), 0 deletions(-)
diff --git a/projects/examples/exercises/pig.tal b/projects/examples/exercises/pig.tal
@@ -0,0 +1,70 @@
+( Pig:
+ Each turn you roll a die and add the total to your points.
+ You can stop at any time and keep that total, or keep rolling.
+ If you ever roll a 1 you lose all the points you accrued. )
+
+|10 @Console &vector $2 &read $1 &pad $5 &write $1 &error $1
+
+|0000 @t $1 ( Total saved )
+
+|0100 @game ( -> )
+
+ #00 .t STZ
+ ;input-main .Console/vector DEO2
+ ,input-main/main JMP
+
+@roll ( -- dice )
+
+ [ LIT2 &r f793 ]
+ ( 5*R+35 ) #0005 MUL2 #0023 ADD2
+ ( R-R/6547*6547 ) DUP2 #1993 DIV2 #1993 MUL2 SUB2
+ DUP2 #c5 DEI2 ADD2 ,&r STR2 ADD ( mod ) #06 DIVk MUL SUB
+
+JMP2r
+
+@input-main ( -> )
+
+ .Console/read DEI
+ LIT '0 EQUk NIP ,&no JCN
+ LIT '1 EQUk NIP ,&yes JCN
+ ( ignore other inputs )
+ POP
+
+BRK
+ &no ( char -- )
+ POP ;score-txt ,pstr JSR .t LDZ ,pdec JSR ;byte-txt ,&halt JMP
+ &yes ( char -- )
+ POP ,roll JSR ;rolled-txt ,pstr JSR INCk ,pdec/d JSR DUP ,¬-bust JCN
+ &bust ( char -- )
+ POP ;bust-txt
+ &halt ( msg* -- )
+ ,pstr JSR #0a .Console/write DEO #010f DEO BRK
+ ¬-bust ( dice -- )
+ INC .t LDZ ADD .t STZ
+ &main ( -- )
+ ;total-txt ,pstr JSR .t LDZ ,pdec JSR ;roll-txt ,pstr JSR BRK
+
+@pdec ( value -- )
+
+ DUP #0a DIV ,&emit JSR
+ &d #0a DIVk MUL SUB ,&emit JSR
+ #0a .Console/write DEO
+
+JMP2r
+ &emit #30 ADD .Console/write DEO JMP2r
+
+@pstr ( str* -- )
+
+ &while
+ LDAk DUP LIT '_ EQU #3f MUL SUB .Console/write DEO
+ INC2 LDAk ,&while JCN
+ POP2
+
+JMP2r
+
+@total-txt "Your_current_total_is:_ $1
+@roll-txt "Would_you_like_to_roll?_(0_no,_1_yes)_ $1
+@score-txt "Your_score_is:_ $1
+@rolled-txt "You_rolled:_ $1
+@bust-txt "Busted! $1
+@byte-txt "Goodbye. $1