现在想制作一款象棋游戏,既可以单机游戏,又可以网络对战。具体怎么用面向对象的方法来设计呢?我的想法:当然有个棋子的基类,然后在这个类里实现一些方法,不过肯定是虚方法;(而且还要预留出其他接口,以便将来扩充功能)然后在派生类中实现具体走法。比如派生出 车类、马类、象类,等等。总共有七个子类。每个类里面实现自己的走棋规则,以及记录当前棋子的位置,颜色等等。问题来了,我怎么在每个类的走棋规则作判断,能不能走。因为要判断当前棋子移动方向上有没有其他的棋子,而这个信息在自己的类中是不能获得的。怎么做呢?(难道要写个棋盘类吗?)(或者怎么做到类似DELPHI的RTTI呢?)如果那位大侠有好的象棋游戏设计方法,可以讨论讨论!
一上手就是面向对象往往到最后什么都作不出来
用RAD固然有他的好处,但不可多用。选择面向对象变成方法,究意味着要放弃一些可视化变成的方法!!!请大侠们在继续!!!
一个类“棋盘”,只负责记录棋局状态(是否开始比赛,是否停止比赛),棋的布局(由于棋子数目有限,只需要使用变量记录就可以了,用record来记录棋子状态好了,比如记录:是否已被吃,x,y坐标,棋子的种类),以及两个玩家类。”玩家“类,通用的记录,提供走棋,吃子等方法,具体又分为:玩家人,玩家电脑,从”玩家“类继承,玩家人关联到界面,等待用户的操作,再传回去,玩家电脑则自动对怎样下棋进行计算,并作出反应。棋子的状态,正如前面所说的,我觉得只需要用结构体来保存就可以了,不需要使用类,我知道你的本意:定义棋子的抽象类,再继承出各个棋子类。但是平时我们使用抽象类一般是因为各个子类的行为类似,用抽象来提供统一的接口而已,但在这个问题上,我觉得各个棋子的行为相差甚远,(那么多走法很难用统一的接口来提供,我觉得是这样,这点上还可以再讨论讨论),即使使用抽象,棋盘类最多也只能够获得某个棋子是否可以走到某个棋格的判断,其它走与不走的判断全在棋局的大局规划中,与各个棋子无关。
类之间可能有关联
类之间还可以通过发送消息进行操作
看看<面向对象的系统分析>,书中有很多好例子我感觉你最少有这么几个类
1\棋子类
2\棋盘类
3\棋局类
4\玩家类你刚才问到,棋盘类
我想应该包含这样的内容,1\棋盘上每个座标的状态(空,或是有哪一个棋子);2\当前应该哪一个玩家下;
字段
棋局; //1副棋局
棋盘; //1个棋盘
棋子列表; //32个棋子
玩家列表; //2个玩家
方法
重新开始(玩家);
画棋盘(); //画背景、坐标线
画棋子();
认输(玩家);
和棋(玩家);
悔棋(玩家);
走棋(坐标)
选棋(坐标);
显示棋局(步数);
记分();
发送游戏信息();
Paint; override;
事件
接收到信息时触发;棋局 = 类()
方法
保存;
载入;
属性
象棋;
当前步数;棋子 = 类()
方法
计算可移动位置;
绘制棋子;
属性
象棋;
坐标;
名称;
颜色;
是否选中;
是否被吃;玩家 = 类()
属性
象棋;
是否执棋;
绘制玩家;
积分;
时间;
姓名;棋盘 = 类()
方法
绘制棋盘;
属性
象棋;
大小; //象棋本身就是一个类~~