ピースは1回の移動で1つの正方形から別の正方形へと異なるパスをたどることができますか?
私はチェスゲームを実装しています。私はルールを知っていますが、あまりプレイしていません。ちょっとした説明が必要です。
プレーヤーがピースを正方形Aから正方形Bに合法的に移動するとします。この移動中にこのピースがたどった経路を考えてみましょう。作品の種類によって違うのでしょうか?
私はそのようなケースを見つけることができません。
編集:-私が扱っているインターフェースコードを追加して、より多くのコンテキストを提供するように一部の人々から求められたように、より明確にします。
public class Chess {
ChessBoard chessBoard;
Player[] player;
Player currentPlayer;
List<Move> movesList;
GameStatus gameStatus;
public boolean playerMove(CellPosition fromPosition, CellPositionb toPosition, Piece piece);
public boolean endGame();
private void changeTurn();
}
public abstract class Piece {
Color color;
public boolean validate(CellPosition fromPosition, CellPositionb toPosition);
}
public class Knight extends Piece {
public boolean validate(CellPosition fromPosition, CellPositionb toPosition);
}
同様に、ナイトとして他の作品のクラスがあります。これで、プレーヤーがチェスである位置Xから別の位置Yに移動したい場合、Pieceのvalidate()メソッドがチェスのplayerMove()によって呼び出され、validate()は移動が有効かどうかのみを確認できます。与えられた駒のように、たとえば騎士は、与えられた場所から、目的地が8つの有効な動きの1つであることを確認します。ルークの場合、4つの方向のいずれかになります。
playerMove()関数がPiece.validate()関数を呼び出すと、それが有効な移動であることがわかります。私が対処しようとしている問題は、チェスのplayerMove関数が有効であることを認識しているため、移動すると、指定された場所から目的地までの間にピースがあるかどうかわかりませんか?ピースにはボードのコンテキストがないため、それを検出できず、チェスのplayerMove()関数で実行する必要があります。ここにコードを記述して、ソースから宛先に関係する可能性のある正方形のリストを生成します。その正方形のリストは常に一意になりますか?それとも、異なる部分で異なる可能性がありますか?騎士を除いて、すべてが真っ直ぐまたは斜めに動くので、それはユニークでなければならないので、これを明確にしたいと思います。それでも不明な点がある場合は、私に知らせてください。
回答
正方形Aから正方形Bに移動するクイーン、ビショップ、ルークの場合、移動できる方法は1つだけであり、その移動が合法であるためには、その間のすべての正方形が空である必要があります。
正方形Aから正方形に移動する騎士の場合、一般的に2つの方法がありますが、騎士は途中で駒を飛び越えることができるため、それは関係ありません。
キャスリングの場合、王がAからBに移動できる方法は1つだけであり、その移動が合法であるためには、間にある正方形が空である必要があり、王が最初に移動する必要があります。キャスリングの場合、ルークがAからBに移動できる方法は1つだけであり、その移動が合法であるためには、キングを除いて、その間のすべてのマス目が空である必要があります。
いいえ。騎士が最初のマスから最後のマスにどのように移動するかは好みの問題ですが、最後のマスに到達する方法については何も書かれていません。キャスリングについても同じです。ルークが目的の広場に到着する方法は、2マス移動したばかりのキングを通過してそこに到達する必要があるためです。
考慮すべき特別なケースは、騎士の動き、キャスリング、ポーンの動きです。騎士は実際には道を持っていません。あなたは彼らを彼らの目的地にテレポートしていると考えることができます。ポーンとキャスリングは、占有された正方形を移動する際に同じ制限に従う必要があります(同じソースと宛先の正方形を持つ他のマテリアルと同じ正方形が「通過」します)が、追加の制限もあります。キングがキャスリング以外に移動するときはいつでも、それはどの正方形も「通過」しないので、あなたの質問は本当に幸せではありません。
他のすべての動きは、ルークの動きまたはビショップの動きのいずれかです。女王が動くときはいつでも、それはルークの動きかビショップの動きのどちらかをします。女王が司教を動かすとき、それは司教を動かすのと同じ規則に従います、そしてそれがたどる道は司教と同じです。ルークを動かすときは、ルークと同じルールに従います(前述のキャスリングを除く)。
騎士ではない作品の場合、確認するパスは1つだけです。ルーク、ビショップ、クイーンの場合、「光線」をトレースします。キングは1マスしか動かず、ナイトは他のピースが邪魔になることを気にしないので、パスは関係ありません。したがって、チェックするには、目的の正方形が友好的なピースではないこと(友好的なピースをキャプチャできないため)、および間にあるすべての正方形が空である光線移動ピースについて確認する必要があります。
もちろん、ポーンは移動とは異なる方法でキャプチャするため、特殊なケースです。ご存知の方もいらっしゃると思います。:)(そしてそれはダブルステップやアンパッサンルールのようなさらなる複雑さを持っています)
注:移動が合法であるためには、移動プレーヤーは移動後にチェックされてはなりません。したがって、それも確認する必要があります。そのための1つの可能な方法は、移動中のプレーヤーの王がルークであると偽って、敵のルークを捕まえることができるかどうかを確認することです。その場合、その敵のルークは実際にチェックを行っています。(他のピースも同じですが、もちろんポーンにも注意してください)
また、これはかなり異なる方法で実装することに注意しますが、これは学習プロジェクトであると想定しているので、問題ないはずです。