Ported EVENWINS to Javascript

This commit is contained in:
nanochess
2021-03-09 20:56:10 -06:00
parent ba70ff6534
commit 14944781b8
4 changed files with 367 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
<html>
<head>
<title>EVEN WINS</title>
</head>
<body>
<pre id="output" style="font-size: 12pt;"></pre>
<script src="evenwins.js"></script>
</body>
</html>

View File

@@ -0,0 +1,197 @@
// 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 ma = [];
var ya = [];
// Main program
async function main()
{
print(tab(31) + "EVEN WINS\n");
print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n");
print("\n");
print("\n");
y1 = 0;
m1 = 0;
print(" THIS IS A TWO PERSON GAME CALLED 'EVEN WINS.'\n");
print("TO PLAY THE GAME, THE PLAYERS NEED 27 MARBLES OR\n");
print("OTHER OBJECTS ON A TABLE.\n");
print("\n");
print("\n");
print(" THE 2 PLAYERS ALTERNATE TURNS, WITH EACH PLAYER\n");
print("REMOVING FROM 1 TO 4 MARBLES ON EACH MOVE. THE GAME\n");
print("ENDS WHEN THERE ARE NO MARBLES LEFT, AND THE WINNER\n");
print("IS THE ONE WITH AN EVEN NUMBER OF MARBLES.\n");
print("\n");
print("\n");
print(" THE ONLY RULES ARE THAT (1) YOU MUST ALTERNATE TURNS,\n");
print("(2) YOU MUST TAKE BETWEEN 1 AND 4 MARBLES EACH TURN,\n");
print("AND (3) YOU CANNOT SKIP A TURN.\n");
print("\n");
print("\n");
print("\n");
while (1) {
print(" TYPE A '1' IF YOU WANT TO GO FIRST, AND TYPE\n");
print("A '0' IF YOU WANT ME TO GO FIRST.\n");
c = parseInt(await input());
print("\n");
if (c != 0) {
t = 27;
print("\n");
print("\n");
print("\n");
print("TOTAL= " + t + "\n");
print("\n");
print("\n");
print("WHAT IS YOUR FIRST MOVE");
m = 0;
} else {
t = 27;
m = 2;
print("\n");
print("TOTAL= " + t + "\n");
print("\n");
m1 += m;
t -= m;
}
while (1) {
if (m) {
print("I PICK UP " + m + " MARBLES.\n");
if (t == 0)
break;
print("\n");
print("TOTAL= " + t + "\n");
print("\n");
print(" AND WHAT IS YOUR NEXT MOVE, MY TOTAL IS " + m1 + "\n");
}
while (1) {
y = parseInt(await input());
print("\n");
if (y < 1 || y > 4) {
print("\n");
print("THE NUMBER OF MARBLES YOU MUST TAKE BE A POSITIVE\n");
print("INTEGER BETWEEN 1 AND 4.\n");
print("\n");
print(" WHAT IS YOUR NEXT MOVE?\n");
print("\n");
} else if (y > t) {
print(" YOU HAVE TRIED TO TAKE MORE MARBLES THAN THERE ARE\n");
print("LEFT. TRY AGAIN.\n");
} else {
break;
}
}
y1 += y;
t -= y;
if (t == 0)
break;
print("TOTAL= " + t + "\n");
print("\n");
print("YOUR TOTAL IS " + y1 + "\n");
if (t < 0.5)
break;
r = t % 6;
if (y1 % 2 != 0) {
if (t >= 4.2) {
if (r <= 3.4) {
m = r + 1;
m1 += m;
t -= m;
} else if (r < 4.7 || r > 3.5) {
m = 4;
m1 += m;
t -= m;
} else {
m = 1;
m1 += m;
t -= m;
}
} else {
m = t;
t -= m;
print("I PICK UP " + m + " MARBLES.\n");
print("\n");
print("TOTAL = 0\n");
m1 += m;
break;
}
} else {
if (r < 1.5 || r > 5.3) {
m = 1;
m1 += m;
t -= m;
} else {
m = r - 1;
m1 += m;
t -= m;
if (t < 0.2) {
print("I PICK UP " + m + " MARBLES.\n");
print("\n");
break;
}
}
}
}
print("THAT IS ALL OF THE MARBLES.\n");
print("\n");
print(" MY TOTAL IS " + m1 + ", YOUR TOTAL IS " + y1 +"\n");
print("\n");
if (m1 % 2 != 0) {
print(" YOU WON. DO YOU WANT TO PLAY\n");
} else {
print(" I WON. DO YOU WANT TO PLAY\n");
}
print("AGAIN? TYPE 1 FOR YES AND 0 FOR NO.\n");
a1 = parseInt(await input());
if (a1 == 0)
break;
m1 = 0;
y1 = 0;
}
print("\n");
print("OK. SEE YOU LATER\n");
}
main();

View File

@@ -0,0 +1,9 @@
<html>
<head>
<title>GAME OF EVEN WINS</title>
</head>
<body>
<pre id="output" style="font-size: 12pt;"></pre>
<script src="gameofevenwins.js"></script>
</body>
</html>

View File

@@ -0,0 +1,152 @@
// 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();