diff options
Diffstat (limited to 'tictactoe/morpion/auto.js')
-rwxr-xr-x | tictactoe/morpion/auto.js | 95 |
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); +}; |