ここからチュートリアルを読みました リンク! これにより、ピースの基本的なレイアウトが得られますが、ピースが他のピースを飛び越えるようになりました。ソースと宛先の正方形の間に中間のコインがあるかどうかを確認する方法を知ることができます。
1 に答える
簡単な例として、チェス盤を表す 8x8 マトリックスがあるとします。オブジェクトを保存することはできますが (そして、すべてのピースを extends して、素敵な OO デザイン パターンを取得します。今のところ、それらはすべてs でChessPiece
あると仮定します)。int
public class Board
// this is the actual representation of the board
private int[][] board = new int[8][8];
// define some useful constants
public static final int EMPTY = 0;
public static final int PAWN = 1;
public static final int HORSEY = 2;
// ...
public Board() {
initializeBoard();
}
public int getPiece(int row, int column) {
return board[row][column];
}
private void initializeBoard() {
for (int row = 0; row < 8; row++) {
for (int col = 0; col < 8; col++) {
board[row][col] = EMPTY;
}
}
}
}
ボードとピースの基本的な表現ができたので (ピースの実際の初期構成を設定するのはあなた次第です)、どこに移動できるかをどのように決定しますか? さて、今のところ、単純な力ずくのアプローチに固執してください。駒の行/列を見つけるためにボード全体をループする方法を知っているので、騎士が にいることがわかったとしrow=3
ます。column=5
これを と書きます(3,5)
。すると、ナイトは横に1マス、縦に2マス、または横に2マス、縦に1マス移動できるので、次のように移動できることがわかります。
- (1,6)
- (1,4)
- (5,6)
- (5,4)
- (2,7)
- (2,3)
- (4,7)
- (4,3)
- 一般的に: (行 ± 1、列 ± 2)、(行 ± 2、列 ± 1)
これで、ボードをセットアップし、特定のピースが配置されている場所を見つけ、それらが移動できる場所とそれらのスペースに配置されているものの両方を決定するためのすべてのコンポーネントが揃いました.
さらにいくつかの部品が必要で、すべてが揃っています。
何が邪魔なのかを判断する: クイーンを (1,1) から (8,8) に移動しようとしているとします。パスが (2,2)、(3,3)、... を通るパスであることを確認し、それらの各正方形を確認する必要があります。これは作品ごとに異なりますが、同じ一般的なアプローチに従います。
- そのパスで移動できる駒は何ですか
- そのパスはどのマスを通過しますか?
- それらのマスにピースはありますか?
実際に駒を動かす: ここでは、内部ボード表現を更新して、前の正方形を空に変更し、新しい正方形に駒を配置する必要があります。
ピースのキャプチャ: ピースをキャプチャするためのルールを実装し (基本的にはピースを移動するのと同じ)、どのピースがキャプチャされたかを追跡します。
ゲームプレイ: プレイ可能にしたい場合は、プレーヤーを表す必要があります。誰が順番であるか、および単純な UI を生成します。
エッジ ケース: アルゴリズムがボードの端から外れないように注意してください。(ArrayIndexOutOfBoundsException)
ゲームをゼロから生成するのは非常に難しいため、ゆっくりと開始することをお勧めします。ボード表現を実装し、JUnit のようなテスト ライブラリをチェックアウトして、テストができるまでインターフェイスとして使用できるようにします。たとえば、特定のボード構成でピースが 1 つの正方形から別の正方形に移動できることを確認するテストを作成し、その機能を実装します。テストに合格すると、コードが想定どおりに動作することを確信できます。