Rock-paper-scissors: Difference between revisions

Content added Content deleted
Line 185: Line 185:
computer_play(record plays, record beats)
computer_play(record plays, record beats)
{
{
integer a, total;
integer a, c, total;
text s;
text s;


total = r_q_integer(plays, "rock") + r_q_integer(plays, "paper")
total = plays["rock"] + plays["paper"] + plays["scissors"];
+ r_q_integer(plays, "scissors");
a = drand(total - 1);
a = drand(total - 1);
r_first(plays, s);
for (s, c in plays) {
do {
if (a < c) {
if (a < r_q_integer(plays, s)) {
break;
break;
}
}
a -= plays[s];
a -= c;
}
} while (rsk_greater(plays, s, s));


return r_q_text(beats, s);
beats[s];
}
}


Line 210: Line 208:
text s;
text s;


computer = 0;
computer = human = 0;
human = 0;


f_affix(f, "/dev/stdin");
f.stdin;


r_put(beats, "rock", "paper");
beats["rock"] = "paper";
r_put(beats, "paper", "scissors");
beats["paper"] = "scissors";
r_put(beats, "scissors", "rock");
beats["scissors"] = "rock";


r_put(plays, "rock", 1);
plays["rock"] = 1;
r_put(plays, "paper", 1);
plays["paper"] = 1;
r_put(plays, "scissors", 1);
plays["scissors"] = 1;


while (1) {
while (1) {
o_text("Your choice [rock/paper/scissors]:\n");
o_text("Your choice [rock/paper/scissors]:\n");
if (f_line(f, s) == -1) {
if (f.line(s) == -1) {
break;
break;
}
}


if (!r_key(plays, s)) {
if (!plays.key(s)) {
o_text("Invalid choice, try again\n");
o_text("Invalid choice, try again\n");
} else {
} else {
Line 238: Line 235:
o_form("Human: ~, Computer: ~\n", s, c);
o_form("Human: ~, Computer: ~\n", s, c);


if (!compare(s, c)) {
if (s == c) {
o_text("Draw\n");
o_text("Draw\n");
} elif (!compare(c, beats[s])) {
} elif (c == beats[s]) {
computer += 1;
computer += 1;
o_text("Computer wins\n");
o_text("Computer wins\n");
Line 248: Line 245:
}
}


r_up(plays, s);
plays.up(s);


o_form("Score: Human: ~, Computer: ~\n", human, computer);
o_form("Score: Human: ~, Computer: ~\n", human, computer);