Search code examples
javascriptfunctionloopsvariablesstore

storing value of a looped function into a variable , javascript


Hey all i need your help. In this rock paper scissor game the winner is the first to get to five wins between the user and computer. Although i have not looped this yet, i need help storing the counts of each win into a variable from my points() function into var playerPoints = 0 ; or var compPoints = 0 ; depending on who wins the round. if you have loop suggestions feel free to advice me on that as well! thanks

    //decalring an array with weapons of choice
    const weaponArray = ["rock", "paper", "scissors"];
    // selects a random index from array to represent computer choice
    const computerChoice = weaponArray[[Math.floor(Math.random() * weaponArray.length)]];
    //prompts user to make a choice of weapon
    const playerPrompt = prompt("Please enter Rock, Paper, or Scissors!");
    //lowers all alphabet input to lower case
    const playerChoice = playerPrompt.toLowerCase();
    
 

    
    //function runs player vs computer choices and determines winner of round
    const round = (computerChoice, playerChoice) => {
      if (playerChoice === "scissors" && computerChoice === "rock" || playerChoice === "rock" && computerChoice === "paper" || playerChoice ==="paper" && computerChoice === "scissors") {
      return "Just Give Up Now Looser!";
    }
      else if (playerChoice === "rock" && computerChoice === "scissors" || playerChoice === "paper" && computerChoice === "rock" || playerChoice==="scissors" && computerChoice === "paper")
      {
      return "You Won This Round!";
    }
    else {
      return "Its a Tie!";
    }
    };
    
    //stores round function value  into a variable 
    var state = round(computerChoice, playerChoice);
   
   
   // adds points to player or computer based on "state" value 
  const points = () => {
    if (state === "You Won This Round!"){
      return playerPoints + 1;
    }
    else if (state === "Just Give Up Now Looser!"){
      return compPoints + 1;
    }
    else{
      return null
    }
    
  };
   
   
    var playerPoints = points()  ;
    var compPoints = points()  ;
   
   
   
 console.log(state);
 console.log(points());
 //console.log(compPoints);
 //console.log(playerPoints);


Solution

  • Might as well add my answer here. I wouldn't use a prompt approach, but buttons instead. Store the scores in an object and use a conditional to check if someone has reached five points after each game:

    const userScore = document.querySelector('.user .score')
    const computerScore = document.querySelector('.computer .score')
    const resultContainer = document.querySelector('.result')
    const userThrowContainer = document.querySelector('.userThrow')
    const opponentThrowContainer = document.querySelector('.opponentThrow')
    const buttons = document.querySelectorAll('button')
    
    const score = {
      user: 0,
      computer: 0
    }
    
    function rpsMatch(userThrow) {
      // Define possible throws
      const throwOptions = [
        'rock',
        'paper',
        'scissors'
      ]
      
      // Choose randomly from array of throws
      let opponentThrow = throwOptions[Math.floor(Math.random() * throwOptions.length)]
      
      // Print user and computer throws
      userThrowContainer.innerText = `You threw ${userThrow}`
      opponentThrowContainer.innerText = `Computer threw ${opponentThrow}`
      
      function userWins() {
        resultContainer.innerText = 'You win'
        score.user++
        updateScores()
      }
      
      function computerWins() {
        resultContainer.innerText = 'You lose'
        score.computer++
        updateScores()
      }
      
      function updateScores() {
        userScore.innerText = score.user
        computerScore.innerText = score.computer
      }
      
      function resetScore() {
        userScore.innerText = 0
        computerScore.innerText = 0
        score.user = 0
        score.computer = 0
      }
      
      // RPS logic
      if (userThrow == opponentThrow) {
        resultContainer.innerText = 'You tied'
      } else {
        if (userThrow == 'rock') {
          opponentThrow == 'scissors' ? userWins() : computerWins()
        } else if (userThrow == 'paper') {
          opponentThrow == 'rock' ? userWins() : computerWins()
        } else {
          opponentThrow == 'paper' ? userWins() : computerWins()
        }
      }
      
      if (score.user === 5) {
        alert('You won the first to 5!')
        resetScore()
      }
      
      if (score.computer === 5) {
        alert('You lost the first to 5!')
        resetScore()
      }
    }
    
    // Attach event handlers to each button
    buttons.forEach(button => {
      button.addEventListener('click', e => {
        // Assign data attribute to variable
        let userThrow = e.target.dataset.type
        e.preventDefault()
        // Pass user selection to rpsMatch
        rpsMatch(userThrow)
      })
    })
    <div class="user">User Score: <span class="score">0</span></div>
    <div class="computer">Computer Score: <span class="score">0</span></div>
    <button data-type="rock">Rock</button>
    <button data-type="paper">Paper</button>
    <button data-type="scissors">Scissors</button>
    <div class="userThrow"></div>
    <div class="opponentThrow"></div>
    <div class="result"></div>