2

我现在正在构建一个可能已经完成 75% 的国际象棋游戏,这是一个零计划的冲动事物,因此它非常混乱。

我有三个多维数组,一个包含一个 enum Colour,另一个包含一个 enum ,ChessPiece最后一个包含坐标。

我想清理它,我能想到两件事。

1)面向对象编程。我可以用属性 Colour、Coordinates 和 Piece 构建一个类,然后在游戏开始时实例化每个片段,并引用每个实例。

2) 如果我可以将属性添加到按钮控件,则更简单的方法是,类似于类的属性。即 button1.Piece = Pawn其中 button1 指的是实际的按钮。

有没有办法做到这一点?谢谢。

4

2 回答 2

6

它可能很简单:

public class ChessButton : Button
{
    public ChessPiece { get; set; }
}

显然你需要扩展ChessButton(可怕的名字)来做你想做的事。

于 2013-01-25T11:41:30.590 回答
1

好吧,如果您采用第一种方法(在 oo 范式内做事),我可以想象您可以想出一个非常简洁的模型。我可以设想一个基类 Piece,它可以由类 Prawn、Rook、Bishop 等继承,这可能会实现移动棋子的“规则”。同样,我可以想象一个类 Tile 和另一个名为 Board 的类(包含一个二维数组)。等等等等

所以你最终可以把它想象成非常整洁/漂亮。你必须考虑所有这些类,弄清楚它们做什么以及它们如何与其他类交互。所以它有一个设计元素,这是一个潜在的缺点 - 必须在没有任何实际收益的情况下进行前期思考 - 你几乎为你的应用程序构建了一个基础设施。但如果你将代码提供给他们希望能够很容易地弄清楚发生了什么事情的人。所以它是可维护的。oo 方法有一个很大的好处。

您的第二种方法(扩展 ui 类)。好吧,正如你所说,这似乎容易得多。也许如果应用程序足够简单,那就是要走的路。

但是您还说,到目前为止,您已经在临时基础上做了一些事情,而且一切都非常混乱。你遇到的是典型的 ui 开发——当你用非结构化的方法构建东西时,事情变得一团糟。多年来,人们投入了大量时间和金钱来尝试将结构添加到前端以尝试提高可维护性。您标记了这个问题 c#,所以您可能听说过诸如 MVC、MVVM 或 MVP 之类的 Microsofty 东西。您不一定需要详细查看这些方法,您只需要了解它们存在的原因 - 尝试划分 UI 代码以使其更易于管理。

由于您还说您的动机之一是清理代码,因此我敦促您对结构化方法进行一些思考,而不是默认采用“更容易”的路径。

如果您考虑一下并决定只扩展一个 Button,那很好。您选择它而不是结构化方法的原因是结构化方法需要更多的努力。但至少你想过。将来您会遇到更复杂的 ui 需求,而这种预先考虑会带来好处。

于 2013-01-25T11:57:23.177 回答