var games = 0; var wins = 0; var ties = 0; var losses = 0; var last_round = -1; // I start with 2 instead of 0 so that there is a bias towards uniform randomness at the beginning var markov = [ [ 2, 2, 2 ], [ 2, 2, 2 ], [ 2, 2, 2 ], [ 2, 2, 2 ], [ 2, 2, 2 ], [ 2, 2, 2 ], [ 2, 2, 2 ], [ 2, 2, 2 ], [ 2, 2, 2 ] ]; function rock() { document.getElementById("player").innerText = document.createTextNode("✊").textContent; appear(0); } function paper() { document.getElementById("player").innerText = document.createTextNode("✋").textContent; appear(1); } function scissors() { document.getElementById("player").innerText = document.createTextNode("✌").textContent; appear(2); } function appear(player) { document.getElementById("versus").style.display = "block"; games += 1; document.getElementById("win_expected").innerText = document.createTextNode(Math.round(games / 3)).textContent; document.getElementById("tie_expected").innerText = document.createTextNode(Math.round(games / 3)).textContent; document.getElementById("loss_expected").innerText = document.createTextNode(Math.round(games / 3)).textContent; switch (calcWinner(player, calcComputer())) { case -1: wins += 1; document.getElementById("win").innerText = document.createTextNode(wins).textContent; break; case 0: ties += 1; document.getElementById("tie").innerText = document.createTextNode(ties).textContent; break; case 1: losses += 1; document.getElementById("loss").innerText = document.createTextNode(losses).textContent; break; } } function calcComputer() { console.log("last round:" + last_round); var rock = 1; var paper = 1; var scissors = 1; if (last_round !== -1) { rock = markov[last_round][0]; paper = markov[last_round][1]; scissors = markov[last_round][2]; console.log("odds:"); console.log(rock); console.log(paper); console.log(scissors); } var total = rock + paper + scissors; var random = Math.random(); console.log(random); if (random <= rock/total) { document.getElementById("com").innerText = document.createTextNode("✋").textContent; return 1; // return paper } if (random <= (rock + paper)/total) { document.getElementById("com").innerText = document.createTextNode("✌").textContent; return 2; // return scissors } document.getElementById("com").innerText = document.createTextNode("✊").textContent; return 0; // return rock } function calcWinner(player, computer) { console.log("player: " + player); console.log("computer: " + computer); if (last_round !== -1) { markov[last_round][player]++; console.log("incremented markov[" + last_round + "][" + player + "]"); } last_round = 3 * player + computer; if (player > computer || player === 0 && computer === 2) { document.getElementById("result").innerText = document.createTextNode("Player Wins").textContent; return -1; } else if (player < computer || player === 2 && computer === 0) { document.getElementById("result").innerText = document.createTextNode("Computer Wins").textContent; return 1; } else { document.getElementById("result").innerText = document.createTextNode("Tie").textContent; return 0; } }