Jump to content

Nim game: Difference between revisions

1,933 bytes added ,  5 years ago
add javascript (browser)
(add javascript (browser))
Line 420:
Computer wins!
</pre>
 
=={{header|Javascript}}==
=== Browser Version ===
This is the easy but dirty way - with prompt for input, and console.log for output. The Nim class was structured so that input and output could be customized, for example to use HTML DOM elements for in and out, instead of the terminal.
<lang Javascript>
class Nim {
constructor(tokens, printFun) {
this.startTokens = tokens;
this.tokens = tokens;
this.printFun = printFun;
}
 
playerTurn(take) {
take = Math.round(take);
 
if (take < 1 || take > 3) {
this.printFun("take must be between 1 and 3.\n")
return false;
}
this.tokens -= take;
this.printFun("Player takes " + take + " tokens.");
this.printRemaining()
 
if (this.tokens === 0) {
this.printFun("Player wins!\n");
}
return true;
}
 
computerTurn() {
let take = this.tokens % 4;
this.tokens -= take;
this.printFun("Computer takes " + take + " tokens.");
this.printRemaining();
 
if (this.tokens === 0) {
this.printFun("Computer wins.\n");
}
 
}
 
printRemaining() {
this.printFun(this.tokens + " tokens remaining.\n");
}
}
 
 
let game = new Nim(12, console.log);
while (true) {
if (game.playerTurn(parseInt(prompt("How many tokens would you like to take?")))){
game.computerTurn();
}
if (game.tokens == 0) {
break;
}
}
</lang>
 
{{out}}
Sample game:
<pre>
(prompt) How many tokens would you like to take? 2
Player takes 2 tokens.
10 tokens remaining.
 
Computer takes 2 tokens.
8 tokens remaining.
 
(prompt) How many tokens would you like to take? 4
take must be between 1 and 3.
 
(prompt) How many tokens would you like to take? 0
take must be between 1 and 3.
 
(prompt) How many tokens would you like to take? 3
Player takes 3 tokens.
5 tokens remaining.
 
Computer takes 1 tokens.
4 tokens remaining.
 
(prompt) How many tokens would you like to take? 1
Player takes 1 tokens.
3 tokens remaining.
 
Computer takes 3 tokens.
0 tokens remaining.
 
Computer wins.
</pre>
 
 
 
=={{header|Lua}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.