2011-12-09 6 views
4

チェスゲームの割り当てのために8 x 8の四角いボードを作成し始めています。しかし、Javaの2D配列ではなく正方形を作成するためのヒントがあれば疑問です。チェスゲームのためのボードプレゼンテーションの作成

割り当ての制限の1つでは、2D配列などを使用できません。 AIはありませんが、ユーザーコントロールのみです。

+1

あまりにも似ていない場合は、1D配列を使用できます。 – Thilo

答えて

7

あなたは、一次元アレイを使用Figure [] board = new Figure[64]言うと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変換は不規則です。パフォーマンスの低下につながるだけです。 – korifey

+0

@korify私はこのパフォーマンスの損失が非常に大きいとは思わない。 –

+0

@NikitaBeloglazov:そう? 'std :: pair 'を試してみてください。 – sehe

2

私は、Javaのない実用的な知識を持っていない、私はチェスをすると、いくつかのDelphiのプログラミングを行います。私はJavaのビット操作能力について全く知らない。

しかし、私はBitboardデータ構造について調査し、それに基づいてオープンソースのチェスエンジンをネット上で検索することをお勧めします。

これはC++の世界では一般的です。

0

おそらく、最初の場所に正方形を作成していなくてもうまくいけますか?

チェスボードを表現する別の方法は、単なるピースのリストとそれぞれの座標です。

関連する問題