summaryrefslogtreecommitdiff
path: root/tictactoe/morpion/auto.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2022-05-07 16:12:58 +0200
committerMinteck <contact@minteck.org>2022-05-07 16:12:58 +0200
commit1f8e9aab02a849f64aa6069a04cbabaf5993c65a (patch)
tree0581705f7baba7921e1755c68d4325660d467503 /tictactoe/morpion/auto.js
downloadarcade-1f8e9aab02a849f64aa6069a04cbabaf5993c65a.tar.gz
arcade-1f8e9aab02a849f64aa6069a04cbabaf5993c65a.tar.bz2
arcade-1f8e9aab02a849f64aa6069a04cbabaf5993c65a.zip
Initial commit
Diffstat (limited to 'tictactoe/morpion/auto.js')
-rwxr-xr-xtictactoe/morpion/auto.js95
1 files changed, 95 insertions, 0 deletions
diff --git a/tictactoe/morpion/auto.js b/tictactoe/morpion/auto.js
new file mode 100755
index 0000000..7a0af60
--- /dev/null
+++ b/tictactoe/morpion/auto.js
@@ -0,0 +1,95 @@
+allData = "";
+totalGames = 0;
+gamesLost = 0;
+gamesWon = 0;
+gamesNone = 0;
+
+window.addEventListener("load", () => {
+ if (location.hash === "#/auto") {
+ document.getElementById("stat-played").innerText = "0";
+ document.getElementById("auto-stats").style.display = "";
+ autoStartGame();
+ }
+});
+
+function aPlayInitial() {
+ empty = grid().map((e, i) => { if (e === "") { return i + 1; } else { return null; } }).filter(i => i !== null);
+ cell = empty[Math.floor(Math.random()*empty.length)];
+ document.getElementById("p" + cell).style.color = "red";
+ document.getElementById("p" + cell).innerText = "X";
+ document.getElementById("wait").style.display = "none";
+ document.getElementById("p" + cell).style.cursor = "no-drop";
+}
+
+function autoStartGame() {
+ train();
+ document.getElementById("game").style.backgroundColor = "#550000";
+ document.getElementById("stat-goal").style.display = "none";
+ document.getElementById("instructions").style.opacity = "0";
+ aPlayInitial()
+ trainingMain = false
+ autoInterval = setInterval(() => {
+ gridBefore = grid();
+
+ if (!playable) {
+ totalGames++;
+ if (document.getElementById("stat-state").innerText.startsWith("SUCCESS")) gamesWon++;
+ if (document.getElementById("stat-state").innerText.startsWith("NONE")) gamesNone++;
+ if (document.getElementById("stat-state").innerText.startsWith("FAILURE")) gamesLost++;
+
+ document.getElementById("ast-success").innerText = ((gamesWon / totalGames) * 100).toFixed(2) + "%";
+ document.getElementById("ast-failure").innerText = ((gamesLost / totalGames) * 100).toFixed(2) + "%";
+ document.getElementById("ast-none").innerText = ((gamesNone / totalGames) * 100).toFixed(2) + "%";
+ document.getElementById("ast-nofail").innerText = (((gamesNone + gamesWon) / totalGames) * 100).toFixed(2) + "%";
+
+ document.getElementById("bar-value-success").style.width = ((gamesWon / totalGames) * 100).toFixed(2) + "%";
+ document.getElementById("bar-value-failure").style.width = ((gamesLost / totalGames) * 100).toFixed(2) + "%";
+ document.getElementById("bar-value-none").style.width = ((gamesNone / totalGames) * 100).toFixed(2) + "%";
+
+ document.getElementById("bar2-value-success").style.width = (((gamesWon + gamesNone) / totalGames) * 100).toFixed(2) + "%";
+ document.getElementById("bar2-value-failure").style.width = ((gamesLost / totalGames) * 100).toFixed(2) + "%";
+
+ document.getElementById("stat-played").innerText = document.getElementById("stat-played").innerText - 1 + 2;
+ clearInterval(autoInterval);
+ document.getElementById("last-games").innerText = (new Date().toISOString() + " " + document.getElementById("stat-state").innerText + "\n" + document.getElementById("last-games").innerText).substring(0, 1007);
+ setTimeout(() => {
+ el = document.getElementById("game");
+ el.outerHTML = document.getElementsByClassName("game-template")[0].outerHTML;
+ el = document.getElementsByClassName("game-template")[0];
+ el.id = "game";
+ el.classList.remove("game-template");
+ el.style.display = "";
+ playable = true;
+ document.getElementById("stat-thought").innerText = "0";
+ document.getElementById("stat-random").innerText = "0";
+ document.getElementById("stat-randomness").innerText = "0.00%";
+ document.getElementById("stat-state").innerText = "NONE";
+ document.getElementById("instructions").innerText = "// ML Model Training\nmodel.addTrainedGame();";
+ autoStartGame();
+ });
+ return;
+ }
+
+ if (trainingMain) {
+ model.thinkrev();
+ trainingMain = false
+ } else {
+ model.think();
+ trainingMain = true
+ }
+ });
+}
+
+function integrateModelChanges() {
+ if (location.hash !== "#/auto") return;
+ code = document.getElementById("instructions").innerText;
+ eval(code);
+ allData += "\n\n" + code;
+ console.clear();
+ console.log(allData);
+ model.init();
+}
+
+function stop() {
+ clearInterval(autoInterval);
+};