From 1924d652fef0c5e62ebf5308f4a38034bd306239 Mon Sep 17 00:00:00 2001 From: nanochess Date: Mon, 29 Mar 2021 22:58:47 -0600 Subject: [PATCH] Ported POKER to Javascript (final 94th program ported) --- 71 Poker/javascript/poker.html | 9 + 71 Poker/javascript/poker.js | 751 +++++++++++++++++++++++++++++++++ 2 files changed, 760 insertions(+) create mode 100644 71 Poker/javascript/poker.html create mode 100644 71 Poker/javascript/poker.js diff --git a/71 Poker/javascript/poker.html b/71 Poker/javascript/poker.html new file mode 100644 index 00000000..c2abd411 --- /dev/null +++ b/71 Poker/javascript/poker.html @@ -0,0 +1,9 @@ + + +POKER + + +

+
+
+
diff --git a/71 Poker/javascript/poker.js b/71 Poker/javascript/poker.js
new file mode 100644
index 00000000..105da0fa
--- /dev/null
+++ b/71 Poker/javascript/poker.js	
@@ -0,0 +1,751 @@
+// POKER
+//
+// 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 aa = [];
+var ba = [];
+var b;
+var c;
+var d;
+var g;
+var i;
+var k;
+var m;
+var n;
+var p;
+var s;
+var u;
+var v;
+var x;
+var z;
+var hs;
+var is;
+var js;
+var ks;
+
+function fna(x)
+{
+    return Math.floor(10 * Math.random());
+}
+
+function fnb(x)
+{
+    return x % 100;
+}
+
+function im_busted()
+{
+    print("I'M BUSTED.  CONGRATULATIONS!\n");
+}
+
+// 1740
+function deal_card()
+{
+    while (1) {
+        aa[z] = 100 * Math.floor(4 * Math.random()) + Math.floor(100 * Math.random());
+        if (Math.floor(aa[z] / 100) > 3)    // Invalid suit
+            continue;
+        if (aa[z] % 100 > 12) // Invalid number
+            continue;
+        if (z != 1) {
+            for (k = 1; k <= z - 1; k++) {
+                if (aa[z] == aa[k])
+                    break;
+            }
+            if (k <= z - 1) // Repeated card
+                continue;
+            if (z > 10) {
+                n = aa[u];
+                aa[u] = aa[z];
+                aa[z] = n;
+            }
+        }
+        return;
+    }
+}
+
+// 1850
+function show_cards()
+{
+    for (z = n; z <= n + 4; z++) {
+        print(" " + z + "--  ");
+        k = fnb(aa[z]);
+        show_number();
+        print(" OF");
+        k = Math.floor(aa[z] / 100);
+        show_suit();
+        if (z % 2 == 0)
+            print("\n");
+    }
+    print("\n");
+}
+
+// 1950
+function show_number()
+{
+    if (k == 9)
+        print("JACK");
+    if (k == 10)
+        print("QUEEN");
+    if (k == 11)
+        print("KING");
+    if (k == 12)
+        print("ACE");
+    if (k < 9)
+        print(" " + (k + 2));
+}
+
+// 2070
+function show_suit()
+{
+    if (k == 0)
+        print(" CLUBS\t");
+    if (k == 1)
+        print(" DIAMONDS\t");
+    if (k == 2)
+        print(" HEARTS\t");
+    if (k == 3)
+        print(" SPADES\t");
+}
+
+// 2170
+function evaluate_hand()
+{
+    u = 0;
+    for (z = n; z <= n + 4; z++) {
+        ba[z] = fnb(aa[z]);
+        if (z != n + 4) {
+            if (Math.floor(aa[z] / 100) == Math.floor(aa[z + 1] / 100))
+                u++;
+        }
+    }
+    if (u == 4) {
+        x = 11111;
+        d = aa[n];
+        hs = "A FLUS";
+        is = "H IN";
+        u = 15;
+        return;
+    }
+    for (z = n; z <= n + 3; z++) {
+        for (k = z + 1; k <= n + 4; k++) {
+            if (ba[z] > ba[k]) {
+                x = aa[z];
+                aa[z] = aa[k];
+                ba[z] = ba[k];
+                aa[k] = x;
+                ba[k] = aa[k] - 100 * Math.floor(aa[k] / 100);
+            }
+        }
+    }
+    x = 0;
+    for (z = n; z <= n + 3; z++) {
+        if (ba[z] == ba[z + 1]) {
+            x = x + 11 * Math.pow(10, z - n);
+            d = aa[z];
+            if (u < 11) {
+                u = 11;
+                hs = "A PAIR";
+                is = " OF ";
+            } else if (u == 11) {
+                if (ba[z] == ba[z - 1]) {
+                    hs = "THREE";
+                    is = " ";
+                    u = 13;
+                } else {
+                    hs = "TWO P";
+                    is = "AIR, ";
+                    u = 12;
+                }
+            } else if (u == 12) {
+                u = 16;
+                hs = "FULL H";
+                is = "OUSE, ";
+            } else if (ba[z] == ba[z - 1]) {
+                u = 17;
+                hs = "FOUR";
+                is = " ";
+            } else {
+                u = 16;
+                hs = "FULL H";
+                is = "OUSE. ";
+            }
+        }
+    }
+    if (x == 0) {
+        if (ba[n] + 3 == ba[n + 3]) {
+            x = 1111;
+            u = 10;
+        }
+        if (ba[n + 1] + 3 == ba[n + 4]) {
+            if (u == 10) {
+                u = 14;
+                hs = "STRAIG";
+                is = "HT";
+                x = 11111;
+                d = aa[n + 4];
+                return;
+            }
+            u = 10;
+            x = 11110;
+        }
+    }
+    if (u < 10) {
+        d = aa[n + 4];
+        hs = "SCHMAL";
+        is = "TZ, ";
+        u = 9;
+        x = 11000;
+        i = 6;
+        return;
+    }
+    if (u == 10) {
+        if (i == 1)
+            i = 6;
+        return;
+    }
+    if (u > 12)
+        return;
+    if (fnb(d) > 6)
+        return;
+    i = 6;
+}
+
+function get_prompt(question, def)
+{
+    var str;
+    
+    str = window.prompt(question, def);
+    print(question + "? " + str + "\n");
+    return str;
+}
+
+function player_low_in_money()
+{
+    print("\n");
+    print("YOU CAN'T BET WITH WHAT YOU HAVEN'T GOT.\n");
+    str = "N";
+    if (o % 2 != 0) {
+        str = get_prompt("WOULD YOU LIKE TO SELL YOUR WATCH", "YES");
+        if (str.substr(0, 1) != "N") {
+            if (fna(0) < 7) {
+                print("I'LL GIVE YOU $75 FOR IT.\n");
+                s += 75;
+            } else {
+                print("THAT'S A PRETTY CRUMMY WATCH - I'LL GIVE YOU $25.\n");
+                s += 25;
+            }
+            o *= 2;
+        }
+    }
+    if (o % 3 == 0 && str.substr(0, 1) == "N") {
+        str = get_prompt("WILL YOU PART WITH THAT DIAMOND TIE TACK", "YES");
+        if (str.substr(0, 1) != "N") {
+            if (fna(0) < 6) {
+                print("YOU ARE NOW $100 RICHER.\n");
+                s += 100;
+            } else {
+                print("IT'S PASTE.  $25.\n");
+                s += 25;
+            }
+            o *= 3;
+        }
+    }
+    if (str.substr(0,1) == "N") {
+        print("YOUR WAD IS SHOT.  SO LONG, SUCKER!\n");
+        return true;
+    }
+    return false;
+}
+
+function computer_low_in_money()
+{
+    if (c - g - v >= 0)
+        return false;
+    if (g == 0) {
+        v = c;
+        return false;
+    }
+    if (c - g < 0) {
+        print("I'LL SEE YOU.\n");
+        k = g;
+        s = s - g;
+        c = c - k;
+        p = p + g + k;
+        return false;
+    }
+    js = "N";
+    if (o % 2 == 0) {
+        js = get_prompt("WOULD YOU LIKE TO BUY BACK YOUR WATCH FOR $50", "YES");
+        if (js.substr(0, 1) != "N") {
+            c += 50;
+            o /= 2;
+        }
+    }
+    if (js.substr(0, 1) == "N" && o % 3 == 0) {
+        js = get_prompt("WOULD YOU LIKE TO BUY BACK YOUR TIE TACK FOR $50", "YES");
+        if (js.substr(0, 1) != "N") {
+            c += 50;
+            o /= 3;
+        }
+    }
+    if (js.substr(0, 1) == "N") {
+        print("I'M BUSTED.  CONGRATULATIONS!\n");
+        return true;
+    }
+    return false;
+}
+
+function ask_for_bet()
+{
+    var forced;
+    
+    if (t != Math.floor(t)) {
+        if (k != 0 || g != 0 || t != 0.5) {
+            print("NO SMALL CHANGE, PLEASE.\n");
+            return 0;
+        }
+        return 1;
+    }
+    if (s - g - t < 0) {
+        if (player_low_in_money())
+            return 2;
+        return 0;
+    }
+    if (t == 0) {
+        i = 3;
+    } else if (g + t < k) {
+        print("IF YOU CAN'T SEE MY BET, THEN FOLD.\n");
+        return 0;
+    } else {
+        g += t;
+        if (g != k) {
+            forced = false;
+            if (z != 1) {
+                if (g <= 3 * z)
+                    forced = true;
+            } else {
+                if (g <= 5) {
+                    if (z < 2) {
+                        v = 5;
+                        if (g <= 3 * z)
+                            forced = true;
+                    }
+                } else {
+                    if (z == 1 || t > 25) {
+                        i = 4;
+                        print("I FOLD.\n");
+                        return 1;
+                    }
+                }
+            }
+            if (forced || z == 2) {
+                v = g - k + fna(0);
+                if (computer_low_in_money())
+                    return 2;
+                print("I'LL SEE YOU, AND RAISE YOU " + v + "\n");
+                k = g + v;
+                return 0;
+            }
+            print("I'LL SEE YOU.\n");
+            k = g;
+        }
+    }
+    s -= g;
+    c -= k;
+    p += g + k;
+    return 1;
+}
+
+function check_for_win(type)
+{
+    if (type == 0 && i == 3 || type == 1) {
+        print("\n");
+        print("I WIN.\n");
+        c += p;
+    } else if (type == 0 && i == 4 || type == 2) {
+        print("\n");
+        print("YOU WIN.\n");
+        s += p;
+    } else {
+        return 0;
+    }
+    print("NOW I HAVE $" + c + " AND YOU HAVE $" + s + "\n");
+    return 1;
+}
+
+function show_hand()
+{
+    print(hs + is);
+    if (hs == "A FLUS") {
+        k = Math.floor(k / 100);
+        print("\n");
+        show_suit();
+        print("\n");
+    } else {
+        k = fnb(k);
+        show_number();
+        if (hs == "SCHMAL" || hs == "STRAIG")
+            print(" HIGH\n");
+        else
+            print("'S\n");
+    }
+}
+
+// Main program
+async function main()
+{
+    print(tab(33) + "POKER\n");
+    print(tab(15) + "CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\n");
+    print("\n");
+    print("\n");
+    print("\n");
+    print("WELCOME TO THE CASINO.  WE EACH HAVE $200.\n");
+    print("I WILL OPEN THE BETTING BEFORE THE DRAW; YOU OPEN AFTER.\n");
+    print("TO FOLD BET 0; TO CHECK BET .5.\n");
+    print("ENOUGH TALK -- LET'S GET DOWN TO BUSINESS.\n");
+    print("\n");
+    o = 1;
+    c = 200;
+    s = 200;
+    z = 0;
+    while (1) {
+        p = 0;
+        //
+        print("\n");
+        if (c <= 5) {
+            im_busted();
+            return;
+        }
+        print("THE ANTE IS $5, I WILL DEAL:\n");
+        print("\n");
+        if (s <= 5) {
+            if (player_low_in_money())
+                return;
+        }
+        p += 10;
+        s -= 5;
+        c -= 5;
+        for (z = 1; z <= 10; z++)
+            deal_card();
+        print("YOUR HAND:\n");
+        n = 1;
+        show_cards();
+        n = 6;
+        i = 2;
+        evaluate_hand();
+        print("\n");
+        first = true;
+        if (i == 6) {
+            if (fna(0) > 7) {
+                x = 11100;
+                i = 7;
+                z = 23;
+            } else if (fna(0) > 7) {
+                x = 11110;
+                i = 7;
+                z = 23;
+            } else if (fna(0) < 2) {
+                x = 11111;
+                i = 7;
+                z = 23;
+            } else {
+                z = 1;
+                k = 0;
+                print("I CHECK.\n");
+                first = false;
+            }
+        } else {
+            if (u < 13) {
+                if (fna(0) < 2) {
+                    i = 7;
+                    z = 23;
+                } else {
+                    z = 0;
+                    k = 0;
+                    print("I CHECK.\n");
+                    first = false;
+                }
+            } else if (u > 16) {
+                z = 2;
+                if (fna(0) < 1)
+                    z = 35;
+            } else {
+                z = 35;
+            }
+        }
+        if (first) {
+            v = z + fna(0);
+            g = 0;
+            if (computer_low_in_money())
+                return;
+            print("I'LL OPEN WITH $" + v + "\n");
+            k = v;
+        }
+        g = 0;
+        do {
+            print("\nWHAT IS YOUR BET");
+            t = parseFloat(await input());
+            status = ask_for_bet();
+        } while (status == 0) ;
+        if (status == 2)
+            return;
+        status = check_for_win(0);
+        if (status == 1) {
+            while (1) {
+                print("DO YOU WISH TO CONTINUE");
+                hs = await input();
+                if (hs == "YES") {
+                    status = 1;
+                    break;
+                }
+                if (hs == "NO") {
+                    status = 2;
+                    break;
+                }
+                print("ANSWER YES OR NO, PLEASE.\n");
+            }
+        }
+        if (status == 2)
+            return;
+        if (status == 1) {
+            p = 0;
+            continue;
+        }
+        print("\n");
+        print("NOW WE DRAW -- HOW MANY CARDS DO YOU WANT");
+        while (1) {
+            t = parseInt(await input());
+            if (t != 0) {
+                z = 10;
+                if (t >= 4) {
+                    print("YOU CAN'T DRAW MORE THAN THREE CARDS.\n");
+                    continue;
+                }
+                print("WHAT ARE THEIR NUMBERS:\n");
+                for (q = 1; q <= t; q++) {
+                    u = parseInt(await input());
+                    z++;
+                    deal_card();
+                }
+                print("YOUR NEW HAND:\n");
+                n = 1;
+                show_cards();
+            }
+            break;
+        }
+        z = 10 + t;
+        for (u = 6; u <= 10; u++) {
+            if (Math.floor(x / Math.pow(10, u - 6)) != 10 * Math.floor(x / Math.pow(10, u - 5)))
+                break;
+            z++;
+            deal_card();
+        }
+        print("\n");
+        print("I AM TAKING " + (z - 10 - t) + " CARD");
+        if (z != 11 + t) {
+            print("S");
+        }
+        print("\n");
+        n = 6;
+        v = i;
+        i = 1;
+        evaluate_hand();
+        b = u;
+        m = d;
+        if (v == 7) {
+            z = 28;
+        } else if (i == 6) {
+            z = 1;
+        } else {
+            if (u < 13) {
+                z = 2;
+                if (fna(0) == 6)
+                    z = 19;
+            } else if (u < 16) {
+                z = 19;
+                if (fna(0) == 8)
+                    z = 11;
+            } else {
+                z = 2;
+            }
+        }
+        k = 0;
+        g = 0;
+        do {
+            print("\nWHAT IS YOUR BET");
+            t = parseFloat(await input());
+            status = ask_for_bet();
+        } while (status == 0) ;
+        if (status == 2)
+            return;
+        if (t == 0.5) {
+            if (v != 7 && i == 6) {
+                print("I'LL CHECK\n");
+            } else {
+                v = z + fna(0);
+                if (computer_low_in_money())
+                    return;
+                print("I'LL BET $" + v + "\n");
+                k = v;
+                do {
+                    print("\nWHAT IS YOUR BET");
+                    t = parseFloat(await input());
+                    status = ask_for_bet();
+                } while (status == 0) ;
+                if (status == 2)
+                    return;
+                status = check_for_win(0);
+                if (status == 1) {
+                    while (1) {
+                        print("DO YOU WISH TO CONTINUE");
+                        hs = await input();
+                        if (hs == "YES") {
+                            status = 1;
+                            break;
+                        }
+                        if (hs == "NO") {
+                            status = 2;
+                            break;
+                        }
+                        print("ANSWER YES OR NO, PLEASE.\n");
+                    }
+                }
+                if (status == 2)
+                    return;
+                if (status == 1) {
+                    p = 0;
+                    continue;
+                }
+            }
+        } else {
+            status = check_for_win(0);
+            if (status == 1) {
+                while (1) {
+                    print("DO YOU WISH TO CONTINUE");
+                    hs = await input();
+                    if (hs == "YES") {
+                        status = 1;
+                        break;
+                    }
+                    if (hs == "NO") {
+                        status = 2;
+                        break;
+                    }
+                    print("ANSWER YES OR NO, PLEASE.\n");
+                }
+            }
+            if (status == 2)
+                return;
+            if (status == 1) {
+                p = 0;
+                continue;
+            }
+        }
+        print("\n");
+        print("NOW WE COMPARE HANDS:\n");
+        js = hs;
+        ks = is;
+        print("MY HAND:\n");
+        n = 6;
+        show_cards();
+        n = 1;
+        evaluate_hand();
+        print("\n");
+        print("YOU HAVE ");
+        k = d;
+        show_hand();
+        hs = js;
+        is = ks;
+        k = m;
+        print("AND I HAVE ");
+        show_hand();
+        status = 0;
+        if (b > u) {
+            status = 1;
+        } else if (u > b) {
+            status = 2;
+        } else {
+            if (hs != "A FLUS") {
+                if (fnb(m) < fnb(d))
+                    status = 2;
+                else if (fnb(m) > fnb(d))
+                    status = 1;
+            } else {
+                if (fnb(m) > fnb(d))
+                    status = 1;
+                else if (fnb(d) > fnb(m))
+                    status = 2;
+            }
+            if (status == 0) {
+                print("THE HAND IS DRAWN.\n");
+                print("ALL $" + p + " REMAINS IN THE POT.\n");
+                continue;
+            }
+        }
+        status = check_for_win(status);
+        if (status == 1) {
+            while (1) {
+                print("DO YOU WISH TO CONTINUE");
+                hs = await input();
+                if (hs == "YES") {
+                    status = 1;
+                    break;
+                }
+                if (hs == "NO") {
+                    status = 2;
+                    break;
+                }
+                print("ANSWER YES OR NO, PLEASE.\n");
+            }
+        }
+        if (status == 2)
+            return;
+        if (status == 1) {
+            p = 0;
+            continue;
+        }
+    }
+}
+
+main();