在我的二十一点程序中,我有:
Card c = dealCard(deck); //deals the card
updatePoints(players[i], c); // calls updatePoints below. updatePoints函数如下所示:
public static void updatePoints(Player player, Card c){
int point = c.getValue();
if(player.getPoints() + point >21 && (player.ace1 == 11 || player.ace2 == 11 || player.ace3 == 11 || player.ace4 == 11)){
player.points -= 10;
player.setPoints(point);
if (player.ace1 == 11){
player.ace1 = 1;
}else if(player.ace2 == 11){
player.ace2 = 1;
}else if(player.ace3 == 11){
player.ace3 = 1;
}else if (player.ace4 == 11){
player.ace4 = 1;
}
}
if (point == 1){
//default value for player.ace1 .. player.ace4 is 0
if(player.ace1 == 0){
player.ace1 = 11;
player.setPoints(11);
}else if (player.ace2 == 0){
player.ace2 = 11;
player.setPoints(11);
}else if (player.ace3 == 0){
player.ace3 = 11;
player.setPoints(11);
}else if(player.ace4 == 0){
player.ace4 = 11;
player.setPoints(11);
}
}else{
player.setPoints(point);
}
return;
}由于某些原因,当点数超过21时,这不会改变ACE值,也不会调整ACE值。任何帮助都将不胜感激。谢谢
发布于 2012-11-25 01:42:33
您的代码似乎太复杂了。不需要为每个ace设置一个变量,只需对未缩减为1的ace数量进行计数即可
private int fullAceCount;更新假设为ace的11,但也更新ace计数:
if (points == 11) { // if it's an ace
fullAceCount++; // save it for later deduction
}if (total > 21 && fullAceCount > 0) {
total =- 10;
fullAceCount--; // record that you've used up one of your aces
}你就完事了。
https://stackoverflow.com/questions/13543516
复制相似问题