0

私は現在、可能なチェス ゲームの抽象クラスの設計に取り組んでいます。さまざまな駒の動かし方 (クイーン、ナイトなど) について助けが必要だった

public class MyPiece extends Piece {

@Override
public boolean canMove(int x, int y) {
    return (this.x != x && Math.abs(this.y - y) == 1);
}
}

上記のコードは、上下に移動できるピースのサンプルを表示します。これは有効なチェスの動きではありません。では、クイーンを動かすとしたら、どうすればよいでしょうか?簡単に言うと、行列 (x,y) 8 x 8 のボードが既にあると仮定しているだけです。

4

3 に答える 3

2

特にチェスの女王にとっては、それほど単純ではありません。必ず:

  1. つまり、水平、垂直、または斜めにまっすぐ移動することを決定します。
  2. 途中で他のピースがないこと。

そう、

  • その動きが水平チェックであることを判断するにはthis.x == x && this.y != y
  • 移動が垂直チェックであることを確認するにはthis.y == y && this.x != x
  • 斜めチェックを決定するにはMath.abs(this.x - x) == Math.abs(this.y - y)

方向を選択し、途中で繰り返し、matrixこの移動中にクイーンによって渡されるセルに要素が含まれていないことを確認します。

于 2013-07-14T13:11:13.303 に答える
1

「ボード上の位置 (x,y) にあるピース P が与えられた場合、そのピースはどの座標に移動できるか?」という観点から考える必要があります。つまり、(1,1) のルークの場合、(1,2)..(1,8) と (2,1)..(8,1) に移動できます。

残念ながら、追加の制限があります。たとえば、次のとおりです。

  • ほとんどの駒は他の駒を追い越すことができません。したがって、ボード上のピースの座標を知る必要があります。
  • キングスはチェックに入ることができません。したがって、対戦相手の駒が移動できる場所を知る必要があります。
  • キングは、移動していなければキャスティングできます (元の位置にいるだけでは十分ではありません)。したがって、ゲームの歴史を知る必要があります。

チェス ゲームのモデル化は興味深い作業ですが、最初にチェッカーを試して、物理的なゲームの抽象的な表現を操作することに慣れてから、チェスにもう一度挑戦することをお勧めします。

于 2013-07-14T13:14:53.680 に答える