2010-08-26 31 views
2

我在c#中有作業。我必須用minimaxalphabeta來製作一個遊戲(例如跳棋,象棋或其他東西,但不是tic tac腳趾 - 而且我選擇跳棋/草稿),但我甚至不知道如何開始: (我有一個緊急的截止日期我在學校一點點工作,但我不是一個程序員 現在我試圖做一個數組,這將代表一個董事會和它的片斷的位置。有什麼更好的?如果關於棋子的位置和它們的值的信息將被保存在棋盤上,或者如果這些信息將被分別保存爲每個棋子,並且如何爲此做出最佳排列組合。需要的是一個建議如何開始,如何表示遊戲狀態 - 該程序等的基本結構在C中使用minimax的跳棋/草案#

+1

那麼,tic tac腳趾會更容易... – Carra 2010-08-26 13:47:48

+0

是的,但井字我不能選擇:( – Washa 2010-08-26 14:31:31

+0

WOW!草稿由minimax和alpha-beta修剪驅動作爲作業,在緊迫的截止日期。 ..你有點難以看出從哪裏開始回答這個問題,你說你想在C#中找到''''的答案,但你自己並不是AC#程序員,我假設你已經閱讀並理解了關於minimax的WikiP文章?剛剛搜索的「草稿編程」,第一個答案是一個非常合理的codeproject鏈接...也有一些主要的草稿文件,因爲它最近是'解決' - 在計算機v計算機匹配將始終以平局結束 – Adrian 2010-08-26 15:14:17

回答

1

提示:使用2維數組來表示遊戲板:

int[,] board = new int[8, 8]; 
+0

謝謝,我已經開始使用相同的數組,現在我正在發電板上的碎片... – Washa 2010-08-26 14:42:03

+2

它需要在內存8x8?男人只能站在32個方格上...... – Adrian 2010-08-26 16:17:02

+1

這是一項家庭作業,所以我不會選擇最優化的解決方案。保持可以理解。所以,當你編碼跳棋時,你位於2,0位置,你知道你可以移動到1,1或3,1。如果你保持它4x4,那麼你必須記住哪一行被移動到哪個方向和你可以更容易犯錯。在每個空間中使用int,以便知道有什麼。例如,0是空的。 1個紅色,2個紅色國王,11個黑色,12個黑色國王。 – Dan 2010-08-27 13:21:57

1

用於存儲板狀態的標準方法是使用bitboards

public class Board 
{ 
    private UInt64 m_RedPieces = 0x0000000000559955; // Initial position; 
    private UInt64 m_BlackPieces = 0x9955990000000000; // Initial position; 
} 

除了事實上它們超快速以外,關於位板的一件很酷的事情是,它使得生成合法的後繼位置變得更容易。你仍然很難理解,但是通過使用刨花板,你可以將移動演變減少到一系列位操作(移位,AND,OR,XOR等)。

我確定在互聯網上已經有很多資源,這些資源都有與位面板一起工作的公式。

+0

謝謝,但我認爲這對我和我的技能太難了:( – Washa 2010-08-26 14:37:11

+0

@Washa:不一定,我想例如,要從初始位置生成所有後繼位置,首先將m_RedPieces左移7位並對m_RedPieces進行異或運算,以刪除已經被紅色塊佔據的正方形,還有幾個更多這裏涉及到的細節,但你明白了,你會增加更多的位操作來捕捉包括跳躍在內的其他場景,而不是進入被對手棋子佔據的方塊等等。我想你會發現這比製作系列更容易'if-else' blocks。 – 2010-08-26 14:56:29

+0

Brian,是的,你絕對是對的,但我擔心這個......我從來沒有在c#或其他任何地方使用這些操作作爲XOR,OR等。 Ø在理論上是理性的(在學校課但不是編程科目):( – Washa 2010-08-26 15:50:09