教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

疯狂java实例-第15章 仿QQ游戏大厅(5)

来源:网络收集 时间:2026-08-31
导读: 代码清单: code\fivechess-client\src\org\crazyit\gamehall\fivechess\client\action\ReceiveInAction.java public void execute(Response response) { //得到新进入的玩家 } ChessUser newUser = (ChessUser)res

代码清单:

code\fivechess-client\src\org\crazyit\gamehall\fivechess\client\action\ReceiveInAction.java

public void execute(Response response) { //得到新进入的玩家 }

ChessUser newUser = (ChessUser)response.getData("newUser"); //向玩家列表中加入一个新玩家

UserTable userTable = (UserTable)UIContext.modules.get(UIContext.HALL_USER_TABLE); userTable.addUser(newUser); //向聊天内容中添加

ChatPanel chatPanel = (ChatPanel)UIContext.modules.get(UIContext.HALL_CHAT_PANEL); chatPanel.appendContent(newUser.getName() + " 进来了"); chatPanel.refreshJComboBox();

以上代码需要注意的是,新建一个UIContext来保存各个界面组件,UIContext中提供一个Map对象来保存界面组件,当有新的界面组件被创建时,就需要加入到Map中,并为该组件提供一个唯一的名称。

ReceiveInAction是玩家用玩接收其他玩家进入游戏大厅的消息,一旦有新的玩家进入,服务器就会向所有玩家发送消息,有新的玩家进入,需要更新玩家列表,更新聊天界面组件的下拉框,最后在ChatPanel添加消息提示。具体的效果如图15.4所示。

疯狂java实例-第15章 仿QQ游戏大厅

图15.4 新的玩家进入游戏大厅

在本小节中,我们编写了游戏大厅的各个界面组件与对象,并实现了用户进入游戏大厅的功能,在下面章节,我们将实现游戏大厅的其他功能。

15.4 实现聊天功能

在游戏大厅中,我们提供了一个聊天的界面,玩家可以在上面进行聊天,发送或者接收聊天信息,需要注意的是,聊天界面是可以共用的,除了在游戏大厅中使用聊天界面外,还可以在游戏界面中使用。本小节实现游戏大厅中的聊天功能。

15.4.1 发送聊天信息

在聊天界面(ChatPanel)中,当玩家选择了某个聊天的对象,输入内容再点击发送按钮后,就可以创建一次请求,将该请求发送到服务器,告诉服务器:我对某个人(所有人)发送了聊天内容,请帮我转发。服务器得到这个请求后,就执行某个服务器处理类,该处理类就将聊天内容转发给相应的玩家。

以下是ChatPanel发送聊天内容的方法。

代码清单:code\fivechess-client\src\org\crazyit\gamehall\fivechess\client\ui\ChatPanel.java

//发送信息

public void send() { //得到发送的内容

疯狂java实例-第15章 仿QQ游戏大厅

}

String content = this.conentField.getText(); //得到接收玩家

ChessUser receiver = (ChessUser)this.target.getSelectedItem(); //构造请求

Request request = new Request(this.serverAction, this.clientAction); //设置参数

request.setParameter("receiverId", receiver.getId()); request.setParameter("senderId", er.getId()); request.setParameter("content", content); //发送请求

er.getPrintStream().println(XStreamUtil.toXML(request)); appendContent("你对 " + receiver.getName() + " 说: " + content);

以上的代码中,构造Request对象时,我们使用的是serverAction与clientAction这两个类属性,由于这个ChatPanel是可以重用的,因此serverAction与clientAction也是由使用者来提供。游戏大厅中发送聊天请求的服务器处理类是SendMessageAction,客户端处理类是ReceiveMessageAction。Request中包括了接收人id、发送人id和聊天内容的信息。服务器中的SendMessageAction得到这些信息后,就可以将内容发送给相关的玩家,以下是SendMessageAction的具体实现。玩家发送聊天信息,由服务器的SendMessageAction接收,再由该Action转发,让客户端的ReceiveMessageAction负责处理。

代码清单:

code\GameHall-Server\src\org\crazyit\gamehall\server\action\SendMessageAction.java

public void execute(Request request, Response response, Socket socket) { String receiverId = (String)request.getParameter("receiverId"); String senderId = (String)request.getParameter("senderId"); ChessUser sender = ers.get(senderId); String content = (String)request.getParameter("content"); if (receiverId == null) { //向所有人发 }

for (String id : ers.keySet()) { if (id.equals(senderId)) continue; ChessUser cu = ers.get(id); response.setData("content", sender.getName() + " 对 所有人 说:" + content);

cu.getPrintStream().println(XStreamUtil.toXML(response)); } } else { //得到接收人 }

ChessUser receiver = ers.get(receiverId); if (receiver.getId().equals(sender.getId())) return;

response.setData("content", sender.getName() + " 对你说:" + content); receiver.getPrintStream().println(XStreamUtil.toXML(response));

SendMessageAction中根据请求的参数来发送相应的信息,需要注意的是,如果接收人id为空的话,那么就意味着向所有人发送聊天内容。

15.4.2 接收聊天信息

接收聊天信息由ReceiveMessageAction负责处理,该类属于客户端处理类,在fivechess-client

疯狂java实例-第15章 仿QQ游戏大厅

模块中,某个玩家得到聊天内容后,就可以获得界面组件,再将这些聊天内容追加到聊天界面组件的文本域中。 代码清单:

code\fivechess-client\src\org\crazyit\gamehall\fivechess\client\action\ReceiveMessageAction.java

public void execute(Response response) { //

得到聊天的界面组件 }

ChatPanel chatPanel = (ChatPanel)UIContext.modules.get(UIContext.HALL_CHAT_PANEL); //从服务器响应中得到内容

String content = (String)response.getData("content"); chatPanel.appendContent(content);

聊天的具体效果如图15.5所示。

图15.5 聊天效果

15.5 启动游戏

玩家选择了某一个位置坐下的时候,需要对位置进行判断,看下该位置是否有人,还要对玩家当前的状态进行判断,判断其是否已经坐下了,如果玩家没有坐到任何位置上并且当前所选择的位置没有玩家,就可以坐到位置上并展现游戏界面。

…… 此处隐藏:2054字,全部文档内容请下载后查看。喜欢就下载吧 ……
疯狂java实例-第15章 仿QQ游戏大厅(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/279657.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)