From c197e2ad260da0411ff77cd8b4c2546fa879179b Mon Sep 17 00:00:00 2001 From: nanochess Date: Wed, 17 Feb 2021 16:33:50 -0600 Subject: [PATCH] Ported AWARI to Javascript --- 04 Awari/awari.bas | 2 +- 04 Awari/javascript/awari.html | 9 ++ 04 Awari/javascript/awari.js | 259 +++++++++++++++++++++++++++++++++ 3 files changed, 269 insertions(+), 1 deletion(-) create mode 100644 04 Awari/javascript/awari.html create mode 100644 04 Awari/javascript/awari.js diff --git a/04 Awari/awari.bas b/04 Awari/awari.bas index f5f66e1b..78c204e3 100644 --- a/04 Awari/awari.bas +++ b/04 Awari/awari.bas @@ -51,7 +51,7 @@ 800 D=-99:H=13 805 FOR I=0 TO 13:G(I)=B(I):NEXT I 810 FOR J=7 TO 12:IF B(J)=0 THEN 885 -815 G=0:M=J:GOSUB 600 +815 Q=0:M=J:GOSUB 600 820 FOR I=0 TO 5:IF B(I)=0 THEN 845 825 L=B(I)+I:R=0 830 IF L>13 THEN L=L-14:R=1:GOTO 830 diff --git a/04 Awari/javascript/awari.html b/04 Awari/javascript/awari.html new file mode 100644 index 00000000..1d3c6208 --- /dev/null +++ b/04 Awari/javascript/awari.html @@ -0,0 +1,9 @@ + + +AWARI + + +

+
+
+
diff --git a/04 Awari/javascript/awari.js b/04 Awari/javascript/awari.js
new file mode 100644
index 00000000..cda27c08
--- /dev/null
+++ b/04 Awari/javascript/awari.js	
@@ -0,0 +1,259 @@
+// 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();