Rock-paper-scissors: Difference between revisions

m
→‎{{header|Sidef}}: code simplifications
m (→‎{{header|REXX}}: removed STYLE from the PRE html tag.)
m (→‎{{header|Sidef}}: code simplifications)
Line 3,817:
<lang ruby>const rps = %w(r p s);
 
varconst msg = [
"Rock breaks scissors",
"Paper covers rock",
Line 3,823:
];
 
say <<"EOT";
[
"\n>> Rock Paper Scissors <<\n",
"** Enter 'r', 'p', or 's' as your play.",
"** Enter 'q' to exit the game.",
"** Running score shown as <your wins>:<my wins>\n",
EOT
].map {_.say};
 
var plays = 0;
var aScore = 0;
var pScore = 0;
var pi = ''; # player input
var pcf = [0,0,0]; # pcf = player choice frequency
var aChoice = (3.rand.int); # ai choice for first play is completely random
 
loop {
{
var pi = Sys.scanln("Play: ".print);
pi == 'q' && (break);
 
pi = Sys.scanln; # get player choice
pi == 'q' && (break);
 
var pChoice = rps.indexWhere{_ == pi};
 
if (var block = __BLOCK__; pChoice == -1) {
STDERR.print("Invalid input!\n".warn);
block.runnext;
}
 
Line 3,856 ⟶ 3,853:
">> My play: %-8s".printf(rps[aChoice]);
 
given ((aChoice - pChoice + 3 ) % 3)
when (0) do {
say "Tie.".say;
}
when (1) do {
"%-*s %s".printlnf(30, msg[aChoice], 'My point');
aScore++;
}
when (2) do {
"%-*s %s".printlnf(30, msg[pChoice], 'Your point');
pScore++;
};
end;
 
# show score
"%-6s".printf("%d:%d".sprintf % (pScore, aScore));
 
# compute ai choice for next play
switch (var rn = (plays.rand.int))
case (rn < pcf[0]) do {
aChoice = 1;
}
case (pcf[0]+pcf[1] > rn) do {
aChoice = 2;
}
default {
aChoice = 0;
};
}.run;</lang>
end;
 
__BLOCK__.run;
}.run;</lang>
 
'''Sample run:'''
2,747

edits