diff --git a/72 Queen/javascript/queen.html b/72 Queen/javascript/queen.html
new file mode 100644
index 00000000..ce191813
--- /dev/null
+++ b/72 Queen/javascript/queen.html
@@ -0,0 +1,9 @@
+
+
+QUEEN
+
+
+
+
+
+
diff --git a/72 Queen/javascript/queen.js b/72 Queen/javascript/queen.js
new file mode 100644
index 00000000..0adee46c
--- /dev/null
+++ b/72 Queen/javascript/queen.js
@@ -0,0 +1,237 @@
+// QUEEN
+//
+// 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 sa = [,81, 71, 61, 51, 41, 31, 21, 11,
+ 92, 82, 72, 62, 52, 42, 32, 22,
+ 103, 93, 83, 73, 63, 53, 43, 33,
+ 114, 104, 94, 84, 74, 64, 54, 44,
+ 125, 115, 105, 95, 85, 75, 65, 55,
+ 136, 126, 116, 106, 96, 86, 76, 66,
+ 147, 137, 127, 117, 107, 97, 87, 77,
+ 158, 148, 138, 128, 118, 108, 98, 88];
+
+var m;
+var m1;
+var u;
+var t;
+var u1;
+var t1;
+
+function show_instructions()
+{
+ print("WE ARE GOING TO PLAY A GAME BASED ON ONE OF THE CHESS\n");
+ print("MOVES. OUR QUEEN WILL BE ABLE TO MOVE ONLY TO THE LEFT,\n");
+ print("DOWN, OR DIAGONALLY DOWN AND TO THE LEFT.\n");
+ print("\n");
+ print("THE OBJECT OF THE GAME IS TO PLACE THE QUEEN IN THE LOWER\n");
+ print("LEFT HAND SQUARE BY ALTERNATING MOVES BETWEEN YOU AND THE\n");
+ print("COMPUTER. THE FIRST ONE TO PLACE THE QUEEN THERE WINS.\n");
+ print("\n");
+ print("YOU GO FIRST AND PLACE THE QUEEN IN ANY ONE OF THE SQUARES\n");
+ print("ON THE TOP ROW OR RIGHT HAND COLUMN.\n");
+ print("THAT WILL BE YOUR FIRST MOVE.\n");
+ print("WE ALTERNATE MOVES.\n");
+ print("YOU MAY FORFEIT BY TYPING '0' AS YOUR MOVE.\n");
+ print("BE SURE TO PRESS THE RETURN KEY AFTER EACH RESPONSE.\n");
+ print("\n");
+ print("\n");
+}
+
+function show_map()
+{
+ print("\n");
+ for (var a = 0; a <= 7; a++) {
+ for (var b = 1; b <= 8; b++) {
+ i = 8 * a + b;
+ print(" " + sa[i] + " ");
+ }
+ print("\n");
+ print("\n");
+ print("\n");
+ }
+ print("\n");
+}
+
+function test_move()
+{
+ m = 10 * t + u;
+ if (m == 158 || m == 127 || m == 126 || m == 75 || m == 73)
+ return true;
+ return false;
+}
+
+function random_move()
+{
+ // Random move
+ z = Math.random();
+ if (z > 0.6) {
+ u = u1 + 1;
+ t = t1 + 1;
+ } else if (z > 0.3) {
+ u = u1 + 1;
+ t = t1 + 2;
+ } else {
+ u = u1;
+ t = t1 + 1;
+ }
+ m = 10 * t + u;
+}
+
+function computer_move()
+{
+ if (m1 == 41 || m1 == 44 || m1 == 73 || m1 == 75 || m1 == 126 || m1 == 127) {
+ random_move();
+ return;
+ }
+ for (k = 7; k >= 1; k--) {
+ u = u1;
+ t = t1 + k;
+ if (test_move())
+ return;
+ u += k;
+ if (test_move())
+ return;
+ t += k;
+ if (test_move())
+ return;
+ }
+ random_move();
+}
+
+// Main program
+async function main()
+{
+ print(tab(33) + "QUEEN\n");
+ print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n");
+ print("\n");
+ print("\n");
+ print("\n");
+
+ while (1) {
+ print("DO YOU WANT INSTRUCTIONS");
+ str = await input();
+ if (str == "YES" || str == "NO")
+ break;
+ print("PLEASE ANSWER 'YES' OR 'NO'.\n");
+ }
+ if (str == "YES")
+ show_instructions();
+ while (1) {
+ show_map();
+ while (1) {
+ print("WHERE WOULD YOU LIKE TO START");
+ m1 = parseInt(await input());
+ if (m1 == 0) {
+ print("\n");
+ print("IT LOOKS LIKE I HAVE WON BY FORFEIT.\n");
+ print("\n");
+ break;
+ }
+ t1 = Math.floor(m1 / 10);
+ u1 = m1 - 10 * t1;
+ if (u1 == 1 || u1 == t1)
+ break;
+ print("PLEASE READ THE DIRECTIONS AGAIN.\n");
+ print("YOU HAVE BEGUN ILLEGALLY.\n");
+ print("\n");
+ }
+ while (m1) {
+ if (m1 == 158) {
+ print("\n");
+ print("C O N G R A T U L A T I O N S . . .\n");
+ print("\n");
+ print("YOU HAVE WON--VERY WELL PLAYED.\n");
+ print("IT LOOKS LIKE I HAVE MET MY MATCH.\n");
+ print("THANKS FOR PLAYING--I CAN'T WIN ALL THE TIME.\n");
+ print("\n");
+ break;
+ }
+ computer_move();
+ print("COMPUTER MOVES TO SQUARE " + m + "\n");
+ if (m == 158) {
+ print("\n");
+ print("NICE TRY, BUT IT LOOKS LIKE I HAVE WON.\n");
+ print("THANKS FOR PLAYING.\n");
+ print("\n");
+ break;
+ }
+ print("WHAT IS YOUR MOVE");
+ while (1) {
+ m1 = parseInt(await input());
+ if (m1 == 0)
+ break;
+ t1 = Math.floor(m1 / 10);
+ u1 = m1 - 10 * t1;
+ p = u1 - u;
+ l = t1 - t;
+ if (m1 <= m || p == 0 && l <= 0 || p != 0 && l != p && l != 2 * p) {
+ print("\n");
+ print("Y O U C H E A T . . . TRY AGAIN");
+ continue;
+ }
+ break;
+ }
+ if (m1 == 0) {
+ print("\n");
+ print("IT LOOKS LIKE I HAVE WON BY FORFEIT.\n");
+ print("\n");
+ break;
+ }
+ }
+ while (1) {
+ print("ANYONE ELSE CARE TO TRY");
+ str = await input();
+ print("\n");
+ if (str == "YES" || str == "NO")
+ break;
+ print("PLEASE ANSWER 'YES' OR 'NO'.\n");
+ }
+ if (str != "YES")
+ break;
+ }
+ print("\n");
+ print("OK --- THANKS AGAIN.\n");
+}
+
+main();