0

After picking Rock, Paper, or scissors, the computers choices stays the same. I want the computer choice to change after the player makes their choice instead of it just staying at one choice.

For example if the player picks "rock" and the computer picks "scissors", the computers choice would stay at scissors until i refresh the screen.

here is my javascript code:

my code
`//UI
`let userScore = 0;
let compScore = 0;

const userScoreSpan = document.getElementById("userScore");
const compScoreSpan = document.getElementById("compScore");
const rockDiv = document.getElementById("r");
const paperDiv = document.getElementById("p");
const scissorsDiv = document.getElementById("s");
const results = document.getElementById("result");

//UI

rockDiv.addEventListener("click", function () {
play("rock");
});
paperDiv.addEventListener("click", function () {
play("paper");
});
scissorsDiv.addEventListener("click", function () {
play("scissors");
});

// How the game functions
const options = \["rock", "paper", "scissors"\];
const computerSelection = computerPicks();

function computerPicks() {
const choice = options\[Math.floor(Math.random() \* options.length)\];
return choice;
}

function play(playerSelection) {
if (playerSelection == computerSelection) {
results.innerHTML = `Its a tie`;
} else if (
(playerSelection == "rock" && computerSelection == "scissors") ||
(playerSelection == "paper" && computerSelection == "rock") ||
(playerSelection == "scissors" && computerSelection == "paper")
) {
userScore++;
userScoreSpan.innerHTML = userScore;
results.innerHTML = `${playerSelection} beats ${computerSelection}`;
} else {
compScore++;
compScoreSpan.innerHTML = compScore;
results.innerHTML = `${computerSelection} beats ${playerSelection}`;
}
}

3 Answers3

0

Make the computer pick again

Before the final "}" in your code, add an extra line:

computerPicks();

That should do it.

ProfDFrancis
  • 8,816
  • 1
  • 17
  • 26
0

It's because you execute your computerPicks() just once at the start. Whenever you trigger the play function you should also execute that function again.

function play(playerSelection) {
  const computerSelection = computerPicks(); <- move inside the play function
  if (playerSelection == computerSelection) { }
}
Sam
  • 1,634
  • 13
  • 21
0

Here's an example to achieve your goal :

    let options = ["rock", "paper", "scissors"];
    let playerChoice = null;
    let computerChoice = null;
    let rock = null;
    let paper = null;
    let scissors = null;
    let playerDisplay = null;
    let computerDisplay = null;
    let displayResult = null;
    let playerScore = null;
    let computerScore = null;
    let playerScoreDisplay = null;
    let computerSoreDisplay = null;
    document.addEventListener("DOMContentLoaded",addListeners);
    function addListeners(){
        rock = document.getElementById("cell2_1_2");
        paper = document.getElementById("cell2_3_4")
        scissors = document.getElementById("cell2_5_6")
        playerDisplay = document.getElementById("cell3_1_3");
        computerDisplay = document.getElementById("cell3_4_6");
        displayResults = document.getElementById("cell4_1_6");
        playerScoreDisplay = document.getElementById("cell5_1_3");
        computerScoreDisplay = document.getElementById("cell5_4_6");
        playerScore = 0;
        computerScore = 0;
        displayScore();
        rock.addEventListener("click",() => {play(0);});
        paper.addEventListener("click",() => {play(1);});
        scissors.addEventListener("click",() => {play(2);});
    }
    function play(element){
        playerChoice = options[element];
        computerChoice = computerPlay();
        //alert("player = " + playerChoice + " computer = " + computerChoice);
        displayChoices();
        
    }
    function computerPlay(){
        var rnd = Math.floor(Math.random()*options.length);
        var result = options[rnd];
        return result;
    }
    function displayChoices(){
        playerDisplay.innerHTML = ("player = " + playerChoice);
        computerDisplay.innerHTML = ("computer = " + computerChoice);
        computeScore();
    }
    function computeScore(){
        if (playerChoice == computerChoice) {
            displayResults.innerHTML = "Its a tie";
        }else if(
            (playerChoice == "rock" && computerChoice == "scissors") ||
            (playerChoice == "paper" && computerChoice == "rock") ||
            (playerChoice == "scissors" && computerChoice == "paper")
        ){
            displayResults.innerHTML = playerChoice + " beats " + computerChoice;
            playerScore+=1;
        }else{
            displayResults.innerHTML = computerChoice + " beats " + playerChoice;
            computerScore+=1;
        }
displayScore();
    }
    function displayScore(){
        playerScoreDisplay.innerHTML = "player score = " + playerScore;
        computerScoreDisplay.innerHTML = "computer score = " + computerScore;
    }
    #gameDisplay{
        display:grid;
        grid-template-columns: repeat(6,100px);
        grid-template-rows: repeat(5,50px);
        font-family: sans-serif;
        justify-content: center;
        align-content: center;
    }
    #cell1_1_6{
        display:grid;
        justify-content: center;
        align-content: center;
        grid-column-start: 1;
        grid-column-end: 7;
        border:1px solid #000000;
    }
    #cell2_1_2{
        cursor: pointer;
        display:grid;
        justify-content: center;
        align-content: center;
        grid-column-start: 1;
        grid-column-end: 3;
        border:1px solid #000000;
    }
    #cell2_3_4{
        cursor: pointer;
        display:grid;
        justify-content: center;
        align-content: center;
        grid-column-start: 3;
        grid-column-end: 5;
        border:1px solid #000000;
    }
    #cell2_5_6{
        cursor: pointer;
        display:grid;
        justify-content: center;
        align-content: center;
        grid-column-start: 5;
        grid-column-end: 7;
        border:1px solid #000000;
    }
    #cell3_1_3{
        display:grid;
        justify-content: center;
        align-content: center;
        grid-column-start: 1;
        grid-column-end: 4;
        border:1px solid #000000;
    }
    #cell3_4_6{
        display:grid;
        justify-content: center;
        align-content: center;
        grid-column-start: 4;
        grid-column-end: 7;
        border:1px solid #000000;
    }
    #cell4_1_6{
        display:grid;
        justify-content: center;
        align-content: center;
        grid-column-start: 1;
        grid-column-end: 7;
        border:1px solid #000000;
    }
    #cell5_1_3{
        display:grid;
        justify-content: center;
        align-content: center;
        grid-column-start: 1;
        grid-column-end: 4;
        border:1px solid #000000;
    }
    #cell5_4_6{
        display:grid;
        justify-content: center;
        align-content: center;
        grid-column-start: 4;
        grid-column-end: 7;
        border:1px solid #000000;
    }
    <div id="gameDisplay">
        <div id="cell1_1_6"><h1>Pick a choice below</h1></div>
        <div id="cell2_1_2">ROCK</div>
        <div id="cell2_3_4">PAPER</div>
        <div id="cell2_5_6">SCISSORS</div>
        <div id="cell3_1_3">player</div>
        <div id="cell3_4_6">computer</div>
        <div id="cell4_1_6">result</div>
        <div id="cell5_1_3">player score</div>
        <div id="cell5_4_6">computer score</div>
    </div>
tatactic
  • 1,379
  • 1
  • 9
  • 18