免费论文设计VC++五子棋 第3页
4 游戏模式类——CGame
这个类负责对游戏模式进行管理,以及在不同的游戏模式下对不同的用户行为进行不同的响应。由于并不需要CGame本身进行响应,所以将其设计为了一个纯虚类[9],它的定义如下:
class CGame
{
protected:
CTable *m_pTable;
public:
// 落子步骤
list< STEP > m_StepList;
public:
// 构造函数
CGame( CTable *pTable ) : m_pTable( pTable ) {}
// 析构函数
virtual ~CGame();
// 初始化工作,不同的游戏方式初始化也不一样
virtual void Init() = 0;
// 处理胜利后的情况,CTwoGame需要改写此函数完成善后工作
virtual void Win( const STEP& stepSend );
// 发送己方落子
virtual void SendStep( const STEP& stepSend ) = 0;
// 接收对方消息
virtual void ReceiveMsg( MSGSTRUCT *pMsg ) = 0;
// 发送悔棋请求
virtual void Back() = 0;
};
4.1 主要成员变量说明
4.1.1 棋盘指针——m_pTable
由于在游戏中需要对棋盘以及棋盘的父窗口——主对话框进行操作及UI状态设置,故为CGame类设置了这个成员。当对主对话框进行操作时,可以使用m_pTable->GetParent()得到它的窗口指针。
4.1.2 落子步骤——m_StepList
一个好的棋类程序必须要考虑到的功能就是它的悔棋功能,所以需要为游戏类设置一个落子步骤的列表。由于人机对弈和网络对弈中都需要这个功能,故将这个成员直接设置到基类CGame中。另外,考虑到使用的简便性,这个成员使用了C++标准模板库[10](Standard Template Library,STL)中的std::list,而不是MFC的CList。
4.2 主要成员函数说明
4.2.1 悔棋操作——Back
在不同的游戏模式下,悔棋的行为是不一样的。
l 人机对弈模式下,计算机是完全允许玩家悔棋的,但是出于对程序负荷的考虑(此原因请参见“几点补充说明”一节),只允许玩家悔当前的两步棋(计算机一步,玩家一步)。
l 双人网络对弈模式下,悔棋的过程为:首先由玩家向对方发送悔棋请求(悔棋消息),然后由对方决定是否允许玩家悔棋,在玩家得到对方的响应消息(允许或者拒绝)之后,才进行悔棋与否的操作。
4.2.2 初始化操作——Init
对于不同的游戏模式而言,也就有不同的初始化方式。对于人机对弈模式而言,初始化操作包括以下几个步骤:
l 设置网络连接状态m_bConnected为FALSE。
l 设置主界面计算机玩家的姓名。
l 初始化所有的获胜组合。
l 如果是计算机先走,则占据天元(棋盘正中央)的位置。
网络对弈的初始化工作暂为空,以供以后扩展之用。
4.2.3 接收来自对方的消息——ReceiveMsg
这个成员函数由CTable棋盘类的Receive成员函数调用,用于接收来自对方的消息。对于人机对弈游戏模式来说,所能接收到的就仅仅是本地模拟的落子消息MSG_PUTSTEP;对于网络对弈游戏模式来说,这个成员函数则负责从套接字读取对方发过来的数据,然后将这些数据解释为自定义的消息结构,并回到CTable::Receive来进行处理。
4.2.4 发送落子消息——SendStep
在玩家落子结束后,要向对方发送自己落子的消息。对于不同的游戏模式,发送的目标也不同:
l 对于人机对弈游戏模式,将直接把落子的信息(坐标、颜色)发送给COneGame类相应的计算函数。
l 对于网络对弈游戏模式,将把落子消息发送给套接字,并由套接字转发给对方。
4.2.5 胜利后的处理——Win
这个成员函数主要针对CTwoGame网络对弈模式。在玩家赢得棋局后,这个函数仍然会调用SendStep将玩家所下的制胜落子步骤发送给对方玩家,然后对方的游戏端经由CTable::Win来判定自己失败。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>