`
insertyou
  • 浏览: 900651 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

手机网游制造之网络通信篇(已发《电脑报》)

阅读更多

目标手机软件

手机网游制造之网络通信篇

开发程序:疯狂的

开发进度:第二期

本期要点:设计客户端网络功能

开发平台:Java平台

上期我们讲了客户端游戏功能,设计的程序只是一个单机游戏,为什么会这样呢?因为没有网络功能,无法进行通信。本期,我们就介绍客户端网络功能的设计。

客户端网络功能设计思路

客户端网络功能就是将客户端的操作转换为数据发送给服务器端,并将服务器端反馈的数据以界面的形式呈现给用户。如果把所有的逻辑处理都放在服务器端,当然是最安全的形式,但是这样服务器端的压力会比较大,所以一般会将一些简单的程序逻辑,例如本示例中移动时的边界检测,放在客户端进行判断。

设计客户端网络功能,要用到的指令有:准备(READY)、开始(START)、移动(MOVE)、取得游戏数据(GETDATA)和释放(LAYBOMB)等几种。在第一次连接时发送准备指令,从服务器端获得一个唯一的用户编号(userID),然后再发送开始指令给服务器,查看是否有其他用户准备对战。

如果没有则循环发送开始指令,如果有用户,则在服务器端分配房间号,然后服务器端新开设一个房间,并将游戏初始化数据反馈给客户端,客户端进入游戏界面。在游戏界面中,每隔1秒中向服务器端请求一次游戏数据,该请求中包含房间编号和用户编号,当用户移动时发送移动指令给服务器,当释放时发送释放指令给服务器(图1)。

网络协议设计

网络协议(Protocol)是网络程序的核心,也是一个网络程序最核心的机密。网络协议就是指网络传输时的数据格式,由两套格式组成:客户端发送的数据格式和服务器端发送的数据格式。其中客户端发送的数据格式和服务器端接收的数据格式相同,客户端接收的数据格式和服务器端发送的数据格式相同。

在本程序中,客户端需要发送的指令数量比较少,格式也不复杂,所以采用常见的“指令名称+参数”的格式设计,即传输的数据中开始部分通过一个数据来代表指令的类型,而将该指令需要的参数以一定的格式跟随在该指令的后面,形成一条完整的协议数据。跟详细的介绍,请到http://www.shudoo.com/bzsoft下载。

监听器模式分析

为了将客户端界面和客户端网络编程有效的结合起来,并复用网络编程部分的代码,一种比较好的方法就是使用“监听器模式”。监听器模式是指在一个类执行功能到达某个步骤时,将处理该步骤的功能代码委托给另外一个对象进行处理。

例如汽车上的警报器就采用了监听器模式,汽车被移动时警报器对象就通过发出声音进行处理。在网络功能中,也采用监听器模式,网络通讯线程将服务器端数据的反馈委托给界面类中的方法进行处理,从而便于界面的控制,避免数据的大量传输。

在本示例中,声明了一个HttpListener接口,实现该接口的类都具备处理网络通讯反馈数据的能力,当网络通讯中数据反馈以后,调用该接口中的doResponse方法进行处理。而每个需要进行网络通讯的类都实现HttpListener接口,则每个界面类都具备了处理服务器端反馈数据的能力,然后在实现了的doResponse方法内部进行反馈数据的处理。

客户端网络功能设计步骤

第一步:创建项目

启动Eclipse环境,选择“FileNewJ2ME MIDlet Suit”,设置项目名称为“Bomber”,并一路选择“Next”, 完成项目的建立。然后新建一J2ME入口类选择“FileNewJ2ME MIDlet”,设置名称为“BomberMIDlet”,点击“Finish”。最后,按照上期介绍的步骤编写界面的代码和按键处理的代码(代码下载地址:http://www.shudoo.com/bzsoft

第二步:编写网络协议

选择“FileNewInterface”,设置名称为“RequestCommand”,点击“Finish”完成客户端发送指令接口的创建。输入网络协议代码,其中关键代码如下所示(完整代码下载地址:http://www.shudoo.com/bzsoft):

public interface RequestCommand {

/**准备命令*/

public final static byte READY = 0x0;

/**开始命令*/

public final static byte START = 0x1;

/**移动命令*/

public final static byte MOVE = 0x2;

/**放命令*/

public final static byte LAYBOMB = 0x3;

/**退出命令*/

public final static byte QUIT = 0x4;

/**获取游戏数据*/

public final static byte GETDATA = 0x5;

第三步:编写网络线程类

选择“FileNewClass”,设置名称为“HttpThread”,点击“Finish”完成网络线程类的创建。输入网络线程的代码,其中关键码如下所示(完整代码下载地址:http://www.shudoo.com/bzsoft):

//建立连接

hc = (HttpConnection)Connector.open(SERVER);

//获得输出流

os = hc.openOutputStream();

//发送数据

os.write(data);

//读取响应

if(hc.getResponseCode() == HttpConnection.HTTP_OK){

byte[] tmp = new byte[1024];

is = hc.openInputStream();

int n = is.read(tmp);

//生成有效数据

byte[] b = new byte[n];

System.arraycopy(tmp, 0, b, 0, n);

//处理反馈

listener.doResponse(b);

}else{

listener.doError("服务器反馈错误!");

第四步:在按键处理中添加发送指令

在已有的按键处理代码基础上,编写发送指令的代码。其中关键码如下所示(完整代码下载地址:http://www.shudoo.com/bzsoft):

playerDire = DIRE_UP; //改变方向

if(playerY - BOX_TILE_HEIGHT > 22){//边界检测

new HttpThread(generateMoveData(DIRE_UP),this); //发送指令

}

break;

case DOWN:

playerDire = DIRE_DOWN; //改变方向

if(playerY + SPRITE_HEIGHT + BOX_TILE_HEIGHT < 210){//边界检测

new HttpThread(generateMoveData(DIRE_DOWN),this); //发送指令

}

break;

case LEFT:

playerDire = DIRE_LEFT; //改变方向

if(playerX - TILE_WIDTH > 0){//边界检测

new HttpThread(generateMoveData(DIRE_LEFT),this); //发送指令

}

break;

case RIGHT:

playerDire = DIRE_RIGHT; //改变方向

if(playerX + TILE_WIDTH + SPRITE_WIDTH < width){//边界检测

new HttpThread(generateMoveData(DIRE_RIGHT),this); //发送指令

第五步:运行程序

Eclipse主界面左侧的“Package Explorer”中,选中项目源代码BomberMIDlet.java,单击鼠标右键,选择“Run AsEmulated J2ME Midlet”即可运行程序。

读者反馈

开发QQ群:看了上期的文章,《疯狂的》游戏界面可以改变成3D吗?

小编:可以修改成3D效果的界面,从而获得更加良好的界面体验。修改时主要影响程序中的界面绘制部分,对于用户操作控制以及网络部分都几乎不影响,程序的修改不会很麻烦。

开发QQ群:S60模拟器启动时闪一下就关闭了,为什么会这样?我在网上找了很久,都没有找到,所以才加入你们的群,请帮帮我!

小编:出现这种情况的原因有很多,下面列举几种比较常见的原因:1.编写的程序在运行是遇到错误或异常,阅读代码找出错误原因再进行修改 2.模拟器的安装出现错误,重新安装模拟器3.程序配置错误,重新配置开发环境。

开发QQ群:我的程序出现提示:Undefined symbol: 'int RSendAs::Connect(void) (?Connect@RSendAs@@QAEHXZ)'头文件加了的,为什么还会这样?

小编:为什么会这样,凭我的经验来看,应该是没有添加类库的引用,你添加过来再看看,应该就不会出现这样的提升了。

开发QQ群:正在做一个软件,其中有一项是日期选择,我想调用一个现成的控件来实现,应该怎么做?希望高手给一点建议。

小编:这个需要看你开发时使用的语言和技术。如果你在开发时使用的是Java ME技术,而且使用高级用户界面进行开发,则可以使用DateField控件,如果使用低级用户界面进行开发,那么就需要自己实现界面的绘制和逻辑处理。

读者问题手机开发中有支持移动定位技术的吗?

高手 悠然鸟有的,例如在Java ME技术中,有一个可选包JSR179 Location API专门支持移动定位技术开发,如果手机支持该可选包,则开发者再进行开发时则可以直接使用该API提供的功能。

读者问题:在手机来电时立即暂停程序,这个功能是怎么实现的?

你是手机编程的高手吗?你能解答上面这位读者的疑问吗?不要犹豫,来我们这里展示一下你的风采吧,来信请发到pcw-chendx@vip.sina.com(也可以给我们发送问题)。

第七个QQ: 72407081,验证码:手机开发。欢迎对手机编程感兴趣的朋友加入。

(河南 陈跃峰)

分享到:
评论

相关推荐

    电脑报2018年第29期-2018年7月23日

    由于提供的文件信息为“电脑报2018年第29期-2018年7月23日”的标题、描述和部分内容,但提供的【部分内容】并不是实际的文字内容,而是一系列混乱的字符组合,看起来像是未经处理的OCR扫描文本,其中包含了特殊字符...

    网络游戏-网络打印方法及网络打印机.zip

    这篇文档将深入探讨网络打印技术以及如何在网络游戏环境中实现有效的打印需求。 网络打印方法主要是指通过局域网(LAN)或互联网将打印任务从一台电脑发送到共享的网络打印机。这种方法的优点在于它允许多个用户...

    蓝色清爽ppt模板:4D电视电影技术4GDevices..pptx

    例如,通过4G网络,用户可以实现高清视频通话、观看视频会议,甚至利用手机进行高质量游戏。 随着技术的进步,4G设备的性能不断提升,轻薄的LTE客户端能够支持更加丰富和流畅的游戏体验,比如更新3D地图、获取视觉...

    自己用驱动qqqqqqqqqqqq

    4. 打印机驱动:使电脑能够与打印机通信,完成打印任务,对应惠普、佳能、爱普生等打印机品牌。 安装正确的驱动程序对电脑的稳定性和性能至关重要。有时,更新驱动程序可以解决硬件兼容性问题,提高设备性能,或者...

    针对节后多发电信诈骗案件的识别与防范.doc

    - **安装防护软件**:确保电脑和手机安装最新的防病毒软件,定期扫描,防止恶意软件窃取信息。 3. **教育与宣传**:学校和社区应加强电信诈骗的宣传教育,提高公众的防范意识,让每个人都成为自己的第一道防线。 ...

    Qualcomm携手三星推10nm制程最新骁龙835处理器.pdf

    骁龙835处理器在智能手机和其他移动设备中扮演着关键角色,它不仅提供了强大的处理能力,还支持先进的无线通信技术,如4G LTE和未来的5G网络。此外,它对于增强现实(AR)、虚拟现实(VR)以及人工智能(AI)应用也...

    20191211-万联证券-电子行业2020年年度投资策略报告:5G催生迭代需求,国产替代开启新周期.pdf

    这包括智能手机、平板电脑、可穿戴设备等,它们都需要支持5G网络并提供相应的用户体验。 4. 5G应用场景的落地:5G技术的低延迟和高带宽特性使得实时互动、高清视频通信、物联网、智慧城市等应用成为可能。这些应用...

    SkyCross发布全新WiFi天线系列

    SkyCross的解决方案被广泛应用到各种产品中,如无线路由器、机顶盒、游戏平台、电视、笔记本电脑、平板电脑、热点设备、智能手机等依赖WiFi连接的设备。 在高性能解决方案方面,SkyCross的802.11ac天线与顶级芯片组...

    A股2020年度投资展望:换挡资产荒,峰峦入莽苍-20191102-招商证券-103页.pdf

    预计会看到5G手机换机周期、VR/AR消费电子增量、云游戏、云电脑、云手机等概念的不断导入,数据流量也会因通信技术革新而大幅增加。华为等公司预计将成为全球消费电子市场的主导力量,5G产业链的国产替代率也将大幅...

Global site tag (gtag.js) - Google Analytics