Jump to content

Rock-paper-scissors: Difference between revisions

m
Added Sidef
m (→‎{{header|Lasso}}: remove extraneous indenting)
m (Added Sidef)
Line 2,934:
Your move? [R]ock, [P]aper, [S]cissors: ^D
Bye!
</pre>
 
=={{header|Sidef}}==
<lang ruby>const rps = qw(r p s);
 
var msg = [
"Rock breaks scissors",
"Paper covers rock",
"Scissors cut paper",
];
 
[
"\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",
].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
 
{
"Play: ".print;
 
pi = Sys.scanln; # get player choice
pi == 'q' && (break);
 
var pChoice = rps.indexWhere{_ == pi};
 
if (var block = __BLOCK__; pChoice == -1) {
"Invalid input!\n".warn;
block.run;
}
 
pcf[pChoice]++;
plays++;
 
# show result of play
">> My play: %-8s".printf(rps[aChoice]);
 
given ((aChoice - pChoice + 3 ) % 3)
when (0) do {
"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;
}
end;
 
__BLOCK__.run;
}.run;</ruby>
 
'''Output:'''
<pre>
 
>> Rock Paper Scissors <<
 
** Enter 'r', 'p', or 's' as your play.
** Enter 'q' to exit the game.
** Running score shown as <your wins>:<my wins>
 
Play: r
>> My play: s Rock breaks scissors Your point
1:0 Play: p
>> My play: p Tie.
1:0 Play: r
>> My play: s Rock breaks scissors Your point
2:0 Play: s
>> My play: p Scissors cut paper Your point
3:0 Play: r
>> My play: p Paper covers rock My point
3:1 Play: p
>> My play: r Paper covers rock Your point
4:1 Play: q
</pre>
 
2,747

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.