// AWARI // // 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; } print(tab(34) + "AWARI\n"); print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n"); n = 0; b = [0,0,0,0,0,0,0,0,0,0,0,0,0,0]; g = [0,0,0,0,0,0,0,0,0,0,0,0,0,0]; f = []; for (i = 0; i <= 50; i++) { f[i] = 0; } function show_number(number) { if (number < 10) print(" " + number + " "); else print(" " + number + " "); } function show_board() { var i; print("\n"); print(" "); for (i = 12; i >= 7; i--) show_number(b[i]); print("\n"); i = 13; show_number(b[i]); print(" " + b[6] + "\n"); print(" "); for (i = 0; i <= 5; i++) show_number(b[i]); print("\n"); print("\n"); } function do_move() { k = m; adjust_board(); e = 0; if (k > 6) k -= 7; c++; if (c < 9) f[n] = f[n] * 6 + k for (i = 0; i <= 5; i++) { if (b[i] != 0) { for (i = 7; i <= 12; i++) { if (b[i] != 0) { e = 1; return; } } } } } function adjust_board() { p = b[m]; b[m] = 0; while (p >= 1) { m++; if (m > 13) m -= 14; b[m]++; p--; } if (b[m] == 1) { if (m != 6 && m != 13) { if (b[12 - m] != 0) { b[h] += b[12 - m] + 1; b[m] = 0; b[12 - m] = 0; } } } } function computer_move() { d = -99; h = 13; for (i = 0; i<= 13; i++) // Backup board g[i] = b[i]; for (j = 7; j <= 12; j++) { if (b[j] == 0) continue; q = 0; m = j; adjust_board(); for (i = 0; i <= 5; i++) { if (b[i] == 0) continue; l = b[i] + i; r = 0; while (l > 13) { l -= 14; r = 1; } if (b[l] == 0) { if (l != 6 && l != 13) r = b[12 - l] + r; } if (r > q) q = r; } q = b[13] - b[6] - q; if (c < 8) { k = j; if (k > 6) k -= 7; for (i = 0; i <= n - 1; i++) { if (f[n] * 6 + k == Math.floor(f[i] / Math.pow(7 - c, 6) + 0.1)) q -= 2; } } for (i = 0; i <= 13; i++) // Restore board b[i] = g[i]; if (q >= d) { a = j; d = q; } } m = a; print(m - 6); do_move(); } // Main program async function main() { while (1) { print("\n"); print("\n"); e = 0; for (i = 0; i <= 12; i++) b[i] = 3; c = 0; f[n] = 0; b[13] = 0; b[6] = 0; while (1) { show_board(); print("YOUR MOVE"); while (1) { m = parseInt(await input()); if (m < 7) { if (m > 0) { m--; if (b[m] != 0) break; } } print("ILLEGAL MOVE\n"); print("AGAIN"); } h = 6; do_move(); show_board(); if (e == 0) break; if (m == h) { print("AGAIN"); while (1) { m = parseInt(await input()); if (m < 7) { if (m > 0) { m--; if (b[m] != 0) break; } } print("ILLEGAL MOVE\n"); print("AGAIN"); } h = 6; do_move(); show_board(); } if (e == 0) break; print("MY MOVE IS "); computer_move(); if (e == 0) break; if (m == h) { print(","); computer_move(); } if (e == 0) break; } print("\n"); print("GAME OVER\n"); d = b[6] - b[13]; if (d < 0) print("I WIN BY " + -d + " POINTS\n"); else if (d == 0) { n++; print("DRAWN GAME\n"); } else { n++; print("YOU WIN BY " + d + " POINTS\n"); } } } main();