全部。我試圖讓一個minimax算法的版本在c#中爲一個學校項目運行。我們正在嘗試製作一個簡單的Mancala AI。有什麼辦法在C#中有一個父類使用兒童的方法?
爲此,我建立了一個由包含所有子值和其他板子信息以模擬未來移動的節點組成的樹。
最初,我希望讓樹有一個可變的根 - 而不是每次更換主板時重做樹,我都希望找到與當前主板相匹配的子節點,然後從中取出所有的工作,擴展它,並從那裏開展工作。
當我去更新我的樹,我想一個簡單的for循環:
for(int i = 0; i < 6; i++) {
...
if(bCopy.stonesAt(myPits[i]) == (myPits[myPits.Length-i-1]))
myChildren[i]= new MaxNode(...);
else
myChildren[i] = new MinNode(...);
}
} else {
myChildren[i].addChildren(board, depth);
}
}
省略號到位的代碼或參數,企圖使之可讀。
這是什麼導致我很麻煩。由於Mancala有一些讓你再次走的動作,因此無法知道給定的子節點是MinNode還是MaxNode。我將MinNodes和MaxNodes都設置爲抽象類DecisionNode的子類。
我希望最後一行(myChildren [i] .addChildren(board,depth))會下降到最低級別,並根據哪個適當使用MaxNode addChildren或MinNode addChildren。但是,它使用DecisionNode addChildren方法。
我想將代碼保存在單獨的類中,因爲它很麻煩。有沒有辦法做到這一點?
編輯:我應該提到,我已經將DecisionNode.addChildren設置爲虛擬,將MinNode設置爲覆蓋。但是,似乎是因爲myChildren [i]的類型在編譯時不知道,所以它默認爲父類。方法調用去
public virtual bool addChildren(Board b, int depth) {
return true;
}
而不是其中一個子類。
有些事情是錯的。在你的基類抽象中做addchildren,看看它開始抱怨的地方。 –