Files
basic-computer-games/56_Life_for_Two/javascript/lifefortwo.js
Chris Reuter d26dbf036a Removed spaces from top-level directory names.
Spaces tend to cause annoyances in a Unix-style shell environment.
This change fixes that.
2021-11-21 18:30:21 -05:00

210 lines
6.0 KiB
JavaScript

// LIFE FOR TWO
//
// 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 na = [];
var ka = [, 3,102,103,120,130,121,112,111,12,
21,30,1020,1030,1011,1021,1003,1002,1012];
var aa = [,-1,0,1,0,0,-1,0,1,-1,-1,1,-1,-1,1,1,1];
var xa = [];
var ya = [];
var j;
var k;
var m2;
var m3;
function show_data()
{
k = 0;
m2 = 0;
m3 = 0;
for (j = 0; j <= 6; j++) {
print("\n");
for (k = 0; k <= 6; k++) {
if (j == 0 || j == 6) {
if (k == 6)
print(" 0 ");
else
print(" " + k + " ");
} else if (k == 0 || k == 6) {
if (j == 6)
print(" 0\n");
else
print(" " + j + " ");
} else {
if (na[j][k] >= 3) {
for (o1 = 1; o1 <= 18; o1++) {
if (na[j][k] == ka[o1])
break;
}
if (o1 <= 18) {
if (o1 <= 9) {
na[j][k] = 100;
m2++;
print(" * ");
} else {
na[j][k] = 1000;
m3++;
print(" # ");
}
} else {
na[j][k] = 0;
print(" ");
}
} else {
na[j][k] = 0;
print(" ");
}
}
}
}
}
function process_board()
{
for (j = 1; j <= 5; j++) {
for (k = 1; k <= 5; k++) {
if (na[j][k] > 99) {
b = 1;
if (na[j][k] > 999)
b = 10;
for (o1 = 1; o1 <= 15; o1 += 2) {
na[j + aa[o1]][k + aa[o1 + 1]] = na[j + aa[o1]][k + aa[o1 + 1]] + b;
}
}
}
}
show_data();
}
// Main program
async function main()
{
print(tab(33) + "LIFE2\n");
print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n");
print("\n");
print("\n");
print("\n");
print(tab(10) + "U.B. LIFE GAME\n");
m2 = 0;
m3 = 0;
for (j = 0; j <= 6; j++) {
na[j] = [];
for (k = 0; k <= 6; k++)
na[j][k] = 0;
}
for (b = 1; b <= 2; b++) {
p1 = (b == 2) ? 30 : 3;
print("\n");
print("PLAYER " + b + " - 3 LIVE PIECES.\n");
for (k1 = 1; k1 <= 3; k1++) {
while (1) {
print("X,Y\n");
str = await input();
ya[b] = parseInt(str);
xa[b] = parseInt(str.substr(str.indexOf(",") + 1));
if (xa[b] > 0 && xa[b] < 6 && ya[b] > 0 && ya[b] < 5 && na[xa[b]][ya[b]] == 0)
break;
print("ILLEGAL COORDS. RETYPE\n");
}
if (b != 1) {
if (xa[1] == xa[2] && ya[1] == ya[2]) {
print("SAME COORD. SET TO 0\n");
na[xa[b] + 1][ya[b] + 1] = 0;
b = 99;
}
}
na[xa[b]][ya[b]] = p1;
}
}
show_data();
while (1) {
print("\n");
process_board();
if (m2 == 0 && m3 == 0) {
print("\n");
print("A DRAW\n");
break;
}
if (m3 == 0) {
print("\n");
print("PLAYER 1 IS THE WINNER\n");
break;
}
if (m2 == 0) {
print("\n");
print("PLAYER 2 IS THE WINNER\n");
break;
}
for (b = 1; b <= 2; b++) {
print("\n");
print("\n");
print("PLAYER " + b + " ");
while (1) {
print("X,Y\n");
str = await input();
ya[b] = parseInt(str);
xa[b] = parseInt(str.substr(str.indexOf(",") + 1));
if (xa[b] > 0 && xa[b] < 6 && ya[b] > 0 && ya[b] < 5 && na[xa[b]][ya[b]] == 0)
break;
print("ILLEGAL COORDS. RETYPE\n");
}
if (b != 1) {
if (xa[1] == xa[2] && ya[1] == ya[2]) {
print("SAME COORD. SET TO 0\n");
na[xa[b] + 1][ya[b] + 1] = 0;
b = 99;
}
}
if (b == 99)
break;
}
if (b <= 2) {
na[x[1]][y[1]] = 100;
na[x[2]][y[2]] = 1000;
}
}
}
main();