【问题标题】:JavaScript Card GameJavaScript 纸牌游戏
【发布时间】:2016-05-11 10:59:39
【问题描述】:

我正在尝试制作纸牌游戏。玩家 1 和玩家 2 随机获得一张牌,拥有最高牌的人获胜。下面是一组卡片(黑桃)的简单数组。我已将卡片的图像文件保存在名为“images”的文件夹中,如下所示。

我的问题是:如何让这个数组显示牌,并随机分配一张牌给两个玩家,并获得最高牌的胜利?我知道可能需要if/else/else if 声明来确定获胜者,但我该如何将我的牌组分配给两个玩家?会是某种功能吗?下面是我创建的数组:

var cards = [];   //variable for cards 

cards [0] = 'images/aceofspades.jpg';
cards [1] = 'images/twoofspades.jpg';
cards [2] = 'images/threeofspades.jpg';
cards [3] = 'images/fourofspades.jpg';
cards [4] = 'images/fiveofspades.jpg';
cards [5] = 'images/sixofspades.jpg';
cards [6] = 'images/sevenofspades.jpg';
cards [7] = 'images/eightofspades.jpg';
cards [8] = 'images/nineofspades.jpg';
cards [9] = 'images/tenofspades.jpg';
cards [10] = 'images/jackofspades.jpg';
cards [11] = 'images/queenofspades.jpg';
cards [12] = 'images/kingofspades.jpg';

下面这段代码是我对下一步做什么的想法,但我不确定这是否正确:

function choose (cards);
document.image [cards].src = cardsimage [cards];

【问题讨论】:

  • 我建议研究随机数生成。在 JavaScript 中是 Math.random(),但是您需要将其修改为介于 0 和 12 之间。
  • 请不要破坏您的问题。

标签: javascript arrays


【解决方案1】:

试试这个代码。阅读 cmets 进行解释

// All cards:
var cards = [
  'https://upload.wikimedia.org/wikipedia/commons/thumb/3/36/Playing_card_club_A.svg/2000px-Playing_card_club_A.svg.png',
  'https://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/Playing_card_spade_2.svg/819px-Playing_card_spade_2.svg.png',
  'http://www.clipartbest.com/cliparts/9T4/ezn/9T4eznrjc.png',
];

function play() {
  // get random position. Math.random returns float between 0 and 1
  var p1 = Math.floor(Math.random() * cards.length); // will get integet between 0 and cards.length - 1
  var p2 = Math.floor(Math.random() * cards.length);

  // create new image element
  var img1 = document.createElement('img');
  var img2 = document.createElement('img');

  // set image source to be same as selected card
  img1.src = cards[p1];
  img2.src = cards[p2];

  // select cards holding elements
  var holder1 = document.getElementById('card1');
  var holder2 = document.getElementById('card2');

  // clear images from previous game
  holder1.innerHTML = "";
  holder2.innerHTML = "";

  // add images to it's holders
  holder1.appendChild(img1);
  holder2.appendChild(img2);

  // game logic. Compare array key to see who wins
  if (p1 > p2) {
    alert('Player 1 is winner!');
  } else if (p1 < p2) {
    alert('Player 2 is winner!');
  } else {
    alert('No winner!');
  }
}
.p1,
.p2 {
  float: left;
  width: 200px;
  height: 250px;
  box-sizing: border-box;
  border: 1px solid #ddd;
  text-align: center;
}
img {
  height: 200px;
  display: inline-block;
}
button {
  width: 400px;
  font-size: 16px;
  color: white;
  background-color: #0040ff;
  border: 1px solid #7878ff;
  cursor: pointer;
}
<div class="play">
  <button onClick="play()">PLAY</button>
</div>
<div class="p1">
  <div class="header">Player 1</div>
  <span class="card-holder" id="card1"></span>
</div>
<div class="p2">
  <div class="header">Player 2</div>
  <span class="card-holder" id="card2"></span>
</div>

【讨论】:

  • 嗨,我知道变量是 3 张牌,黑桃 A,黑桃 2 和黑桃 3,但是即使我在我的 .css 文件中使用了 img - height 200px,它们也不会调整大小如果我保存图像并将图像文件夹的链接复制到名为 var 卡的数组中会更好?
【解决方案2】:

您使用document.getElementById(id).src = cards[0]; 设置src。 https://jsfiddle.net/stevenkaspar/490zm66v/

function startRound() {
 var p1_card_index = Math.floor(Math.random() * 13);// random bt 0-13
 var p2_card_index = p1_card_index;
 // make sure same card isn't drawn again
 while (p2_card_index == p1_card_index) {
  p2_card_index = Math.floor(Math.random() * 13);
 }
 // set the src and the alt of the <img/>
 document.getElementById('c1').src = cards[p1_card_index];
 document.getElementById('c1').alt = cards[p1_card_index];
 document.getElementById('c2').src = cards[p2_card_index];
 document.getElementById('c2').alt = cards[p2_card_index];

 // determine who won and give them points
 if (p1_card_index > p2_card_index) {
  p1_wins++;
  document.getElementById('w1').innerHTML = p1_wins;
 } else {
  p2_wins++;
  document.getElementById('w2').innerHTML = p2_wins;
 }
}

【讨论】:

  • 我为我的游戏制作了一个 .css 和 .js 和 .html 文件,这段代码似乎可以运行,但是在 jsfiddle 中时,但是当我使用 alt-shift-j 命令在 notepad++ 中加载它时,它说chastheace.js:40 Uncaught TypeError: Cannot read property 'addEventListener' of null ??谢谢
  • 对不起。查看更新的 jsfiddle。您需要添加一个文档侦听器,以便在脚本尝试addEventListener 时加载该按钮
  • 干杯伙伴,problelm 现在是第 26 行,无法设置属性 'src' of null
  • 你有id='c1'的元素吗?
【解决方案3】:

    <style>
        .cards {
            width: 200px;
            height: 200px;
        }

        img {
            width: 100%;
            height: 100%;
        }

        #showWinner {
            width: 200px;
            height: 30px;   
        }
    </style>

    <script type="javascript/text">
        $(document).ready(function(){
            var cardPlayer1 = 0;
            var cardPlayer2 = 0;
            var cards = [];   //variable for cards 

            cards [0] = 'images/aceofspades.jpg';
            cards [1] = 'images/twoofspades.jpg';
            cards [2] = 'images/threeofspades.jpg';
            cards [3] = 'images/fourofspades.jpg';
            cards [4] = 'images/fiveofspades.jpg';
            cards [5] = 'images/sixofspades.jpg';
            cards [6] = 'images/sevenofspades.jpg';
            cards [7] = 'images/eightofspades.jpg';
            cards [8] = 'images/nineofspades.jpg';
            cards [9] = 'images/tenofspades.jpg';
            cards [10] = 'images/jackofspades.jpg';
            cards [11] = 'images/queenofspades.jpg';
            cards [12] = 'images/kingofspades.jpg';

            $("#startGame").on("click",function(){
                $("#cardPlayer1").attr("src", '');
                $("#cardPlayer2").attr("src", '');
                $("#showWinner").html("");
                getPlayerCards();
            }); 
        });

        function getRandom() {
            var randomNumber = Math.floor(Math.random() * 12) //Get random between 0 and 12
            return randomNumber;
        }

        function getPlayerCards() {
            this.cardPlayer1 = this.getRandom();
            this.cardPlayer2 = this.getRandom();                
        }

        function displayCards() {
            $("#cardPlayer1").attr("src", '"' + cards[this.cardPlayer1] + '"'); //PUT URL PLAYER 1 TO IMG
            $("#cardPlayer2").attr("src", '"' + cards[this.cardPlayer2] + '"'); //PUT URL PLAYER 2 TO IMG

            if(this.cardPlayer1 > this.cardPlayer2) {
                $("#showWinner").html("Player 1 wins!");
            } else if (this.cardPlayer1 < this.cardPlayer2) {
                $("#showWinner").html("Player 2 wins!");
            } else {
                $("#showWinner").html("Player 2 wins!");
            }
        }
    </script>
<head>

<body>
    <img id="cardPlayer1" class="cards">

    <img id="cardPlayer2" class="cards">

    <div id="showWinner"></div>

    <button id="startGame">Get new cards</button>
</body>

也许这样的东西可行..你可以用它来试试(也许有一些错误,我编码得很快,没有检查它是否有效:D)

最好的问候

【讨论】:

  • OP问题中没有jQuery标签
  • 函数 getPlayerCards() { this.cardPlayer1 = this.getRandom(); this.cardPlayer2 = this.getRandom(); } 删除时
  • 你知道你可以编辑你的答案而不是用丑陋的代码格式编写 cmets 吗?
猜你喜欢
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多