有没有更有效的方法

本文关键字:方法 有效 有没有 | 更新日期: 2023-09-27 18:37:03

我是编码世界的新手,已经开始用 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 个不同的精灵,目前的计划是为每个精灵复制该代码。运动。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)

有没有更有效的方法

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

数组教程

你需要

学习的概念是数组。

棋盘上的每个方块都应该是方块数组的成员。 你应该有 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)
    {
        ...
    }
}
这样,每种类型的棋子

(国王,王后,棋子等)都可以计算自己可能的棋子,您无需检查它是什么类型的棋子,您只需要一个棋子数组。