我无法将我的Ace卡值设置为1或11.当我问他怎么做时,我的教授对我说:
ace的值取决于你手中的其他牌。你必须先添加所有其他牌,然后决定ace是否应该算作一个或十一个。你应该在你的手类中使用一个方法(我使用的是玩家类),称为" value"这决定了你手的价值。在该方法内部将是确定一个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()
{
}
}
答案 0 :(得分:0)
一旦你意识到一件事,处理二十一点的Ace很简单:从来都不是玩家的选择。 A计数一个;如果你的手牌中包含一张ace,总数为11或者更少,那么一张牌照升级到11张。永远不会有一张以上的王牌计为11张,如果有必要,玩家也不会这样做。
但是,即使价值本身是由规则而不是选择决定的,“软”18和“硬”18之间仍然存在很大差异,所以如果你是价值函数,则返回数字18,它没有做好自己的工作。由于Java,C和其他语言不会让函数同时返回boolean和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