您關注的不僅僅是如何表示董事會又是如何表現的作品,因爲板件需要通信相互存在和影響。
因此,您如何表示你的董事會將由您如何表示你的作品和遊戲的制約板和片的規則確定。
您首先關心的是如何表現這些作品。
遊戲塊或遊戲自動機是面向對象編程的完美模型。
讓我配藥摒棄了宣言,如公共的,靜態的說明等
abstract class BasicUnit
{
// determine constraints of movement here.
// update position and return new position
abstract Position move(Direction d);
abstract Position getPosition();
Arsenal arsenal;
}
class Worker
extends BasicUnit
{
Position move(Direct d)
{
//whateveer, etc
}
}
class farmer
extends Worker
{
Position move(Direct d)
{
//whateveer, etc
}
}
class Warrior
extends BasicUnit
{
Position move(Direct d)
{
//whateveer, etc
}
}
class Sniper
extends Warrior
{
Position move(Direct d)
{
//whateveer, etc
}
}
現在,你必須決定是否對棋子的位置是
- 板中心:棋子的位置僅在棋盤上註冊
- 以棋子爲中心:棋子只在棋子上註冊
- 冗餘:你必須裁員當一塊棋子移動時,可以更新棋子和棋盤。
對於大多數棋盤遊戲來說,以棋子爲中心的棋子並不是一個好主意,因爲你必須搜索每件棋子來確定棋子是否被佔用。
如果以電路板爲中心,則需要搜索電路板的每個位置以找到一塊電路板的位置。
對於冗餘,您必須確保棋盤和棋子所登記的位置不會錯位。如果您打算允許您的遊戲通過互聯網進行播放,會話可以暫停和休眠 - 您可能會遇到同步方面的挑戰。
所以,你的問題的答案是 - 散列矢量來代表董事會。
哈希向量是一個具有兩個訪問門的集合 - 一個訪問位置,第二個訪問關鍵。你的散列載體將允許您通過位置來訪問
- 董事會找出是在一個位置
- 片的id,找出在黑板上它是什麼單位。
除非您的棋是多維棋盤遊戲,否則您不能將棋盤代表爲樹。當樹木,梯子或坐在棋盤位置上的城堡需要樹時,當單位達到棋盤的水平位置時,需要前進到梯子或城堡的垂直位置。而在城堡裏,這個單位需要轉移到衆多的房間裏。或者在樹上是一個女巫,能夠將這個單位捕獲到一個瓶子裏,並帶有令人困惑的逃生路徑。因此,使用樹結構來表示你的棋盤會給你的遊戲編程帶來不必要的複雜性。
無論是菱形還是圓形等均無關緊要。您只需要列舉棋盤的位置即可。枚舉方法必須方便您的規則捕獲。
這意味着,你不應該枚舉一個作爲(1,3),然後枚舉它的鄰近片爲(2,7) - 這只是常識。因爲(1,3)的鄰居是(0,2),(1,2),(2,2),(0,3),(2,3),(0,4),(1,4 )和(2,4)而不是(2,7)。
因此,您需要一個2維散列向量。
,以滿足您找出在x什麼單位的需求,你的董事會的y位置:
BasicUnit getPosition(x,y)
除了,找出(X,Y)爲單位的位置。
Position getUnit(BasicUnit unit)
那麼你可能計劃你的遊戲是可擴展的,以便於實現勝利的球員可以繼續發揮其具有不同的板形一個新的水平。你的二維散列矢量仍然會被使用,因爲你將軟件的表示層與其數據結構分開。
你只是在你的向量中插入更多職位。
您可以查看我的Java實現一個1-d的 http://code.google.com/p/synthfuljava/wiki/HashVector
散列載體把它翻譯爲您選擇的編程語言,並添加一個向量維它。
請問您可以在什麼地方上傳繪圖板?我不確定我是否很好地解釋了你的描述。 – 2009-08-07 00:15:57