免费论文设计VC++五子棋 第2页
定了CTable在执行一件事情时候的不同行为,具体的内容请参见“游戏模式”一节。
3.2 主要成员函数说明
3.2.1 套接字的回调处理——Accept、Connect、Receive
本程序的套接字派生自MFC的CAsyncSocket类[6],CTable的这三个成员函数就分别提供了对套接字[7]回调事件OnAccept、OnConnect、OnReceive的实际处理,其中尤以Receive成员函数重要,它之中包含了对所有网络消息(参见“消息机制”一节)的分发处理。
3.2.2 清空棋盘——Clear
在每一局游戏开始的时候都需要调用这个函数将棋盘清空,也就是棋盘的初始化工作。在这个函数中,主要发生了这么几件事情:
l 将m_data中每一个落子位都置为无子状态(-1)。
l 按照传入的参数设置棋盘等待标志m_bWait,以供先、后手的不同情况之用。
l 使用delete将m_pGame指针所指向的原有游戏模式对象从堆上删除。
3.2.3 绘制棋子——Draw
这无疑是很重要的一个函数,它根据参数给定的坐标和颜色绘制棋子。绘制的详细过程如下:
l 将给定的棋盘坐标换算为绘图的像素坐标。
l 根据坐标绘制棋子位图。
l 如果先前曾下过棋子,则利用R2_NOTXORPEN将上一个绘制棋子上的最后落子指示矩形擦除。
l 在刚绘制完成的棋子四周绘制最后落子指示矩形。
3.2.4 左键消息——OnLButtonUp
作为棋盘唯一响应的左键消息,也需要做不少的工作:
l 如果棋盘等待标志m_bWait为TRUE,则直接发出警告声音并返回,即禁止落子。
l 如果点击时的鼠标坐标在合法坐标(0, 0)~(14, 14)之外,亦禁止落子。
l 如果走的步数大于1步,方才允许悔棋。
l 进行胜利判断,如胜利则修改UI状态并增加胜利数的统计。
l 如未胜利,则向对方发送已经落子的消息。
l 落子完毕,将m_bWait标志置为TRUE,开始等待对方回应。
3.2.5 绘制棋盘——OnPaint
每当WM_PAINT消息触发时,都需要对棋盘进行重绘。OnPaint作为响应绘制消息的消息处理函数使用了双缓冲技术,减少了多次绘图可能导致的图像闪烁问题。这个函数主要完成了以下工作:
l 装载棋盘位图并进行绘制。
l 根据棋盘数据绘制棋子。
l 绘制最后落子指示矩形。
3.2.6 对方落子完毕——Over
在对方落子之后,仍然需要做一些判断工作,这些工作与OnLButtonUp中的类似,在此不再赘述。
3.2.7 设置游戏模式——SetGameMode
这个函数通过传入的游戏模式参数对m_pGame指针进行了初始化,代码如下:
void CTable::SetGameMode( int nGameMode )
{
if ( 1 == nGameMode )
m_pGame = new COneGame( this );
else
m_pGame = new CTwoGame( this );
m_pGame->Init();
}
这之后,就可以利用OO的继承和多态特点[8]来使m_pGame指针使用相同的调用来完成不同的工作了,事实上,COneGame::Init和CTwoGame::Init都是不同的。
3.2.8 胜负的判断——Win
这是游戏中一个极其重要的算法,用来判断当前棋盘的形势是哪一方获胜。其详细内容请参见“主要算法”一节。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>