我正在开发一个模拟二十一点游戏中的第一笔交易的项目。到目前为止,该程序创建了随机等级的两张随机等级卡(如2或3)。我正在努力创建一个切换表或if-else梯子来将两张卡的附加值分配为变量“得分”。教授创建了一个java .class,其中每个卡片等级被分配一个整数值(两个是第0张卡片,因此它的值为0,三张是第一张卡片,所以它的值为1)。我的问题是创建一个Score()方法来计算两张卡的实际添加分数。
if (card1.rank() == 0){
score = 2;
} else if (card1.rank() == 1){ //I need the program to examine both card1 and card2
score = 3;
} else if (card1.rank() == 2){
score = 4;
我只知道如何为一张卡分配一个新值,如何更改此代码,使其获取两张卡的值并返回正确的分数,而不仅仅是其中一张牌?非常感谢您的帮助,我将尽我所能快速回答任何问题以澄清。
答案 0 :(得分:1)
获得card1
的分数,然后获得card2
的分数,然后将这些相应的值加在一起(添加),这是您的累积分数。
int score = getScore(card1) + getScore(card2);
getScore(Card)
是您所指的switch
或if else
链。 或,您可以选择将getScore()
作为Card
课程的一部分,然后将其用作
int score = card1.getScore() + card2.getScore();
修改强>
return card1.getRank() + card2.getRank() + 4;
一张卡的得分为rank() + 2
。两张卡的分数为card1.rank() + 2
加card2.rank() + 2
或card1.getRank() + card2.getRank() + 4
。
答案 1 :(得分:0)
您的方法存在一些问题。使用整数来表示卡的等级很好,但是使用0 = deuce ... 12 = ace会使事情变得太复杂。更好的是1 = ace,2 = deuce,... 13 =国王。
例如,按照您的方式,单张卡的得分类似于:
int cardValue() {
if (this.rank == 12) return 1;
if (this.rank >= 8) return 10;
return this.rank + 2;
}
我的方式,这变成了:
int cardValue() {
if (this.rank >= 10) return 10;
return this.rank;
}
你的Score()
功能在不知名的地方。它在哪里适合你的对象结构?它不能是卡的方法,因为它应该只返回一张卡的分数。什么对象代表一手牌?那将是Score()方法的一个地方。如果你没有手持对象而只是使用卡片列表,那么Score()可能是卡片的静态方法,但它会将卡片列表作为参数。最后,Score()无法表示硬/软手。软17的得分与硬17的得分不同(例如,一些赌场击中一个而不是另一个)。
假设您有一个Hand对象,其中包含一组名为cards
的卡片。这是一种方式:
int handTotal() {
int total = 0;
boolean foundAce = false;
for (Card c: this.cards) {
total += c.cardValue();
if (c.cardValue() == 1) foundAce = true;
}
if (foundAce && total < 12) total += 10;
return total;
}