【问题标题】:Array keeps resetting back to original quantity on click单击时阵列不断重置回原始数量
【发布时间】:2022-11-20 06:58:50
【问题描述】:

我正在开发一款纸牌游戏,并且大部分时间都在进行中。它洗牌,并将牌组分成两部分(第一张 26 张牌给玩家 1,另一半给玩家 2)。我的问题是,当一个玩家获胜时,他们应该从另一个玩家手中获得一张牌。 (player1Cards.push(player2Cards[card])) - 这是有效的,但由于游戏的设置,每次你点击播放整个游戏都会重置。

有没有一种方法可以做到,一旦卡片被推送,它就会留在 winners 数组中,而不是每次都刷新?

我尝试将 shuffle for 循环放入一个函数中,但它不会读取我的任何变量。

function start() {  

    //Deck with ranks:

    let starterDeck = [
        {"img": '2_of_clubs.png',"rank": 1},{"img": '3_of_clubs.png',"rank": 2},{"img": '4_of_clubs.png',"rank": 3},{"img": '5_of_clubs.png',"rank": 4},{"img": '6_of_clubs.png',"rank": 5},{"img": '7_of_clubs.png',"rank": 6},{"img": '8_of_clubs.png',"rank": 7},{"img": '9_of_clubs.png',"rank": 8},{"img": '10_of_clubs.png',"rank": 9},{"img": 'jack_of_clubs.png',"rank": 10},{"img": 'queen_of_clubs.png',"rank": 11},{"img": 'king_of_clubs.png',"rank": 12},{"img": 'ace_of_clubs.png',"rank": 13},    {"img": '2_of_diamonds.png',"rank": 1},{"img": '3_of_diamonds.png',"rank": 2},{"img": '4_of_diamonds.png',"rank": 3},{"img": '5_of_diamonds.png',"rank": 4},{"img": '6_of_diamonds.png',"rank": 5},{"img": '7_of_diamonds.png',"rank": 6},{"img": '8_of_diamonds.png',"rank": 7},{"img": '9_of_diamonds.png',"rank": 8},{"img": '10_of_diamonds.png',"rank": 9},{"img": 'jack_of_diamonds.png',"rank": 10},{"img": 'queen_of_diamonds.png',"rank": 11},{"img": 'king_of_diamonds.png',"rank": 12},{"img": 'ace_of_diamonds.png',"rank": 13},    {"img": '2_of_hearts.png',"rank": 1},{"img": '3_of_hearts.png',"rank": 2},{"img": '4_of_hearts.png',"rank": 3},{"img": '5_of_hearts.png',"rank": 4},{"img": '6_of_hearts.png',"rank": 5},{"img": '7_of_hearts.png',"rank": 6},{"img": '8_of_hearts.png',"rank": 7},{"img": '9_of_hearts.png',"rank": 8},{"img": '10_of_hearts.png',"rank": 9},{"img": 'jack_of_hearts.png',"rank": 10},{"img": 'queen_of_hearts.png',"rank": 11},{"img": 'king_of_hearts.png',"rank": 12},{"img": 'ace_of_hearts.png',"rank": 13},    {"img": '2_of_spades.png',"rank": 1},{"img": '3_of_spades.png',"rank": 2},{"img": '4_of_spades.png',"rank": 3},{"img": '5_of_spades.png',"rank": 4},{"img": '6_of_spades.png',"rank": 5},{"img": '7_of_spades.png',"rank": 6},{"img": '8_of_spades.png',"rank": 7},{"img": '9_of_spades.png',"rank": 8},{"img": '10_of_spades.png',"rank": 9},{"img": 'jack_of_spades.png',"rank": 10},{"img": 'queen_of_spades.png',"rank": 11},{"img": 'king_of_spades.png',"rank": 12},{"img": 'ace_of_spades.png',"rank": 13},
       ]

    //Shuffled Our Deck:
           for(let i=0;i<52; i++) {
            // We are taking our tempCard and placing it in the random position (randomIndex)
                    let shuffledCards = starterDeck[i];
                    let randomIndex = Math.floor(Math.random() * 52);
                    starterDeck[i] = starterDeck[randomIndex]
                    starterDeck[randomIndex] = shuffledCards;
                }
            //console.log(starterDeck)
    

    //Make it random out of the 26 cards received by players:
    let card = Math.floor(Math.random() * 26)

    //Player 1 gets the first 26 cards from the random shuffled deck. 
    let player1Cards = starterDeck.splice(26)

    //Place the image
      let selectedCardImg = [player1Cards[card].img]
      document.getElementById('p1Card').src = "./images/cards/" + selectedCardImg

      //Player 2 gets the last 26 cards from the random shuffled deck. 
      let player2Cards = starterDeck.splice(-26)

      //console.log(player2Cards)
      console.log('PLAYER 1 CARD')
      console.log(player1Cards[card])

      console.log('PLAYER 2 CARD')
      console.log(player2Cards[card])
    
      //Place the image
      let selectedCardImg2 = [player2Cards[card].img]
      document.getElementById('p2Card').src = "./images/cards/" + selectedCardImg2
   
 
      if (player1Cards[card].rank < player2Cards[card].rank){
        //alert("Player 2 Wins")
        player2Cards.push(player1Cards[card])
        console.log(player2Cards)
    } else if (player1Cards[card].rank > player2Cards[card].rank){
   
       // alert("Player 1 wins")
       player1Cards.push(player2Cards[card])
       console.log(player1Cards)
    } else {
       // alert("TIE!")
       console.log('Tie!');

    }

      
   

  
}
    
  
   
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>War</title>
</head>
<body>
    <div> Game</div>
    <img src="./images/cards/black_joker.png" height="300px" id="p1Card">
    <img src="./images/cards/red_joker.png" height="300px" id="p2Card">

    <input type="text" readonly id="player1Score"/>
    <input type="text" readonly id="player2Score"/>
    <button onclick = "start()">play me</button>  

<script src="https://code.jquery.com/jquery-3.6.1.min.js" integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script>
<script src="./js/index.js"></script>
</body>
</html>

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您至少需要一个函数来初始化游戏和发牌,以及另一个函数来玩每一轮。我已经重新安排了您的部分代码。

    // globals
    var player1Cards
    var player2Cards
    
    function initialize_game() {
    
    
      //Deck with ranks:
      const starterDeck=[{img:"2_of_clubs.png",rank:1},{img:"3_of_clubs.png",rank:2},{img:"4_of_clubs.png",rank:3},{img:"5_of_clubs.png",rank:4},{img:"6_of_clubs.png",rank:5},{img:"7_of_clubs.png",rank:6},{img:"8_of_clubs.png",rank:7},{img:"9_of_clubs.png",rank:8},{img:"10_of_clubs.png",rank:9},{img:"jack_of_clubs.png",rank:10},{img:"queen_of_clubs.png",rank:11},{img:"king_of_clubs.png",rank:12},{img:"ace_of_clubs.png",rank:13},{img:"2_of_diamonds.png",rank:1},{img:"3_of_diamonds.png",rank:2},{img:"4_of_diamonds.png",rank:3},{img:"5_of_diamonds.png",rank:4},{img:"6_of_diamonds.png",rank:5},{img:"7_of_diamonds.png",rank:6},{img:"8_of_diamonds.png",rank:7},{img:"9_of_diamonds.png",rank:8},{img:"10_of_diamonds.png",rank:9},{img:"jack_of_diamonds.png",rank:10},{img:"queen_of_diamonds.png",rank:11},{img:"king_of_diamonds.png",rank:12},{img:"ace_of_diamonds.png",rank:13},{img:"2_of_hearts.png",rank:1},{img:"3_of_hearts.png",rank:2},{img:"4_of_hearts.png",rank:3},{img:"5_of_hearts.png",rank:4},{img:"6_of_hearts.png",rank:5},{img:"7_of_hearts.png",rank:6},{img:"8_of_hearts.png",rank:7},{img:"9_of_hearts.png",rank:8},{img:"10_of_hearts.png",rank:9},{img:"jack_of_hearts.png",rank:10},{img:"queen_of_hearts.png",rank:11},{img:"king_of_hearts.png",rank:12},{img:"ace_of_hearts.png",rank:13},{img:"2_of_spades.png",rank:1},{img:"3_of_spades.png",rank:2},{img:"4_of_spades.png",rank:3},{img:"5_of_spades.png",rank:4},{img:"6_of_spades.png",rank:5},{img:"7_of_spades.png",rank:6},{img:"8_of_spades.png",rank:7},{img:"9_of_spades.png",rank:8},{img:"10_of_spades.png",rank:9},{img:"jack_of_spades.png",rank:10},{img:"queen_of_spades.png",rank:11},{img:"king_of_spades.png",rank:12},{img:"ace_of_spades.png",rank:13},];
    
      //Shuffled Our Deck:
      for (let i = 0; i < 52; i++) {
        // We are taking our tempCard and placing it in the random position (randomIndex)
        let shuffledCards = starterDeck[i];
        let randomIndex = Math.floor(Math.random() * 52);
        starterDeck[i] = starterDeck[randomIndex]
        starterDeck[randomIndex] = shuffledCards;
      }
      //console.log(starterDeck)
    
      //Player 1 gets the first 26 cards from the random shuffled deck. 
      player1Cards = starterDeck.splice(26)
    
      //Player 2 gets the last 26 cards from the random shuffled deck. 
      player2Cards = starterDeck.splice(-26)
    }
    
    function start_round() {
      
      //Make it random out of the 26 cards received by players:
      let card = Math.floor(Math.random() * 26)
    
      //Place the image
      let selectedCardImg = [player1Cards[card].img]
      document.getElementById('p1Card').src = "./images/cards/" + selectedCardImg
    
      //console.log(player2Cards)
      console.log('PLAYER 1 CARD')
      console.log(player1Cards[card])
    
      console.log('PLAYER 2 CARD')
      console.log(player2Cards[card])
    
      //Place the image
      let selectedCardImg2 = [player2Cards[card].img]
      document.getElementById('p2Card').src = "./images/cards/" + selectedCardImg2
    
      if (player1Cards[card].rank < player2Cards[card].rank) {
        //alert("Player 2 Wins")
        player2Cards.push(player1Cards[card])
        console.log(player2Cards)
      } else if (player1Cards[card].rank > player2Cards[card].rank) {
    
        // alert("Player 1 wins")
        player1Cards.push(player2Cards[card])
        console.log(player1Cards)
      } else {
        // alert("TIE!")
        console.log('Tie!');
    
      }
    
    }
    
    initialize_game();
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>War</title>
    </head>
    
    <body>
      <div> Game</div>
      <img src="./images/cards/black_joker.png" height="300px" id="p1Card">
      <img src="./images/cards/red_joker.png" height="300px" id="p2Card">
    
      <input type="text" readonly id="player1Score" />
      <input type="text" readonly id="player2Score" />
      <button onclick="start_round()">play me</button>
    
      <script src="https://code.jquery.com/jquery-3.6.1.min.js" integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script>
      <script src="./js/index.js"></script>
    </body>
    
    </html>

    【讨论】:

      【解决方案2】:

      您可以开始在浏览器 localStorage 或 sessionStorage 中保存游戏状态。

      设置玩家的最终状态:

      localStorage.setItem("player1Cards", player1Cards);
      localStorage.setItem("player2Cards", player2Cards);
      

      当游戏重新启动时,您可以从 localStorage 中获取它的卡片:

      localStorage.getItem("player1Cards");
      localStorage.getItem("player2Cards");
      

      https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

      【讨论】:

        猜你喜欢
        • 2023-03-26
        • 1970-01-01
        • 2013-12-03
        • 2015-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多