免费论文设计VC++五子棋 第4页
5 消息机制
Windows系统拥有自己的消息机制,在不同事件发生的时候,系统也可以提供不同的响应方式[11]。五子棋程序也模仿Windows系统实现了自己的消息机制,主要为网络对弈服务,以响应多种多样的网络消息。
5.1 消息机制的架构
当继承自CAsyncSocket的套接字类CFiveSocket收到消息时,会触发CFiveSocket::OnReceive事件[12],在这个事件中调用CTable::Receive,CTable::Receive开始按照自定义的消息格式接收套接字发送的数据,并对不同的消息类型进行分发处理。若图片无法显示请联系QQ752018766,免费论文设计VC++五子棋 第4页系统免费,转发请注明源于www.youerw.com
图5.1 自定义的消息机制
如图5.1所示,当CTable获得了来自网络的消息之后,就可以使用一个switch结构来进行消息的分发了。
5.2 各种消息说明
网络间传递的消息,都遵循以下一个结构体的形式:
// 摘自Messages.h
typedef struct _tagMsgStruct {
// 消息ID
UINT uMsg;
// 落子信息
int x;
int y;
int color;
// 消息内容
TCHAR szMsg[128];
} MSGSTRUCT;
随着uMsg表示消息ID,x、y表示落子的坐标,color表示落子的颜色,szMsg随着uMsg的不同而有不同的含义。
5.2.1 落子消息——MSG_PUTSTEP
表明对方落下了一个棋子,其中x、y和color成员有效,szMsg成员无效。在人机对弈游戏模式下,亦会模拟发送此消息以达到程序模块一般化的效果。
5.2.2 悔棋消息——MSG_BACK
表明对方请求悔棋,除uMsg成员外其余成员皆无效。接到这个消息后,会弹出MessageBox询问是否接受对方的请求(如图5.2所示),并根据玩家的选择回返MSG_AGREEBACK或MSG_REFUSEBACK消息。另外,在发送这个消息之后,主界面上的某些元素将不再响应用户的操作。
图5.2 请求悔棋
5.2.3 同意悔棋消息——MSG_AGREEBACK
表明对方接受了玩家的悔棋请求,除uMsg成员外其余成员皆无效。接到这个消息后,将进行正常的悔棋操作。
5.2.4 拒绝悔棋消息——MSG_REFUSEBACK
表明对方拒绝了玩家的悔棋请求(如图5.3所示),除uMsg成员外其余成员皆无效。接到这个消息后,整个界面将恢复发送悔棋请求前的状态。
图5.3 拒绝悔棋
5.2.5 和棋消息——MSG_DRAW
表明对方请求和棋,除uMsg成员外其余成员皆无效。接到这个消息后,会弹出MessageBox询问是否接受对方的请求(如图5.4所示),并根据玩家的选择回返MSG_AGREEDRAW或MSG_REFUSEDRAW消息。另外,在发送这个消息之后,主界面上的某些元素将不再响应用户的操作。
图5.4 请求和棋
5.2.6 同意和棋消息——MSG_AGREEDRAW
表明对方接受了玩家的和棋请求(如图5.5所示),除uMsg成员外其余成员皆无效。接到这个消息后,双方和棋。
图5.5 同意和棋
5.2.7 拒绝和棋消息——MSG_REFUSEDRAW
表明对方拒绝了玩家的和棋请求(如图5.6所示),除uMsg成员外其余成员皆无效。接到这个消息后,整个界面将恢复发送和棋请求前的状态。
图5.6 拒绝和棋
5.2.8 认输消息——MSG_GIVEUP
表明对方已经投子认输(如图5.7所示),除uMsg成员外其余成员皆无效。接到这个消息后,整个界面将转换为胜利后的状态。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>