我试图使用Java编写一个blackJack游戏,而我正面临这个算法问题,如果Hand class
,Card class
将从ACE
中随机选择3张卡片。{{1}卡片出现在手中它将取值1或11,这是希望的结果:
Welcome to the BlackJack table. Let's play !
Your hand is currently : [A, 8, A] : [10, 20, 20, 30]
The best score is: 20
Welcome to the BlackJack table. Let's play !
Your hand is currently : [K, J, 4] : [24]
这是我写的方法:
public List<Integer> count() {
LinkedList<Integer> List = new LinkedList<Integer>();
LinkedList<Integer> List2 = new LinkedList<Integer>();
List.add(0);
if(this.cardList.size()>0) {
for (Card c : cardList) {
for (int i = 0; i < List.size(); i++) {
int val = List.get(i);
List2.add(List.set(i, c.getPoints() + val ));
if(c.getPoints() == 1) {
List2.add(List.getFirst() + (val + 11));
}
}
}
}
return List2;
}
这就是我得到的:
Welcome to the BlackJack table. Let's play !
Your Hand is currently : [5(♥), 8(♦), 8(♥)] [0, 5, 13]
答案 0 :(得分:1)
由于这看起来有点像家庭作业,我会尝试用一种方法来帮助你解决问题。
Separate the Aces since they have a variable value ( 1 / 11 )
Calculate the value of the other cards.
if you have Aces{
Do all the combinations of the values of the Aces.
//( Example with 2 aces: 1+1 ; 11+1; 11+11; 1+11).
for each combination sum it to the other cards and add it to the list.
}else{
add just the other cards value
}
答案 1 :(得分:0)
或许更简单的方法是计算最低分数(如果aces得分为1),以及(单独)是否有ace。 (所以你现在知道你是否可以在比分上加10分。)
如果玩家有2个ace,玩家永远不会在他们的分数上加20,因为这将导致得分至少为22(这对玩家来说是不利的。)
然后在计数阶段结束时构造一个数组,其中第一个元素是最低分数。如果您有ace,请添加第二个元素,得分最低+10。