2012-10-12 147 views
0

我開始製作一款跳棋遊戲,並且我已經獲得了所有圖形和繪製的棋盤。 在我開始創作這些作品之前,我想知道怎樣才能解決棋子運動的邏輯問題。我應該製作一個每個方格的桌子,檢測它是否有棋子,如果是,是什麼顏色? (即0 =空,1 =紅,2 =黑),或者你們對這個問題有更好的想法嗎?製作棋子游戲的邏輯?

+0

可能更好的http://gamedev.stackexchange.com – Markus

+0

參見本: - http://forums.whirlpool.net.au/archive/1147465 –

+1

你是問有關的算法爲計算機挑選移動,或你是否在尋找邏輯來追蹤兩名球員(可能是人類)球員的位置? –

回答

6

通過使用面向對象的原則,我會去的東西,如:

enum Side { 
    BLACK, 
    RED; 
} 

class Position { 
    int x, int y; 
} 

class Piece 
{ 
    Position position; // position inside the board 
    Side side; // which side the piece is 
} 

class Board 
{ 
    Piece[][] board = new Piece[8][8]; 

    boolean isMoveLegal(Piece p, Position newPosition) { 
    ... 
    } 

    void doMove(Piece p, Position newPosition) { 
    if (isMoveLegal(p, newPosition) { 
     // game logic of movement and eating other pieces if needed 
    } 
    } 
} 

一個比較幼稚的做法可以用一個簡單的地圖:

class Position { 
    int x, int y; 
} 

class Piece 
{ 
    Side side; // which side the piece is 
} 

class Board 
{ 
    HashMap<Piece, Position> board; 

    boolean isMoveLegal(Piece p, Position newPosition) { 
    ... 
    } 

    void doMove(Piece p, Position newPosition) { 
    if (isMoveLegal(p, newPosition) { 
     // game logic of movement and eating other pieces if needed 
    } 
    } 
} 

這可以使用,以避免存儲一塊內部的當前位置。

+0

所以我不得不預先定義數組中的部分? – Chris

+0

這似乎過分巴洛克式。有很多冗餘數據(例如,存儲在'board [2] [3]'中的'Piece'''需要將'[2] [3]'存儲在''position''屬性中)。每當一塊棋子移動時,您需要以一致的方式在兩個地方更新數據。 –

+0

它僅取決於你想放置運動邏輯的位置。我經常發現自己處於最好擁有冗餘數據的境地,而不是找到一種方法來獲取您之前沒有計劃存儲的信息。特別是對於一個簡單的任務,例如棋子游戲(碰巧在更復雜的環境中發現自己處於同一種情況,並且將元素與元素一起存儲一直是不錯的選擇)。 – Jack

1

您應該製作一個二維數組來表示電路板。

int[][] board = new int[8][8]; 
+2

這會有幫助嗎? – Chris

+0

我不打算寫他的跳棋比賽。他問如何代表董事會 –

+1

事實上,他問到需要跟蹤移動的簿記。這比僅僅將矩陣表示爲矩陣更復雜。 –