( 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