Java的二十一点游戏王牌价值
问题描述:
我有麻烦我的王牌的值设置为1名或11.我的教授说这样对我,当我问他是怎么做到这一点:Java的二十一点游戏王牌价值
一个王牌的价值取决于在你手中的其他牌上。你必须首先添加所有其他牌,然后决定ACE是否应该算作一个或十一个。你应该在你的手类中有一个方法(我使用了玩家类),这个方法叫做“价值”,它决定了你的手的价值。在该方法内部将是确定一个ace是一个还是十一个的逻辑。
还不完全确定如何去做。
class Card
{
private char suit;
private char rank;
private boolean facedown;
Card (char R, char S)
{
rank = R;
suit = S;
}
public int value()
{
int index = 0;
int [] valueArray = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10
};
char [] suitArray = {
'A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'
};
while (rank != suitArray[index]) {
index++;
}
return valueArray [index];
}
}
class Player
{
private Card [] storage;
private int top;
public Player()
{
storage = new Card[20];
top = 0;
}
public void take(Card c1)
{
storage[top] = c1;
top++;
}
public int value()
{
}
}
答
一旦你意识到一件事情就很容易处理二十一点的王牌:这绝不是玩家的选择。王牌数一;如果你的手牌中包含一张王牌,并且总数小于或等于11,那么一张王牌将晋升为11.从来没有多于一张王牌算作11,如果有必要,玩家也不会这么做。
但是,即使值本身是由规则决定的,而不是由选择决定的,“软”18和“硬”18之间仍然存在很大差异,所以如果你的值函数只返回数字18它没有完成它的工作。由于Java,C和其他语言不会让函数返回布尔值和int,所以您可能希望让函数以某种方式潜入布尔值中,如使用结果的符号位(使软值为负) ,或者添加一个固定的偏移量(比如,将软值加100)。
所以这里的一些伪代码:
soft = false
found_ace = false
total = 0
for each card in hand:
if ace:
total += 1
found_ace = true
elseif facecard:
total += 10
else:
total += card value
if found_ace and total < 12:
total += 10
soft = true
return soft, total
看起来不像你已经尝试过这么远。先试一试,调试一下,看看你能做什么。将手中的牌值加起来,如果加入额外的11会导致你破产,那么你的Ace应该是1。如果你仍然失败,你会让你的球员在21上“命中”,这是错误的。 – CubeJockey
我建议使用常量来计算卡片数值。一个枚举可能是CARD_ACE,CARD_KING等等。从这点出发的逻辑应该是非常简单的,正如@Trobbins – CollinD
所说的那样。它看起来像是有两次相同签名的'value()'方法,这会导致编译器错误。 –