2011-12-09 86 views
4

我開始爲國際象棋棋類遊戲製作8 x 8平方棋盤。但是,我想知道是否有任何提示創建廣場,而不是Java中的二維數組。爲棋牌遊戲創建棋盤演示文稿

分配限制之一不允許使用二維數組或任何類似的。沒有AI,只有用戶控制。

+1

如果不是太相似,可以使用1D數組。 – Thilo

回答

7

可以使用一維陣列,說Figure [] board = new Figure[64]和做一個簡單的getter/setter方法來模擬2-尺寸:

Figure get(int hor, int vert) { 
    return board[hor*8+ver]; 
} 

void set(int hor, int vert, Figure f) { 
    board[hor*8+ver] = f; 
} 
3

你可以使用一個1個維陣列或ArrayList,然後除以8和使用結果和其餘部分來知道你需要去哪一列和哪一行。

然後,您可以反過來工作以獲取陣列中相應棋盤部分的位置。

2

您還可以使用地圖:

private Map<String, Figure> board = new HashMap<String, Figure>(); 

private String positionToString(int hor, int vert) { 
    return hor + " " + vert; 
} 

public Figure get(int hor, int vert) { 
    return board.get(positionToString(hor, vert)); 
} 

public void set(int hor, int vert, Figure fig) { 
    board.put(positionToString(hor, vert), fig); 
} 
+0

映射和字符串<-> int轉換在這裏是unistsary。這隻會導致性能損失。 – korifey

+0

@korify我不認爲這種表演損失非常大。 –

+0

@NikitaBeloglazov:那麼?試試'std :: pair '? – sehe

2

我的Java沒有工作經驗,我下棋,做一些Delphi程序。我不知道Java的位操作功能。

但是,我建議你調查Bitboard數據結構,並在網上搜索開源的國際象棋引擎。

這是C++世界中的常見問題。

0

也許你能逃脫,甚至沒有創建一個廣場的第一個地方?

代表國際象棋棋盤的一種替代方式將只是一個棋子列表和他們各自的座標。