Files
basic-computer-games/72_Queen/javascript/queen.js
Martin Thoma e64fb6795c MAINT: Apply pre-commit
Remove byte-order-marker pre-commit check as there would be
many adjustments necessary
2022-03-05 09:29:23 +01:00

238 lines
6.8 KiB
JavaScript

// QUEEN
//
// 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 sa = [,81, 71, 61, 51, 41, 31, 21, 11,
92, 82, 72, 62, 52, 42, 32, 22,
103, 93, 83, 73, 63, 53, 43, 33,
114, 104, 94, 84, 74, 64, 54, 44,
125, 115, 105, 95, 85, 75, 65, 55,
136, 126, 116, 106, 96, 86, 76, 66,
147, 137, 127, 117, 107, 97, 87, 77,
158, 148, 138, 128, 118, 108, 98, 88];
var m;
var m1;
var u;
var t;
var u1;
var t1;
function show_instructions()
{
print("WE ARE GOING TO PLAY A GAME BASED ON ONE OF THE CHESS\n");
print("MOVES. OUR QUEEN WILL BE ABLE TO MOVE ONLY TO THE LEFT,\n");
print("DOWN, OR DIAGONALLY DOWN AND TO THE LEFT.\n");
print("\n");
print("THE OBJECT OF THE GAME IS TO PLACE THE QUEEN IN THE LOWER\n");
print("LEFT HAND SQUARE BY ALTERNATING MOVES BETWEEN YOU AND THE\n");
print("COMPUTER. THE FIRST ONE TO PLACE THE QUEEN THERE WINS.\n");
print("\n");
print("YOU GO FIRST AND PLACE THE QUEEN IN ANY ONE OF THE SQUARES\n");
print("ON THE TOP ROW OR RIGHT HAND COLUMN.\n");
print("THAT WILL BE YOUR FIRST MOVE.\n");
print("WE ALTERNATE MOVES.\n");
print("YOU MAY FORFEIT BY TYPING '0' AS YOUR MOVE.\n");
print("BE SURE TO PRESS THE RETURN KEY AFTER EACH RESPONSE.\n");
print("\n");
print("\n");
}
function show_map()
{
print("\n");
for (var a = 0; a <= 7; a++) {
for (var b = 1; b <= 8; b++) {
i = 8 * a + b;
print(" " + sa[i] + " ");
}
print("\n");
print("\n");
print("\n");
}
print("\n");
}
function test_move()
{
m = 10 * t + u;
if (m == 158 || m == 127 || m == 126 || m == 75 || m == 73)
return true;
return false;
}
function random_move()
{
// Random move
z = Math.random();
if (z > 0.6) {
u = u1 + 1;
t = t1 + 1;
} else if (z > 0.3) {
u = u1 + 1;
t = t1 + 2;
} else {
u = u1;
t = t1 + 1;
}
m = 10 * t + u;
}
function computer_move()
{
if (m1 == 41 || m1 == 44 || m1 == 73 || m1 == 75 || m1 == 126 || m1 == 127) {
random_move();
return;
}
for (k = 7; k >= 1; k--) {
u = u1;
t = t1 + k;
if (test_move())
return;
u += k;
if (test_move())
return;
t += k;
if (test_move())
return;
}
random_move();
}
// Main program
async function main()
{
print(tab(33) + "QUEEN\n");
print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n");
print("\n");
print("\n");
print("\n");
while (1) {
print("DO YOU WANT INSTRUCTIONS");
str = await input();
if (str == "YES" || str == "NO")
break;
print("PLEASE ANSWER 'YES' OR 'NO'.\n");
}
if (str == "YES")
show_instructions();
while (1) {
show_map();
while (1) {
print("WHERE WOULD YOU LIKE TO START");
m1 = parseInt(await input());
if (m1 == 0) {
print("\n");
print("IT LOOKS LIKE I HAVE WON BY FORFEIT.\n");
print("\n");
break;
}
t1 = Math.floor(m1 / 10);
u1 = m1 - 10 * t1;
if (u1 == 1 || u1 == t1)
break;
print("PLEASE READ THE DIRECTIONS AGAIN.\n");
print("YOU HAVE BEGUN ILLEGALLY.\n");
print("\n");
}
while (m1) {
if (m1 == 158) {
print("\n");
print("C O N G R A T U L A T I O N S . . .\n");
print("\n");
print("YOU HAVE WON--VERY WELL PLAYED.\n");
print("IT LOOKS LIKE I HAVE MET MY MATCH.\n");
print("THANKS FOR PLAYING--I CAN'T WIN ALL THE TIME.\n");
print("\n");
break;
}
computer_move();
print("COMPUTER MOVES TO SQUARE " + m + "\n");
if (m == 158) {
print("\n");
print("NICE TRY, BUT IT LOOKS LIKE I HAVE WON.\n");
print("THANKS FOR PLAYING.\n");
print("\n");
break;
}
print("WHAT IS YOUR MOVE");
while (1) {
m1 = parseInt(await input());
if (m1 == 0)
break;
t1 = Math.floor(m1 / 10);
u1 = m1 - 10 * t1;
p = u1 - u;
l = t1 - t;
if (m1 <= m || p == 0 && l <= 0 || p != 0 && l != p && l != 2 * p) {
print("\n");
print("Y O U C H E A T . . . TRY AGAIN");
continue;
}
break;
}
if (m1 == 0) {
print("\n");
print("IT LOOKS LIKE I HAVE WON BY FORFEIT.\n");
print("\n");
break;
}
}
while (1) {
print("ANYONE ELSE CARE TO TRY");
str = await input();
print("\n");
if (str == "YES" || str == "NO")
break;
print("PLEASE ANSWER 'YES' OR 'NO'.\n");
}
if (str != "YES")
break;
}
print("\n");
print("OK --- THANKS AGAIN.\n");
}
main();