// 如果联系人不在列表中,拒绝游戏请求
if(itemObject == null) return ;
// 将sender参数转换成SBMessageHandler对象
SBMessageHandler switchboard = (SBMessageHandler)sender;
itemObject.contact = e.Sender;
itemObject.switchboard = switchboard;
// 将主窗口的聊天信息接收事件删除
switchboard.TextMessageReceived -=
new TextMessageReceivedEventHandler(TextMessageReceived);
// 创建游戏窗口对象
Game game = new Game(im, itemObject);
game.lblStatus.Content = "该对方走棋了!";
game.lblStatus.Tag = 0;
// 人工调用游戏窗口的聊天信息接收事件
game.TextMessageReceived(sender, e);
itemObject.game = game;
// 添加游戏窗口的聊天信息接收事件
itemObject.switchboard.TextMessageReceived +=
new TextMessageReceivedEventHandler(game.TextMessageReceived);
// 添加联系人离线事件
itemObject.contact.ContactOffline +=
new Contact.StatusChangedEventHandler(game.StatusChangedEvent);
game.setChessColorInfo(ChessColor.WhiteChess);
// 显示游戏窗口
game.Show();
}
}
当游戏的双方都启动如图4所示的游戏界面后,两个玩家就可以进行聊天和玩游戏了。
6 利用MSN聊天信息发送命令和下棋指令
前面介绍了如何实现两个联系人之间的聊天功能。在本程序中通过在聊天信息中加前缀的方式来发送命令文本。命令文本有两种:
(1)普通命令文本:该命令文本的前缀由Game.COMMAND_PREFIX指定。
(2)下棋命令文本:该命令文本的前缀由Game.CHESSMESSAGE_PREFIX指定。
如在下棋时,可以使用如下的代码来发送聊天信息:
SendInput(CHESSMESSAGE_PREFIX + x.ToString() + ":" + y.ToString());
其中x和y为鼠标点击Canvas的当前坐标。发送到对方的聊天信息为如下的形式:
^%@^210:200
其中“^%@^”为下棋命令的前缀,读者也可以使用其他的字符串,但要比较特殊。 对方在接收到该聊天信息后,会按着下棋命令来解释它,也就是说,会根据这个信息在棋盘上放一个棋子,而不会在聊天记录中显示这条信息。
|