mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-25 04:15:45 -08:00
Ported ONE CHECK to Javascript
This commit is contained in:
9
67 One Check/javascript/onecheck.html
Normal file
9
67 One Check/javascript/onecheck.html
Normal file
@@ -0,0 +1,9 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>ONE CHECK</title>
|
||||
</head>
|
||||
<body>
|
||||
<pre id="output" style="font-size: 12pt;"></pre>
|
||||
<script src="onecheck.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
151
67 One Check/javascript/onecheck.js
Normal file
151
67 One Check/javascript/onecheck.js
Normal file
@@ -0,0 +1,151 @@
|
||||
// ONE CHECK
|
||||
//
|
||||
// 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 a = [];
|
||||
|
||||
// Main program
|
||||
async function main()
|
||||
{
|
||||
print(tab(30) + "ONE CHECK\n");
|
||||
print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n");
|
||||
print("\n");
|
||||
print("\n");
|
||||
print("\n");
|
||||
for (i = 0; i <= 64; i++)
|
||||
a[i] = 0;
|
||||
print("SOLITAIRE CHECKER PUZZLE BY DAVID AHL\n");
|
||||
print("\n");
|
||||
print("48 CHECKERS ARE PLACED ON THE 2 OUTSIDE SPACES OF A\n");
|
||||
print("STANDARD 64-SQUARE CHECKERBOARD. THE OBJECT IS TO\n");
|
||||
print("REMOVE AS MANY CHECKERS AS POSSIBLE BY DIAGONAL JUMPS\n");
|
||||
print("(AS IN STANDARD CHECKERS). USE THE NUMBERED BOARD TO\n");
|
||||
print("INDICATE THE SQUARE YOU WISH TO JUMP FROM AND TO. ON\n");
|
||||
print("THE BOARD PRINTED OUT ON EACH TURN '1' INDICATES A\n");
|
||||
print("CHECKER AND '0' AN EMPTY SQUARE. WHEN YOU HAVE NO\n");
|
||||
print("POSSIBLE JUMPS REMAINING, INPUT A '0' IN RESPONSE TO\n");
|
||||
print("QUESTION 'JUMP FROM ?'\n");
|
||||
print("\n");
|
||||
print("HERE IS THE NUMERICAL BOARD:\n");
|
||||
print("\n");
|
||||
while (1) {
|
||||
for (j = 1; j <= 57; j += 8) {
|
||||
str = "";
|
||||
for (i = 0; i <= 7; i++) {
|
||||
while (str.length < 4 * i)
|
||||
str += " ";
|
||||
str += " " + (j + i);
|
||||
}
|
||||
print(str + "\n");
|
||||
}
|
||||
print("\n");
|
||||
print("AND HERE IS THE OPENING POSITION OF THE CHECKERS.\n");
|
||||
print("\n");
|
||||
for (j = 1; j <= 64; j++)
|
||||
a[j] = 1;
|
||||
for (j = 19; j <= 43; j += 8)
|
||||
for (i = j; i <= j + 3; i++)
|
||||
a[i] = 0;
|
||||
m = 0;
|
||||
while (1) {
|
||||
// Print board
|
||||
for (j = 1; j <= 57; j += 8) {
|
||||
str = "";
|
||||
for (i = j; i <= j + 7; i++) {
|
||||
str += " " + a[i] + " ";
|
||||
}
|
||||
print(str + "\n");
|
||||
}
|
||||
print("\n");
|
||||
while (1) {
|
||||
print("JUMP FROM");
|
||||
f = parseInt(await input());
|
||||
if (f == 0)
|
||||
break;
|
||||
print("TO");
|
||||
t = parseInt(await input());
|
||||
print("\n");
|
||||
// Check legality of move
|
||||
f1 = Math.floor((f - 1) / 8);
|
||||
f2 = f - 8 * f1;
|
||||
t1 = Math.floor((t - 1) / 8);
|
||||
t2 = t - 8 * t1;
|
||||
if (f1 > 7 || t1 > 7 || f2 > 8 || t2 > 8 || Math.abs(f1 - t1) != 2 || Math.abs(f2 - t2) != 2 || a[(t + f) / 2] == 0 || a[f] == 0 || a[t] == 1) {
|
||||
print("ILLEGAL MOVE. TRY AGAIN...\n");
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (f == 0)
|
||||
break;
|
||||
// Update board
|
||||
a[t] = 1;
|
||||
a[f] = 0;
|
||||
a[(t + f) / 2] = 0;
|
||||
m++;
|
||||
}
|
||||
// End game summary
|
||||
s = 0;
|
||||
for (i = 1; i <= 64; i++)
|
||||
s += a[i];
|
||||
print("\n");
|
||||
print("YOU MADE " + m + " JUMPS AND HAD " + s + " PIECES\n");
|
||||
print("REMAINING ON THE BOARD.\n");
|
||||
print("\n");
|
||||
while (1) {
|
||||
print("TRY AGAIN");
|
||||
str = await input();
|
||||
if (str == "YES")
|
||||
break;
|
||||
if (str == "NO")
|
||||
break;
|
||||
print("PLEASE ANSWER 'YES' OR 'NO'.\n");
|
||||
}
|
||||
if (str == "NO")
|
||||
break;
|
||||
}
|
||||
print("\n");
|
||||
print("O.K. HOPE YOU HAD FUN!!\n");
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user