我正在为 yahtzee 游戏构建一个 AI 播放器,我目前要做的是让它评估给它的 5 个骰子(在排序的 ArrayList 中),以确定获得低/高顺子的概率从当前位置(例如,再滚动 1 或 2 次);以及作为结果持有哪个骰子。目前,我通过找到最长的连续数字条纹并从那里计算概率来获得概率。我遇到的问题是告诉计算机要持有哪个骰子。基本上我找不到连胜的开始和结束。
我获得最长连胜的方法是这样的:
public Class checkStraight{
private HashMap<Integer, Integer> dieFreq = new HashMap<Integer, Integer>();
private ArrayList<Die> dice = new ArrayList<Die>(); //Die has a method "getValue()"
// which returns the face value and a method roll() which assigns a random value.
public checkStraight(){
for(Die d : dice){
d.roll();
}
for(int i = 1; i<7; i++){
dieFreq.put(i, 0);
}
buildMap();
}
public void buildMap(){
for(int i = 0; i<5; i++){
dieFreq.put(dice.get(i).getValue(), dieFreq.get(dice.get(i).getValue()) + 1);
}
}
public int longestStreak(){
int count = 1;
int highCount = 1;
for(int i = 1; i<6; i++){
if(dieFreq.get(i) != 0 && dieFreq.get(i+1) != 0){
count++;
}
else{
if(count>highCount){
highCount = count;
}
count = 1;
}
return highCount;
}
}
显然,如果您要获得顺子,则应持有每个连续骰子中的一个并重新滚动其他骰子,但是由于可能有多个骰子,我无法找到一种方法来找到哪个骰子构成 Die 的 ArrayList 中最长的连击数死于相同的价值。我想将整数传递到一个新的 ArrayList 以确定要保存的骰子(1 表示保持 0 表示重新滚动)。你们有谁能想到我可以做到这一点的方法,无论是在计算最长连胜的方法中还是其他方式?
谢谢