上次做了个2D象棋,这次要做3D的,求教大家。
3D版界面已经差不多了,我是用delphi2010+directx9来制作的。
但是上次做2D的,我是用结构化编程的方法来设计(主要是写一些过程和函数,然后在不同的事件中调用)。
这次因为才开始做,我想用面向对象的方式来进行一些类的设计。
比如做一个棋子类,然后对外提供一些接口。但是我真的第一次用这种方法来设计,初一想好像挺简单的,可是实际我做的时候,发现要把哪些封装,提供怎么样的接口、封装到什么程度、如何继承等等是不容易的(当然这是因为我没做过这种设计)。
所以想问问做过面向对象设计的朋友和老师们。
比如,我的棋子,定义成一个类。自然这个棋子应该有初始化,d3d绘制,还有绘制在什么坐标,棋子是什么棋等等。。。
大家能不能提供一个设计想法。。。如何封装。。。
或者有什么好书推荐我看一下。入门的就算了,比如只有几个例子做个人类,人又分成男人女人等等这种小例子太简单了点,有没有什么好的关于面向对象的书给我推荐推荐。
或者写下如果是你去设计一个棋子类,你会怎么封装和提供接口?要不要做成一个基类,然后继子成一些棋子类(比如车,马)
求教。
(公司不准用其它工具生成3D模型,我的棋盘棋子都是用程序生成的)
[解决办法]
棋子类 棋盘类
做游戏建议看看 <<深度历险>> 2D 3D 没有本质上的区别.
[解决办法]
我个人的看法是:
1.首先,设置一个基类,这里假设称为元素类,棋盘棋盘以及棋子由这个基类衍生
2.方案一:棋盘上的每一个点继承与元素类 拥有,坐标、棋子类型、阵营等属性 同时具有移动和进攻等接口函数,用来被操作。其中:阵营分为三类,除了本身棋盘上的两个阵营,可设置一个第三阵营,棋盘上当某点获得该阵营时,显示属性为:no 既没有棋子,且具有可设置为某阵营棋子的接口函数。此方法相当于把所有的棋子和没有棋子的点设置为同一个类。这样方便对棋子进行操作。且灵活性强
方案二:单独给棋子设置一个类,具有:阵营、类型、存活等属性,同时具有移动、进攻等接口函数(移动和进攻可以统一为一个函数,判断目标位置是否有棋子来判断)。
技巧:棋子的坐标可以设置为一个结构体表示,方案一的类的方法可以通过矩阵来构造。
具体还有很多细节,本人比较懒...这里就不打了,可以来找我一起讨论一下~