我被要求用javascript创建战争游戏(所有内容都加载在警报框中)。我有一个回合,但是直到我让牌正确加载和得分之前,还没有开始循环或“战争”。
我在为J,Q,K等非编号卡而苦苦挣扎。
这是一门非常入门的课程,我对这门课程很陌生。非常感谢您的帮助。
这是我的代码:
var userName = prompt("what's your name?");
alert("Hi " + userName + ". Let's Play War!");
var computerScore = 26;
var userScore = 26;
var suits = ["Spades", "Hearts", "Clubs", "Diamonds"];
var cards = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];
var computerCard = cards[Math.floor(Math.random()*cards.length)];
var computerSuit = suits[Math.floor(Math.random()*suits.length)];
var userCard = cards[Math.floor(Math.random()*cards.length)];
var userSuit = suits[Math.floor(Math.random()*suits.length)];
if (computerCard >= 11 || userCard >= 11)
{
cards[9] = "Jack";
cards[10] = "Queen";
cards[11] = "King";
cards[12] = "Ace";
}
alert("I drew a " + computerCard + " of " + computerSuit + " and you drew a " + userCard + " of " + userSuit);
if (computerCard > userCard)
{
computerScore++;
alert("I win. \nThe score is now " + computerScore + " to" + userScore + ".\nDeal Again");
}
else
{
userScore++;
alert("You win. \nThe score is now " + computerScore + " to" + userScore + ".\nDeal Again");
}
答案 0 :(得分:1)
您需要的是一种将卡的显示值(例如“ 7”或“杰克”)与其点值(分别为7或11)相关联的方法。也许最明确的方法是创建类似这样的内容:
const cardValues = {'2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9,
'10': 10, 'Jack': 11, 'Queen': 12, 'King': 13, 'Ace': 14}
但这不是实现此目的的唯一方法,实际上,将其与您已有的代码一起使用可能会更加困难。您只需要比较值以查看更大的值,而实际上并不需要那些显式的值,这表明结构更简单,数组更简单
const cards = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King', 'Ace']
然后,您可以使用computerIndex = Math.floor(Math.random() * cards.length);
和computerCard = cards[computerIndex]
,对userIndex
和userCard
进行同样的操作,然后将比较结果替换为if (computerIndex > userIndex)
这绝不是做这样的事情的唯一方法。但我认为这是对当前代码的最简单的工作更改。