2012-03-23 30 views
3

我正在改寫一個我寫的用來運行魔術貼紙的國際象棋引擎。我編寫了魔術功能,他們以一塊方塊和一個佔位板作爲參數。我與自己辯論的是這些董事會代表方案中的哪一個更快/更實用:什麼是魔術棋盤移動生成系統最實用的棋盤表示?

方案1:每種類型的棋子都有一個棋盤,一個白色騎士,一個黑色騎士。 。 。 ,爲了生成移動並將它們推送到移動堆棧,我必須將它們序列化以找到該塊的正方形,然後調用魔術函數。然後我必須序列化這個移動的棋盤並推送它們。其優點是攻擊和佔用的棋盤更近了。

方案2:簡單片段中心數組[2] [16]或[32]包含片段的平方指數。一個簡單的循環和函數調用就是移動位圖板所需要的。然後,我序列化這些棋盤,並將它們推送到移動堆棧。我還必須保持佔位板。我猜得到一個攻擊位面板應該沒有什麼不同:我必須再次生成所有移動的位圖板,而不是序列化它們,我按位操作它們,以混合魔法。

我傾向於方案2,但出於某種原因,我認爲存在某種類似於標準方案1的實施方式。出於某種原因,我無法找到製造「位板」引擎而沒有實際使用位板的缺點。我甚至不會使用Kingboard和Knight數據的位圖板,只是快速查找數組。

我想我的問題是更多的是否有更好的方式來做這個董事會的代表,因爲我記得讀過,保持每種類型的棋子的棋盤是標準的(也許這只是需要旋轉的棋盤?)。我對翹板引擎比較陌生,但我讀了很多,並且已經實施了這個神奇的方法。我當然喜歡這種以塊爲中心的陣列方法 - 它使得很多任意的東西比如將棋盤打印到屏幕上更容易,但是如果有更好/相等/更標準的方式,有人可以指出嗎?在此先感謝 - 我知道這是一個相當具體的問題,難以回答,除非您非常熟悉國際象棋程序設計。

最後一分鐘的問題:查找二維數組的速度如何衡量使用一維數組,並將16 * team_side添加到普通索引以查找該部分?

編輯:我想我應該補充一點,我在我的象棋實施重視速度在幾乎一切。爲什麼我會使用魔術貼紙而不是簡單的帶有幻燈片數據的數組?

回答

1

有沒有標準的答案,對不起。

您需要的數據結構的數量和類型取決於恰好是您想要在程序中執行的操作。例如,在電路板上具有多個部件的表示使得一些操作更快。另一方面,在每次移動過程中更新數據需要更多時間。

爲了獲得最大的速度,你的工作是找出你的計劃的最佳效果。維護一個額外的數組片段會導致程序的淨加速嗎?這取決於!有時你可以延遲計算並緩存結果,有時你只是在需要時計算它(並且希望它不是經常需要的)。