From 7e1576809a0f0049660ed91053847a0bf25baf5c Mon Sep 17 00:00:00 2001 From: nanochess Date: Sat, 13 Mar 2021 21:55:16 -0600 Subject: [PATCH] Ported TICTACTOE2 to Javascript --- 89 Tic-Tac-Toe/javascript/tictactoe2.html | 9 + 89 Tic-Tac-Toe/javascript/tictactoe2.js | 288 ++++++++++++++++++++++ 2 files changed, 297 insertions(+) create mode 100644 89 Tic-Tac-Toe/javascript/tictactoe2.html create mode 100644 89 Tic-Tac-Toe/javascript/tictactoe2.js diff --git a/89 Tic-Tac-Toe/javascript/tictactoe2.html b/89 Tic-Tac-Toe/javascript/tictactoe2.html new file mode 100644 index 00000000..418bf65c --- /dev/null +++ b/89 Tic-Tac-Toe/javascript/tictactoe2.html @@ -0,0 +1,9 @@ + + +TIC TAC TOE 2 + + +

+
+
+
diff --git a/89 Tic-Tac-Toe/javascript/tictactoe2.js b/89 Tic-Tac-Toe/javascript/tictactoe2.js
new file mode 100644
index 00000000..beab1df6
--- /dev/null
+++ b/89 Tic-Tac-Toe/javascript/tictactoe2.js	
@@ -0,0 +1,288 @@
+// TIC TAC TOE 2
+//
+// 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 s = [];
+
+function who_win(piece)
+{
+    if (piece == -1) {
+        print("I WIN, TURKEY!!!\n");
+    } else if (piece == 1) {
+        print("YOU BEAT ME!! GOOD GAME.\n");
+    }
+}
+
+function show_board()
+{
+    print("\n");
+    for (i = 1; i <= 9; i++) {
+        print(" ");
+        if (s[i] == -1) {
+            print(qs + " ");
+        } else if (s[i] == 0) {
+            print("  ");
+        } else {
+            print(ps + " ");
+        }
+        if (i == 3 || i == 6) {
+            print("\n");
+            print("---+---+---\n");
+        } else if (i != 9) {
+            print("!");
+        }
+    }
+    print("\n");
+    print("\n");
+    print("\n");
+    for (i = 1; i <= 7; i += 3) {
+        if (s[i] && s[i] == s[i + 1] && s[i] == s[i + 2]) {
+            who_win(s[i]);
+            return true;
+        }
+    }
+    for (i = 1; i <= 3; i++) {
+        if (s[i] && s[i] == s[i + 3] && s[i] == s[i + 6]) {
+            who_win(s[i]);
+            return true;
+        }
+    }
+    if (s[1] && s[1] == s[5] && s[1] == s[9]) {
+        who_win(s[1]);
+        return true;
+    }
+    if (s[3] && s[3] == s[5] && s[3] == s[7]) {
+        who_win(s[3]);
+        return true;
+    }
+    for (i = 1; i <= 9; i++) {
+        if (s[i] == 0)
+            break;
+    }
+    if (i > 9) {
+        print("IT'S A DRAW. THANK YOU.\n");
+        return true;
+    }
+    return false;
+}
+
+// Main control section
+async function main()
+{
+    print(tab(30) + "TIC-TAC-TOE\n");
+    print(tab(15) + "CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\n");
+    print("\n");
+    print("\n");
+    print("\n");
+    for (i = 1; i <= 9; i++)
+        s[i] = 0;
+    print("THE BOARD IS NUMBERED:\n");
+    print(" 1  2  3\n");
+    print(" 4  5  6\n");
+    print(" 7  8  9\n");
+    print("\n");
+    print("\n");
+    print("\n");
+    print("DO YOU WANT 'X' OR 'O'");
+    str = await input();
+    if (str == "X") {
+        ps = "X";
+        qs = "O";
+        first_time = true;
+    } else {
+        ps = "O";
+        qs = "X";
+        first_time = false;
+    }
+    while (1) {
+        if (!first_time) {
+            g = -1;
+            h = 1;
+            if (s[5] == 0) {
+                s[5] = -1;
+            } else if (s[5] == 1 && s[1] == 0) {
+                s[1] = -1;
+            } else if (s[5] != 1 && s[2] == 1 && s[1] == 0 || s[5] != 1 && s[4] == 1 && s[1] == 0) {
+                s[1] = -1;
+            } else if (s[5] != 1 && s[6] == 1 && s[9] == 0 || s[5] != 1 && s[8] == 1 && s[9] == 0) {
+                s[9] = -1;
+            } else {
+                while (1) {
+                    played = false;
+                    if (g == 1) {
+                        j = 3 * Math.floor((m - 1) / 3) + 1;
+                        if (3 * Math.floor((m - 1) / 3) + 1 == m)
+                            k = 1;
+                        if (3 * Math.floor((m - 1) / 3) + 2 == m)
+                            k = 2;
+                        if (3 * Math.floor((m - 1) / 3) + 3 == m)
+                            k = 3;
+                    } else {
+                        j = 1;
+                        k = 1;
+                    }
+                    while (1) {
+                        if (s[j] == g) {
+                            if (s[j + 2] == g) {
+                                if (s[j + 1] == 0) {
+                                    s[j + 1] = -1;
+                                    played = true;
+                                    break;
+                                }
+                            } else {
+                                if (s[j + 2] == 0 && s[j + 1] == g) {
+                                    s[j + 2] = -1;
+                                    played = true;
+                                    break;
+                                }
+                            }
+                        } else {
+                            if (s[j] != h && s[j + 2] == g && s[j + 1] == g) {
+                                s[j] = -1;
+                                played = true;
+                                break;
+                            }
+                        }
+                        if (s[k] == g) {
+                            if (s[k + 6] == g) {
+                                if (s[k + 3] == 0) {
+                                    s[k + 3] = -1;
+                                    played = true;
+                                    break;
+                                }
+                            } else {
+                                if (s[k + 6] == 0 && s[k + 3] == g) {
+                                    s[k + 6] = -1;
+                                    played = true;
+                                    break;
+                                }
+                            }
+                        } else {
+                            if (s[k] != h && s[k + 6] == g && s[k + 3] == g) {
+                                s[k] = -1;
+                                played = true;
+                                break;
+                            }
+                        }
+                        if (g == 1)
+                            break;
+                        if (j == 7 && k == 3)
+                            break;
+                        k++;
+                        if (k > 3) {
+                            k = 1;
+                            j += 3;
+                            if (j > 7)
+                                break;
+                        }
+                    }
+                    if (!played) {
+                        if (s[5] == g) {
+                            if (s[3] == g && s[7] == 0) {
+                                s[7] = -1;
+                                played = true;
+                            } else if (s[9] == g && s[1] == 0) {
+                                s[1] = -1;
+                                played = true;
+                            } else if (s[7] == g && s[3] == 0) {
+                                s[3] = -1;
+                                played = true;
+                            } else if (s[9] == 0 && s[1] == g) {
+                                s[9] = -1;
+                                played = true;
+                            }
+                        }
+                        if (!played) {
+                            if (g == -1) {
+                                g = 1;
+                                h = -1;
+                            }
+                        }
+                    }
+                    if (played)
+                        break;
+                }
+                if (!played) {
+                    if (s[9] == 1 && s[3] == 0 && s[1] != 1) {
+                        s[3] = -1;
+                    } else {
+                        for (i = 2; i <= 9; i++) {
+                            if (s[i] == 0) {
+                                s[i] = -1;
+                                break;
+                            }
+                        }
+                        if (i > 9) {
+                            s[1] = -1;
+                        }
+                    }
+                }
+            }
+            print("\n");
+            print("THE COMPUTER MOVES TO...");
+            if (show_board())
+                break;
+        }
+        first_time = false;
+        while (1) {
+            print("\n");
+            print("WHERE DO YOU MOVE");
+            m = parseInt(await input());
+            if (m == 0) {
+                print("THANKS FOR THE GAME.\n");
+                break;
+            }
+            if (m >= 1 && m <= 9 && s[m] == 0)
+                break;
+            print("THAT SQUARE IS OCCUPIED.\n");
+            print("\n");
+            print("\n");
+        }
+        g = 1;
+        s[m] = 1;
+        if (show_board())
+            break;
+    }
+}
+
+main();