我可能会在完成75%的情况下建立一个国际象棋游戏,这是一个零计划的冲动,因此非常混乱。
我有三个多维数组,一个包含枚举Colour
,另一个包含枚举ChessPiece
,最后一个包含坐标。
我想要清理它,我可以想到两件事。
1)面向对象的编程。我可以构建一个具有Color,Coordinates和Piece属性的类,然后在游戏开始时实例化每个部分,并参考每个实例。
2)如果我可以向按钮控件添加属性,类似于类的属性,则更容易。即
button1.Piece = Pawn
其中button1引用实际按钮。
有办法做到这一点吗?感谢。
答案 0 :(得分:5)
可能很简单:
public class ChessButton : Button
{
public ChessPiece { get; set; }
}
显然你需要延长ChessButton
(可怕的名字)来做你想做的事。
答案 1 :(得分:1)
好吧,如果你采取第一种方法(在o-o范式内做事),我可以想象你可以想出一个非常简洁的模型。我可以设想一个基类的片段,它可以由Prawn,Rook,Bishop等类继承,这可能会实现移动片段的“规则”。类似地,我可以想象一个类Tile和另一个类(包含一个2-D数组的tile)称为Board。等等。
所以你最终可以把它描绘成非常整洁/漂亮。你必须考虑所有这些课程,弄清楚他们做了什么,以及他们如何与其他课程互动。因此,它有一个设计元素,这是一个潜在的缺点 - 必须做前期思考而没有任何实际的好处 - 你几乎建立了一个基础设施,让你的应用程序生活。但如果你给代码他们希望能够很容易地解决正在发生的事情的人。所以它的可维护性。并且o-o方法有很大的好处。
你的第二种方法(扩展ui类)。好吧,正如你所说,它似乎要容易得多。也许如果应用程序足够简单,那就是要走的路。
但是你也说到目前为止你已经在临时的基础上做了一些事情并且非常混乱。而你所遇到的是ui开发的典型特征 - 当你用非结构化的方法构建东西时,事情会变得混乱。多年来,人们花费了大量的时间和金钱来尝试将结构添加到前端以尝试增加可维护性。你标记这个问题c#所以也许你已经听过像MVC,MVVM或MVP这样的Microsofty。您不一定非常需要详细了解这些方法,您只需要了解它们存在的原因 - 尝试划分UI代码以使其更易于管理。
既然你也说过你的一个动机就是清理你的代码,我会建议你把一些想法放到一个结构化的方法中,而不是默认采用“更容易”的方法。
如果你考虑一下并决定只延伸一个Button,那很好。您在结构化方法上选择它的原因是因为结构化方法需要更多的努力。但至少你想过这件事。在未来,你会遇到更复杂的ui要求,而这种前期思想会带来好处。