有没有更有效的方法呢?

时间:2013-10-25 19:44:54

标签: c#

我是编码世界的新手,并开始在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是第一个黑色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)

2 个答案:

答案 0 :(得分:2)

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

Arrays Tutorial

答案 1 :(得分: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数组。