mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-22 23:26:40 -08:00
153 lines
4.8 KiB
JavaScript
153 lines
4.8 KiB
JavaScript
// GAME OF EVEN WINS
|
|
//
|
|
// Converted from BASIC to Javascript by Oscar Toledo G. (nanochess)
|
|
//
|
|
|
|
function print(str)
|
|
{
|
|
document.getElementById("output").appendChild(document.createTextNode(str));
|
|
}
|
|
|
|
function input()
|
|
{
|
|
var input_element;
|
|
var input_str;
|
|
|
|
return new Promise(function (resolve) {
|
|
input_element = document.createElement("INPUT");
|
|
|
|
print("? ");
|
|
input_element.setAttribute("type", "text");
|
|
input_element.setAttribute("length", "50");
|
|
document.getElementById("output").appendChild(input_element);
|
|
input_element.focus();
|
|
input_str = undefined;
|
|
input_element.addEventListener("keydown", function (event) {
|
|
if (event.keyCode == 13) {
|
|
input_str = input_element.value;
|
|
document.getElementById("output").removeChild(input_element);
|
|
print(input_str);
|
|
print("\n");
|
|
resolve(input_str);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function tab(space)
|
|
{
|
|
var str = "";
|
|
while (space-- > 0)
|
|
str += " ";
|
|
return str;
|
|
}
|
|
|
|
var r = [[], []];
|
|
|
|
// Main program
|
|
async function main()
|
|
{
|
|
print(tab(28) + "GAME OF EVEN WINS\n");
|
|
print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n");
|
|
print("\n");
|
|
print("\n");
|
|
print("DO YOU WANT INSTRUCTIONS (YES OR NO)");
|
|
str = await input();
|
|
print("\n");
|
|
if (str != "NO") {
|
|
print("THE GAME IS PLAYED AS FOLLOWS:\n");
|
|
print("\n");
|
|
print("AT THE BEGINNING OF THE GAME, A RANDOM NUMBER OF CHIPS ARE\n");
|
|
print("PLACED ON THE BOARD. THE NUMBER OF CHIPS ALWAYS STARTS\n");
|
|
print("AS AN ODD NUMBER. ON EACH TURN, A PLAYER MUST TAKE ONE,\n");
|
|
print("TWO, THREE, OR FOUR CHIPS. THE WINNER IS THE PLAYER WHO\n");
|
|
print("FINISHES WITH A TOTAL NUMBER OF CHIPS THAT IS EVEN.\n");
|
|
print("THE COMPUTER STARTS OUT KNOWING ONLY THE RULES OF THE\n");
|
|
print("GAME. IT GRADUALLY LEARNS TO PLAY WELL. IT SHOULD BE\n");
|
|
print("DIFFICULT TO BEAT THE COMPUTER AFTER TWENTY GAMES IN A ROW.\n");
|
|
print("TRY IT!!!!\n");
|
|
print("\n");
|
|
print("TO QUIT AT ANY TIME, TYPE A '0' AS YOUR MOVE.\n");
|
|
print("\n");
|
|
}
|
|
l = 0;
|
|
b = 0;
|
|
for (i = 0; i <= 5; i++) {
|
|
r[1][i] = 4;
|
|
r[0][i] = 4;
|
|
}
|
|
while (1) {
|
|
a = 0;
|
|
b = 0;
|
|
e = 0;
|
|
l = 0;
|
|
p = Math.floor((13 * Math.random() + 9) / 2) * 2 + 1;
|
|
while (1) {
|
|
if (p == 1) {
|
|
print("THERE IS 1 CHIP ON THE BOARD.\n");
|
|
} else {
|
|
print("THERE ARE " + p + " CHIPS ON THE BOARD.\n");
|
|
}
|
|
e1 = e;
|
|
l1 = l;
|
|
e = a % 2;
|
|
l = p % 6;
|
|
if (r[e][l] < p) {
|
|
m = r[e][l];
|
|
if (m <= 0) {
|
|
m = 1;
|
|
b = 1;
|
|
break;
|
|
}
|
|
p -= m;
|
|
if (m == 1)
|
|
print("COMPUTER TAKES 1 CHIP LEAVING " + p + "... YOUR MOVE");
|
|
else
|
|
print("COMPUTER TAKES " + m + " CHIPS LEAVING " + p + "... YOUR MOVE");
|
|
b += m;
|
|
while (1) {
|
|
m = parseInt(await input());
|
|
if (m == 0)
|
|
break;
|
|
if (m < 1 || m > 4 || m > p) {
|
|
print(m + " IS AN ILLEGAL MOVE ... YOUR MOVE");
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
if (m == 0)
|
|
break;
|
|
if (m == p)
|
|
break;
|
|
p -= m;
|
|
a += m;
|
|
} else {
|
|
if (p == 1) {
|
|
print("COMPUTER TAKES 1 CHIP.\n");
|
|
} else {
|
|
print("COMPUTER TAKES " + p + " CHIPS.\n");
|
|
}
|
|
r[e][l] = p;
|
|
b += p;
|
|
break;
|
|
}
|
|
}
|
|
if (m == 0)
|
|
break;
|
|
if (b % 2 != 0) {
|
|
print("GAME OVER ... YOU WIN!!!\n");
|
|
print("\n");
|
|
if (r[e][l] != 1) {
|
|
r[e][l]--;
|
|
} else if (r[e1][l1] != 1) {
|
|
r[e1][l1]--;
|
|
}
|
|
} else {
|
|
print("GAME OVER ... I WIN!!!\n");
|
|
print("\n");
|
|
}
|
|
}
|
|
}
|
|
|
|
main();
|