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 个不同的精灵,目前的计划是为每个精灵复制该代码。motion.PawnBl1pos 是第一个黑棋子的 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

您应该将您的作品存储在一个数组中,然后遍历该数组。复制一些代码 32 次绝不是一个好主意..!

数组教程

于 2013-10-25T19:48:28.913 回答
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)
    {
        ...
    }
}

这样,每种类型的棋子(King、Queen、Pawn 等)都可以计算它们自己可能的移动,而您无需检查它是什么类型的棋子,您只需要一组 Pieces。

于 2013-10-25T20:06:15.350 回答