我是编码世界的新手,并开始在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)
答案 0 :(得分:2)
您应该将您的碎片存储在一个数组中,然后遍历该数组。复制一些代码32次绝不是一个好主意..!
答案 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数组。