; Simple textscreen version of Scissors-Paper-Rock game TO PLAY.GAME GET.USER.INPUT WHILE [NOT MEMBER? :PLAYER.CHOICE (SE "Q :CHOICES)] [GET.USER.INPUT] TYPE :PLAYER.CHOICE IF EQUAL? "Q :PLAYER.CHOICE [ (PRINT) (PRINT "|You won| :WINS "|games.|) (PRINT "|You lost| :LOSSES "|games.|) (PRINT "|We tied| :TIES "|games.|) STOP ] MAKE "MY.CHOICE PICK :CHOICES TYPE "| | TYPE :MY.CHOICE TYPE "| | MAKE "GAME WORD :PLAYER.CHOICE :MY.CHOICE SWITCH :GAME [ [SS PP RR] [PRINT [|-- tie game|] MAKE "TIES 1 + :TIES] [SP] [PRINT [|-- you win -- scissors cuts paper|] MAKE "WINS 1 + :WINS] [PR] [PRINT [|-- you win -- paper wraps rock|] MAKE "WINS 1 + :WINS] [RS] [PRINT [|-- you win -- rock smashes scissors|] MAKE "WINS 1 + :WINS] [PS] [PRINT [|-- you lose -- paper cut by scissors|] MAKE "LOSSES 1 + :LOSSES] [RP] [PRINT [|-- you lose -- rock wrapped by paper|] MAKE "LOSSES 1 + :LOSSES] [SR] [PRINT [|-- you lose -- scissors smashed by rock|] MAKE "LOSSES 1 + :LOSSES] ] WAIT 2000 PLAY.GAME END TO GET.USER.INPUT DISPLAY.PROMPT MAKE "PLAYER.CHOICE UPPERCASE READCHAR END TO DISPLAY.PROMPT CT PRINT [|Scissors - Paper - Rock Game|] PRINT [|Scissors cuts paper - Paper wraps rock - Rock smashes scissors|] PRINT [|Press S P R or Q to quit|] TYPE "|SPR: | END TO SPR MAKE "WINS 0 MAKE "LOSSES 0 MAKE "TIES 0 MAKE "CHOICES [S P R] CLEARTEXT PLAY.GAME END ; SWITCH simulates the CASE or SWITCH statement found in other languages ; The actual CASEs are set up in the call to SWITCH. For example: ; ; SWITCH :CHOICE [ ; [1 2 3] [PRINT :CHOICE] ; [4 5 6] [FD 100] ; [7 8 9] [BK 200] ; [ELSE ] [PRINT [|No matching CASES|] ; ] ; TO SWITCH :VALUE :CASES IF EMPTY? :CASES STOP IF MEMBER? :VALUE FIRST :CASES \ THEN RUN FIRST BUTFIRST :CASES STOP IF EQUAL? "ELSE FIRST FIRST :CASES \ THEN RUN FIRST BUTFIRST :CASES STOP SWITCH :VALUE BUTFIRST BUTFIRST :CASES END SPR