1

私はコーディングの世界に不慣れで、C# で XNA を使用してチェス盤のコーディングを始めました。混乱を減らして効率を上げるためにメソッドに入れる必要があると思うこのコードを手に入れましたが、その方法はよくわかりません。

if (movement.isSelected == false)
{
    if (movement.PawnBl1pos.X <= movement.mouseCord.X
        && movement.PawnBl1pos.X + 100 >= movement.mouseCord.X
        && movement.PawnBl1pos.Y <= movement.mouseCord.Y
        && movement.PawnBl1pos.Y + 100 >= movement.mouseCord.Y)
    {
        movement.PawnBl1Col = Color.Red;
        movement.isSelected = true;
    }
}

32 の異なるスプライトを取得しました。現在の計画では、各スプライトにそのコードをコピーすることです。Movement.PawnBl1pos は 1 番目の Black Pawn の Vector2 であり、各ピースのベクトルを置き換えるだけで済みます。

単純なコピー ペーストなしで、各部分のこのコードを少し変更することは可能ですか? これの用語はポリモーフィズムになると確信していますか?

(movement.PawnBl1pos.X <= movement.mouseCord.X
 && movement.PawnBl1pos.X + 100 >= movement.mouseCord.X
 && movement.PawnBl1pos.Y <= movement.mouseCord.Y
 && movement.PawnBl1pos.Y + 100 >= movement.mouseCord.Y)
4

2 に答える 2

2

学ぶ必要がある概念は配列です。

チェス盤の各正方形は、正方形の配列のメンバーである必要があります。64 個の正方形が必要です。定義したクラスで各正方形を表すことができます。

各チェスの駒はクラスで表すこともでき、それぞれが配列のメンバーになります。これを行う最もクリーンな方法は、基本クラスを定義し、そこから各部分を派生させることです。

Square[] squares = new Square[64];

public class Square
{
    public Point Location { get; set; }
    public Piece Resident { get; set; }
}

public enum TeamColor
{
    Red,
    Black
}

public abstract class Piece
{
    public TeamColor Color { get; set; }
    public Square Location { get; set; }

    public abstract Square[] MovesAllowed(Square[] allSquares);
}

public class King : Piece
{
    public override Square[] MovesAllowed(Square[] allSquares)
    {
        ...
    }
}

このようにして、各タイプのピース (キング、クイーン、ポーンなど) が独自の可能な動きを計算でき、ピースのタイプを確認する必要はありません。ピースの配列があるだけです。

于 2013-10-25T20:06:15.350 に答える
2

ピースを配列に格納してから、その配列をループする必要があります。一部のコードを 32 回コピーすることは、決して良い考えではありません..!

配列のチュートリアル

于 2013-10-25T19:48:28.913 に答える