pig.tal (1555B)
1 ( Pig: 2 Each turn you roll a die and add the total to your points. 3 You can stop at any time and keep that total, or keep rolling. 4 If you ever roll a 1 you lose all the points you accrued. ) 5 6 |10 @Console &vector $2 &read $1 &pad $5 &write $1 &error $1 7 8 |0000 @t $1 ( Total saved ) 9 10 |0100 @game ( -> ) 11 12 #00 .t STZ 13 ;input-main .Console/vector DEO2 14 ,input-main/main JMP 15 16 @roll ( -- dice ) 17 18 [ LIT2 &r f793 ] 19 ( 5*R+35 ) #0005 MUL2 #0023 ADD2 20 ( R-R/6547*6547 ) DUP2 #1993 DIV2 #1993 MUL2 SUB2 21 DUP2 #c5 DEI2 ADD2 ,&r STR2 ADD ( mod ) #06 DIVk MUL SUB 22 23 JMP2r 24 25 @input-main ( -> ) 26 27 .Console/read DEI 28 LIT "0 EQUk NIP ,&no JCN 29 LIT "1 EQUk NIP ,&yes JCN 30 ( ignore other inputs ) 31 POP 32 33 BRK 34 &no ( char -- ) 35 POP ;score-txt ,pstr JSR .t LDZ ,pdec JSR ;byte-txt ,&halt JMP 36 &yes ( char -- ) 37 POP ,roll JSR ;rolled-txt ,pstr JSR INCk ,pdec/d JSR DUP ,¬-bust JCN 38 &bust ( char -- ) 39 POP ;bust-txt 40 &halt ( msg* -- ) 41 ,pstr JSR #0a .Console/write DEO #010f DEO BRK 42 ¬-bust ( dice -- ) 43 INC .t LDZ ADD .t STZ 44 &main ( -- ) 45 ;total-txt ,pstr JSR .t LDZ ,pdec JSR ;roll-txt ,pstr JSR BRK 46 47 @pdec ( value -- ) 48 49 DUP #0a DIV ,&emit JSR 50 &d #0a DIVk MUL SUB ,&emit JSR 51 #0a .Console/write DEO 52 53 JMP2r 54 &emit #30 ADD .Console/write DEO JMP2r 55 56 @pstr ( str* -- ) 57 58 &while 59 LDAk DUP LIT "_ EQU #3f MUL SUB .Console/write DEO 60 INC2 LDAk ,&while JCN 61 POP2 62 63 JMP2r 64 65 @total-txt "Your_current_total_is:_ $1 66 @roll-txt "Would_you_like_to_roll?_(0_no,_1_yes)_ $1 67 @score-txt "Your_score_is:_ $1 68 @rolled-txt "You_rolled:_ $1 69 @bust-txt "Busted! $1 70 @byte-txt "Goodbye. $1