Rock-paper-scissors: Difference between revisions

m
→‎{{header|REXX}}: added/changed comments and whitespace, used a template for the output.
m (→‎extended, 5 choices: added highlighting to the REXX preamble (the five choices).)
m (→‎{{header|REXX}}: added/changed comments and whitespace, used a template for the output.)
Line 3,888:
::*   allows the human player to   QUIT   at any time
::*   keeps track of the human player's responses   (to hopefully make future computer winning choices)
::*   uses proper "English",     I.E.:         ''rock breaks scissors''
<lang rexx>/*REXX program plays rock─paper─scissors with a human; tracks what human tends to use. */
!= '────────'; err=! '***error***'; @.=0 /*some constants for this program. */
prompt= ! 'Please enter one of: Rock Paper Scissors (or Quit)'
$.p='paper' ; $.s='scissors'; $.r='rock' /*list of the choices in this program. */
t.p=$.r ; t.s=$.p ; t.r=$.s /*thingys that beats stuff. */
Line 3,897:
b.p='covers'; b.s='cuts' ; b.r='breaks' /*verbs: how the choice wins. */
 
do forever; say; say prompt; say say /*prompt the CBLF; then get a response.*/
c=word($.p $.s $.r, random(1, 3) ) /*choose the computer's first pick. */
m=max(@.r, @.p, @.s); c=w.r /*prepare to examine the choice history*/
if @.p==m then c=w.p /*emulate JC's: The Amazing Karnac. */
if @.s==m then c=w.s /* " " " " " */
c1=left(c, 1) /*C1 is used for faster comparing. */
parse pull u; a=strip(u) /*get the CBLF's choice/pick (answer). */
upper a c1 ; a1=left(a, 1) /*uppercase choices, get 1st character.*/
ok=0 /*indicate answer isn't OK (so far). */
select /*process/verify the CBLF's choice. */
Line 3,918:
if \ok then iterate /*answer ¬OK? Then get another choice.*/
@.a1=@.a1+1 /*keep a history of the CBLF's choices.*/
say ! 'computer chose: ' c
if a1==c1 c1 then do; say ! 'draw.'; iterate; end
if $.a1==t.c1 then say ! 'the computer wins. ' ! $.c1 b.c1 $.a1
else say ! 'you win! ' ! $.a1 b.a1 $.c1
end /*forever*/ /*stick a fork in it, we're all done. */</lang>
end /*forever*/
'''{{out|output''' |text=&nbsp; with various responses from the user &nbsp; (output shown is a screen scraping):}}
/*stick a fork in it, we're all done. */</lang>
'''output''' &nbsp; with various responses from the user &nbsp; (output shown is a screen scraping):
<pre>
──────── Please enter one of: Rock Paper Scissors (or Quit)
Line 3,979 ⟶ 3,978:
whom.1=! 'the computer wins. ' !; whom.2=! "you win! " !; win=words(t.p)
 
do forever; say; say prompt; say say /*prompt CBLF; then get a response. */
c=word($.p $.s $.r $.L $.v, random(1, 5)) ) /*the computer's first choice/pick. */
m=max(@.r,@.p,@.s,@.L,@.v) /*used in examining CBLF's history. */
if @.p==m then c=word(w.p, random(1, 2)) ) /*emulate JC's The Amazing Karnac. */
if @.s==m then c=word(w.s, random(1, 2)) ) /* " " " " " */
if @.r==m then c=word(w.r, random(1, 2)) ) /* " " " " " */
if @.L==m then c=word(w.L, random(1, 2)) ) /* " " " " " */
if @.v==m then c=word(w.v, random(1, 2)) ) /* " " " " " */
c1=left(c, 1) /*C1 is used for faster comparing. */
parse pull u; a=strip(u) a=strip(u) /*obtain the CBLF's choice/pick. */
upper a c1 ; a1=left(a,1) a1=left(a, 1) /*uppercase the choices, get 1st char. */
ok=0 /*indicate answer isn't OK (so far). */
select /* [↓] process the CBLF's choice/pick.*/
Line 3,998 ⟶ 3,997:
abbrev('ROCK', a) |,
abbrev('PAPER', a) |,
abbrev('VulcanVULCAN', a) |,
abbrev('SPOCK', a,2) | ,
abbrev('SCISSORS',a,2) then ok=1 /*it's a valid choice for the human. */
otherwise say err 'you entered a bad choice: ' u
Line 4,005 ⟶ 4,004:
 
if \ok then iterate /*answer ¬OK? Then get another choice.*/
@.a1= @.a1 +1 1 /*keep a history of the CBLF's choices.*/
say ! 'computer chose: ' c
if a1==c1 then say ! 'draw.' /*Oh rats! The contest ended up a draw*/
Line 4,011 ⟶ 4,010:
if who==2 then parse value a1 c1 with c1 a1
do j=1 for win /*see who won. */
if $.a1 \== word(t.c1, j) then iterate /*not this 'un. */
say whom.who $.c1 word(b.c1, j) $.a1 /*notify winner.*/
leave /*leave J loop.*/
end /*j*/
end /*who*/
end /*forever*/ /*stick a fork in it, we're all done. */</lang>
end /*forever*/
{{out|output|text=&nbsp; is similar to the 1<sup>st</sup> REXX version.}} <br><br>
/*stick a fork in it, we're all done. */</lang>
 
=={{header|Ruby}}==