diff --git a/48 High IQ/javascript/highiq.html b/48 High IQ/javascript/highiq.html new file mode 100644 index 00000000..03ea2f26 --- /dev/null +++ b/48 High IQ/javascript/highiq.html @@ -0,0 +1,9 @@ + + +H-I-Q + + +

+
+
+
diff --git a/48 High IQ/javascript/highiq.js b/48 High IQ/javascript/highiq.js
new file mode 100644
index 00000000..3dbb6aa1
--- /dev/null
+++ b/48 High IQ/javascript/highiq.js	
@@ -0,0 +1,244 @@
+// H-I-Q
+//
+// 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 b = [];
+var t = [];
+var m = [,13,14,15,
+          22,23,24,
+    29,30,31,32,33,34,35,
+    38,39,40,41,42,43,44,
+    47,48,49,50,51,52,53,
+          58,59,60,
+          67,68,69];
+var z;
+var p;
+
+//
+// Print board
+//
+function print_board()
+{
+    for (x = 1; x <= 9; x++) {
+        str = "";
+        for (y = 1; y <= 9; y++) {
+            if (x == 1 || x == 9 || y == 1 || y == 9)
+                continue;
+            if (x == 4 || x == 5 || x == 6 || y == 4 || y == 5 || y == 6) {
+                while (str.length < y * 2)
+                    str += " ";
+                if (t[x][y] == 5)
+                    str += "!";
+                else
+                    str += "O";
+            }
+        }
+        print(str + "\n");
+    }
+}
+
+//
+// Update board
+//
+function update_board()
+{
+    c = 1;
+    for (var x = 1; x <= 9; x++) {
+        for (var y = 1; y <= 9; y++, c++) {
+            if (c != z)
+                continue;
+            if (c + 2 == p) {
+                if (t[x][y + 1] == 0)
+                    return false;
+                t[x][y + 2] = 5;
+                t[x][y + 1] = 0;
+                b[c + 1] = -3;
+            } else if (c + 18 == p) {
+                if (t[x + 1][y] == 0)
+                    return false;
+                t[x + 2][y] = 5;
+                t[x + 1][y] = 0;
+                b[c + 9] = -3;
+            } else if (c - 2 == p) {
+                if (t[x][y - 1] == 0)
+                    return false;
+                t[x][y - 2] = 5;
+                t[x][y - 1] = 0;
+                b[c - 1] = -3;
+            } else if (c - 18 == p) {
+                if (t[x - 1][y] == 0)
+                    return false;
+                t[x - 2][y] = 5;
+                t[x - 1][y] = 0;
+                b[c - 9] = -3;
+            } else {
+                continue;
+            }
+            b[z] = -3;
+            b[p] = -7;
+            t[x][y] = 0;
+            return true;
+        }
+    }
+}
+
+//
+// Check for game over
+//
+// Rewritten because original subroutine was buggy
+//
+function check_game_over()
+{
+    f = 0;
+    for (r = 2; r <= 8; r++) {
+        for (c = 2; c <= 8; c++) {
+            if (t[r][c] != 5)
+                continue;
+            f++;
+            if (r > 3 && t[r - 1][c] == 5 && t[r - 2][c] == 0)
+                return false;
+            if (c > 3 && t[r][c - 1] == 5 && t[r][c - 2] == 0)
+                return false;
+            if (r < 7 && t[r + 1][c] == 5 && t[r + 2][c] == 0)
+                return false;
+            if (c < 7 && t[r][c + 1] == 5 && t[r][c + 2] == 0)
+                return false;
+        }
+    }
+    return true;
+}
+
+// Main program
+async function main()
+{
+    print(tab(33) + "H-I-Q\n");
+    print(tab(15) + "CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\n");
+    print("\n");
+    print("\n");
+    print("\n");
+    for (r = 0; r <= 70; r++)
+        b[r] = 0;
+    print("HERE IS THE BOARD:\n");
+    print("\n");
+    print("          !    !    !\n");
+    print("         13   14   15\n");
+    print("\n");
+    print("          !    !    !\n");
+    print("         22   23   24\n");
+    print("\n");
+    print("!    !    !    !    !    !    !\n");
+    print("29   30   31   32   33   34   35\n");
+    print("\n");
+    print("!    !    !    !    !    !    !\n");
+    print("38   39   40   41   42   43   44\n");
+    print("\n");
+    print("!    !    !    !    !    !    !\n");
+    print("47   48   49   50   51   52   53\n");
+    print("\n");
+    print("          !    !    !\n");
+    print("         58   59   60\n");
+    print("\n");
+    print("          !    !    !\n");
+    print("         67   68   69\n");
+    print("\n");
+    print("TO SAVE TYPING TIME, A COMPRESSED VERSION OF THE GAME BOARD\n");
+    print("WILL BE USED DURING PLAY.  REFER TO THE ABOVE ONE FOR PEG\n");
+    print("NUMBERS.  OK, LET'S BEGIN.\n");
+    while (1) {
+        // Set up board
+        for (r = 1; r <= 9; r++) {
+            t[r] = [];
+            for (c = 1; c <= 9; c++) {
+                if (r == 4 || r == 5 || r == 6 || c == 4 || c == 5 || c == 6 && (r != 1 && c != 1 && r != 9 && c != 9)) {
+                    t[r][c] = 5;
+                } else {
+                    t[r][c] = -5;
+                }
+            }
+        }
+        t[5][5] = 0;
+        print_board();
+        // Init secondary board
+        for (w = 1; w <= 33; w++) {
+            b[m[w]] = -7;
+        }
+        b[41] = -3;
+        // Input move and check on legality
+        do {
+            while (1) {
+                print("MOVE WHICH PIECE");
+                z = parseInt(await input());
+                if (b[z] == -7) {
+                    print("TO WHERE");
+                    p = parseInt(await input());
+                    if (p != z
+                        && b[p] != 0
+                        && b[p] != -7
+                        && (z + p) % 2 == 0
+                        && (Math.abs(z - p) - 2) * (Math.abs(z - p) - 18) == 0
+                        && update_board())
+                        break;
+                }
+                print("ILLEGAL MOVE, TRY AGAIN...\n");
+            }
+            print_board();
+        } while (!check_game_over()) ;
+        // Game is over
+        print("THE GAME IS OVER.\n");
+        print("YOU HAD " + f + " PIECES REMAINING.\n");
+        if (f == 1) {
+            print("BRAVO!  YOU MADE A PERFECT SCORE!\n");
+            print("SAVE THIS PAPER AS A RECORD OF YOUR ACCOMPLISHMENT!\n");
+        }
+        print("\n");
+        print("PLAY AGAIN (YES OR NO)");
+        str = await input();
+        if (str == "NO")
+            break;
+    }
+    print("\n");
+    print("SO LONG FOR NOW.\n");
+    print("\n");
+}
+
+main();