-1
我正在構建一個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重新)。你能想到我能做到這一點的一種方法,無論是在計算最長連勝的方法還是其他方法?
感謝