毕业设计(论文)-J2ME手机游戏的开发-Beckham Goal.doc_第1页
毕业设计(论文)-J2ME手机游戏的开发-Beckham Goal.doc_第2页
毕业设计(论文)-J2ME手机游戏的开发-Beckham Goal.doc_第3页
毕业设计(论文)-J2ME手机游戏的开发-Beckham Goal.doc_第4页
毕业设计(论文)-J2ME手机游戏的开发-Beckham Goal.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

j2mej2me 手机游戏的开发手机游戏的开发-beckham-beckham goalgoal 摘摘 要要 j2me(java 2 micro edition)是近年来随着各种不同设备,尤其是移动通信设 备的飞速发展而诞生的一项新的开发技术。它定位在消费性电子产品的应用上, 对设备的智能化、多样化,提供了革命性的解决方案,并因其“write once, run anywhere”的 java 特性而提高开发的效率。随着手机的日益普及、java 功能在 移动设备上的实现,java 应用程序产生的手机增值服务逐渐体现出其影响力, 对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。本论文着眼于 j2me 技术的应用,开发一款简单的手机游戏程序-beckham goal。 论文在分 析了实现小游戏的相关基础技术及理论后,对该游戏进行了功能需求分析、模 块划分及总体设计,解决了游戏中涉及的碰撞检查以及其他若干关键技术,最 后在 j2me 平台下实现了该小游戏,并通过验证达到预期的效果。 关键词:关键词:j2me;手机游戏; k-java;碰撞检查 the development of j2me mobilephone game -beckham goal abstract as a new development technology, j2me (java 2 micro edition) emerged with the development of various communications equipments, especially mobile facilities. since it is a kind consumption-oriented of electronic product, it offers a completely new solution to the intelligentization and diversification of communications equipments. besides, due to its feature of “write once, run anywhere”, it improves the efficiency of development. along with the popularization of mobile phone and the application of java to the mobile equipments, gradually the influence of mobilephones added-value service is shown, which is produced by the application of java to the daily life and informing. this paper focuses on the application of j2me and develops a mobilephone game-beckham goal. based on the analysis of basic technique and theories, this paper conducts analysis of function demand and module measurement as well as macro-design. as a result, this paper solves the conflict detection and some other key technique. finally this paper successfully develops this mobilephone by use of j2me. and then the anticipative purpose has been met after the validation. key words: j2me; mobilephone game;k-java; conflict detection 目目 录录 论文总页数:25 页 1引言 .1 1.1手机游戏概述 .1 1.2java手机游戏的发展现状1 1.3手机游戏的发展前景 .2 2j2me 的概述与相关理论基础.3 2.1j2me 的简介.3 2.2j2me 的构架.3 2.3j2me 游戏开发基础相关.4 2.3.1基于精灵的动画 .4 2.3.2gamecanvas 类来实现平稳动画.4 2.3.3图形坐标 .5 2.3.4检测对象之间的冲突 .5 2.4常用开发工具及其配置与使用 .5 3需求分析与设计方案 .6 3.1需求分析 .6 3.2设计方案 .7 3.3游戏初步功能设计 .8 4游戏的设计流程以及实现 .9 4.1游戏的设计 .9 4.2游戏的实现 10 4.2.1.图像和精灵的创建和绘制 10 4.2.2.玩家按键移动的设置 11 4.2.3.胜利及失败的判定 13 4.2.4.球员运动轨迹的设置 15 4.2.5.游戏中分数的记录 16 4.3碰撞冲突机制的实现 20 5系统测试 20 结 论 22 参考文献 23 致 谢 错误!未定义书签。错误!未定义书签。 声 明 错误!未定义书签。错误!未定义书签。 第 1 页 共 25 页 1 1 引言引言 1.11.1 手机游戏概述手机游戏概述 手机游戏几乎是当今市面上所有手机所必有的。在几年前的机型中,游戏 都是手机中自带的,称为嵌入式游戏,由手机生产厂商设计并直接嵌入在手机 里面。这样的游戏用户不能自行开发、添加及删除,其游戏种类取决于不同的 机型,是一种单机游戏。随后的几年兴起了一种基于短信的游戏,由用户发送 特定字符串给短信游戏提供商,来控制游戏的动作或剧情的发展。随着 wap 的 兴起,出现了一种基于浏览器的游戏,和短信游戏差不多,由用户手机通过 wap 登录游戏提供商所提供的网址,然后填写或选择相应表单来操作游戏。上 面两类游戏都是基于文本的,操作比较繁琐,游戏性不强。短信游戏每做一次 操作(也就是发送一条短信)需要花费一毛钱;wap 游戏无论是通过 csd 上网 还是通过 gprs 上网都需要出上网费用。两种游戏的花费都比较高。现在新出的 手机很大一部分都支持 java 程序下载,而且这是一种趋势。由 java 开发的游 戏可以对图像进行操作,是动态的。而且可以接入网络,既可以开发单机游戏 也可以开发网络游戏。随着彩屏手机的普及,游戏可以不再是黑白的,可随心 所欲的为游戏中的不同物体赋予不同的颜色。 过去的手机是一个封闭的操作系统,除非用厂商自己的软件和工具,否则 无法对手机的菜单进行改动,更无法在手机上附加其他应用。而 k-java 技术的 应用将摆脱这些传统的束缚,k-java 编写的应用程序可以兼容不同的网络协定, 简单说就是,只要网络内容服务提供商提供 k-java 服务,用户的 k-java 手机 就可以拥有无限扩充应用的能力。k-java 服务是一种新的移动数据业务的增值 服务,它为用户提供了一个开放的平台,能更好地为用户提供全新图形化、动 态化的移动增值服务。用户使用支持 k-java 功能的手机终端,接入网络内容服 务提供商的 k-java 服务平台,可以通过手机随意下载 java 应用软件,能方便 地享受类似于 internet 上的各种服务,如下载游戏、动漫、小说等,也可进行 各种在线应用,如联网游戏、收发邮件、证券炒股、信息查询等。 1.21.2 javajava 手机游戏的发展现状手机游戏的发展现状 在欧美市场,由于较早采用 gprs 技术,所以欧洲和美国运营商的 k-java 也开展得较早,不过早期的应用并没能在个人消费市场激起太大的波澜。而日 韩的无线数据业务从发展之初就将目标锁定在了游戏、娱乐等个人消费方面。 k-java 技术能够利用手机有限的硬件条件使得 pc 上大量的互动性娱乐、游戏 应用在手机上,正是凭借着这一技术特点,k-java 迅速成为了手机游戏的主流 编程语言。在欧美市场,2002 年此项业务的直接收入已经超过了 2.45 亿美元。 第 2 页 共 25 页 在中国,2003 年 2 月 15 日,中国移动开始了大范围的 k-java 应用测试。 4 月 8 日,无线 k-java 服务被移动正式定名为“百宝箱” ,并全面开始免费试 用。而在发展较快的广东地区,更是从 5 月 17 日开始了大规模的 k-java 业务 推广,投入资金多达千万元。7 月 1 日,中国移动宣布了“百宝箱”正式商用 的消息,k-java 在中国市场的掘金旅程也将由此开启。 但是,k-java 目前在中国的发展速度却不够快,主要的原因是用户群体不 足。首先是终端不足。在市场上,能够支持 k-java 的手机很少,而且几乎都是 几个国外主流品牌,其定位也较高,而国内品牌,介于成本和技术,一般都不 含 k-java 功能。与此同时,大量已有手机的老用户不会因此功能而重新购置一 台新的手机。其次,在拥有 k-java 功能的手机用户群体中,懂得或者愿意使用 k-java 的人却更少。所以,我们必须期待更多含有 k-java 功能的面向各个消 费群体的手机上市和普及,以及用户对手机附加功能使用意识的加强。 1.31.3 手机游戏的发展前景手机游戏的发展前景 由 juniper research 发布的最新调查说明,java 手机游戏在 2008 年将会 获得超过 63 亿美元得收益。据 idc 预计,仅在美国,整个手机无线游戏业务的 硬件、软件以及服务所带来的收入在 2006 年将达到 40 亿美元,而更别说有着 更大手机无线游戏市场潜力的日本、韩国和中国等亚洲市场。预计到 2006 年, 全球的无线游戏市场总值将达 170 亿美元。研究机构 informa 分析说,手机游 戏是全球游戏市场中增长最快的部分,其产值将从 2002 年的 2.43 亿美元上升 至 2007 年的 38 亿美元。英国市场研究机构 analysysltd 在这份研究报告中称, 随着彩屏智能手机的广泛应用和手机功能不断升级,游戏市场预期将从 2002 年 的 2 亿欧元,至 2008 年时增长到接近 30 亿欧元。frost playerhead = image.createimage(“/playerhead.png“); playersprite = new sprite(image.createimage(“/player.png“), 22, 22); playersprite.setposition(2, 77); ballsprite = new sprite(image.createimage(“/ball.png“), 14, 10); ballsprite.setposition(18, 85); npcsprite0 = new sprite(image.createimage(“/npc1.png“); npcsprite0.setposition(30, 4); npcyspeed0 = 1; npcsprite1 = new sprite(image.createimage(“/npc2.png“); npcsprite1.setposition(72, 4); npcyspeed1 = 2; npcsprite2 = new sprite(image.createimage(“/npc3.png“); npcsprite2.setposition(113, 4); npcyspeed2 = -1; npcsprite3 = new sprite(image.createimage(“/npc4.png“); npcsprite3.setposition(148, 98); npcyspeed3 = -2; 第 11 页 共 25 页 catch (ioexception e) system.err.println(“failed loading images!“); 这段代码首先创建了背景和玩家脑袋图像,然后开始创建精灵。并且每个 精灵都被设置到屏幕的指定位置。虽然我们能够用游戏屏幕和精灵的宽度和高 度来列出一个通用的精灵位置的方程式,但是这样通过硬性编码来确定位置还 是更加的容易和准确。位置定下来以后,球员精灵的速度需要我们来设置,这 样他们就能按照我们所设置的速度来行进了。 由于游戏中有相当多的图形对象,hcanvas 类的 draw()方法就比较简单。 就拿绘制足球场背景为例,通过下面的代码就能实现: g.drawimage(background, (0-70), 0, graphics.top | graphics.left); 对于玩家精灵和足球精灵的绘制,也就是游戏中最重要的图形对象。代码 如下: playersprite.paint(g); ballsprite.paint(g); 球员精灵的绘制,只需要把 paint()方法的调用放入到循环中,就可以绘 制完每辆汽车。代码如下: for (int i = 0; i 2) int keystate = getkeystates(); if (keystate playersprite.nextframe(); ballsprite.move(-6, 0); ballsprite.nextframe(); else if (keystate 第 12 页 共 25 页 playersprite.nextframe(); ballsprite.move(6, 0); ballsprite.nextframe(); if (keystate playersprite.nextframe(); ballsprite.move(0, -6); ballsprite.nextframe(); else if (keystate playersprite.nextframe(); ballsprite.move(0, 6); ballsprite.nextframe(); else if (keystate ballxspeed = 6; ballyspeed = 6; checkbounds(playersprite, false); checkbounds(ballsprite, false); / reset the input delay inputdelay = 0; 它在每次游戏循环的时候都要递增,而每 3 次游戏循环就允许一次按键发 生。也就是说,按键的响应速度减小为游戏循环速度的三分之一,这就限制了 玩家的移动速度,使得这个简单的游戏更好玩、更具有挑战性。当按键被检测 到,代码就将玩家精灵和足球精灵移动一定的位置,然后调用 nextframe()来 改变它的帧图像。checkbounds()的调用,它用来确保玩家还在游戏屏幕的边界 之内。它允许玩家折返精灵或者是把精灵限制在屏幕边界内移动。第二个参数 决定了它会采取哪种行为,true 便是精灵折返,而 false 表示防止精灵移动超 第 13 页 共 25 页 出屏幕边界。 在游戏中加入了足球精灵,游戏开始的时候玩家精灵和足球精灵能同时控 制,但是当玩家按 fire 键时,足球就会踢出去,并且此时玩家精灵的移动不能 控制足球精灵的移动。只有当玩家精灵在此和足球精灵发生冲突的时候,玩家 精灵的移动才能在此控制到足球精灵的移动。代码如下: if (ballsprite.collideswith(playersprite, true) if (+inputdelay 2) int keystate = getkeystates(); . 对于碰撞的实现,在 wireless toolkit 中的 midp 2.0 的 game 包中所包含 的 collideswith 中有碰撞检测,但是由于该游戏主要的事件响应基本上于冲突 有关,有关冲突的实现将在本章最后进行讲解。 4.2.3.4.2.3. 胜利及失败的判定胜利及失败的判定 update()方法检查足球在每次移动后是否通过边界,下面的代码用来查看 足球是否安全通过: if (ballsprite.getx() 154) /播放通过的声音 try celebrateplayer.start(); catch(mediaexception me) /重置玩家和足球的位置并增加积分 playersprite.setposition(2, 77); ballsprite.setposition(18, 85); score += 25; 数字 154 表示的是游戏屏幕上结束的水平位置,如果足球的位置大于这个 位置的话,玩家就算是安全通过。此时会播放胜利通过的声音。表示一次安全 通过,玩家精灵和足球精灵的位置都被重置为起始位置,得分增加 25 点。 for (int i = 0; i 98) npcsprite3.setposition(148, 98); npcyspeed3 = -2; 如果变量 numlives 的值减少到了 0,就表示游戏结束了,于是 gameover 被设置为 true。否则,玩家精灵和足球精灵的位置被重置并且游戏继续。只有 当冲突发生的时候循环中断。 由于游戏中有相当多的图形对象,hcanvas 类的 draw()方法就比较简单。 就拿绘制足球场背景为例,通过下面的代码就能实现: 第 16 页 共 25 页 g.drawimage(background, (0-70), 0, graphics.top | graphics.left); 对于玩家精灵和足球精灵的绘制,也就是游戏中最重要的图形对象。代码 如下: playersprite.paint(g); ballsprite.paint(g); 球员精灵的绘制,只需要把 paint()方法的调用放入到循环中,就可以绘 制完每辆汽车。代码如下: for (int i = 0; i recorddata.length) recorddata = new byters.getrecordsize(i); len = rs.getrecord(i, recorddata, 0); hiscoresi - 1 = (integer.parseint(new string(recorddata, 0, len); catch (exception e) system.err.println(“failed reading hi scores!“); try rs.closerecordstore(); catch (exception e) system.err.println(“failed closing hi score record store!“); else for (int i = 0; i 5; i+) hiscoresi = 0; readhiscores()方法开始的时候先尝试打开名为“hiscores”的记录存储。 方法的第二个参数(false)表明如果指定名字的记录存储没有找到的话,就不 会创建一个新的记录存储。如果记录存储成功地打开,readhiscores()方法接 下来遍历记录并每次读取一个,将记录读入到 hiscores 整数数组中。读取完最 高得分以后,记录存储关闭。 writehiscores()方法负责把整数数组 hiscores 写入到 hiscores 记录存储 中。 private void writehiscores() try recordstore.deleterecordstore(“hiscores“); 第 19 页 共 25 页 catch (exception e) recordstore rs = null; try rs = recordstore.openrecordstore(“hiscores“, true); catch (exception e) system.err.println(“failed creating hi score record store!“); for (int i = 0; i 5; i+) / format each score for writing byte recorddata = integer.tostring(hiscoresi).getbytes(); try rs.addrecord(recorddata, 0, recorddata.length); catch (exception e) system.err.println(“failed writing hi scores!“); try rs.closerecordstore(); catch (exception e) system.err.println(“failed closing hi score record store!“); writehiscores()方法采取了一种独特的方法来写入最高得分。这个方法删 除整个记录存储并写入一个新的记录存储,而不是尝试找到具体的最高得分记 录并替代它。删除了记录存储后,writehiscores()打开一个新的记录存储,此 时要确保把 true 作为参数传递给 openrecordstore()方法,以保证新的存储记 录能够创建。然后遍历 hiscores 数组,并且每个最高得分记录都被写入到新创 第 20 页 共 25 页 建的记录存储中。当所有的最高得分记录写入后,调用 closerecordstore()方 法关闭记录存储。 4.34.3 碰撞冲突机制的实现碰撞冲突机制的实现 碰撞代码的算法,可以考虑是两个精灵之间的距离来检测是否发生了碰撞。 如我们将 a 精灵的中心坐标设为(x1,y1),把 b 精灵的坐标设为(x2,y2),在实现 代码中我们只需要把 a 到 b 之间的距离设置为一个定值,我们可以考虑为 c,如 果|ab|c 则可以检测 a 精灵和 b 精灵之间发生了冲突。如图 10 所示: 图 10 点与点之间距离判断法 我们可以把 a 到 b 中心点之间看成一个三角形的话,根据勾股定理。我们 可以得出如下公式: c =sqrt(a*a+b*b) a =|x2-x1| b =|y2-y1| 也可以采用点到矩形的判断方法,它的实现机制为,把精灵 a 的坐标看成 一个点(x1,y1),把另外一个精灵 b 看成一个矩形,给出 b 的三点坐标即可,我 们可以把这三点坐标标记为(x2,y2),(x3,y3),(x4,y4),要检测是否发生了碰撞 冲突我们只需要判断精灵 a 所给出的坐标是否是在矩形的这个坐标区域内,也 就是我们之需要看一下关系是否成立: x2x1x3 y2y1y4 以上碰撞检测的两个较好的实现算法。 5 5系统测试系统测试 这个游戏相对于其它的手机游戏可能比起来要简单多了,不过测试起来还 是会觉得非常的有意思。在初期对代码的调试中,由于 sdk 的选择(最先用的 是 sdk1.5.1) ,造成对于代码的编译不能成功执行。后来在老师的指导下换成 了 j2sdk1.4.2,解决了该问题。现在面对的就是对于改变了足球移动的精灵的 速度后,会出现一些问题。和对于碰撞类代码。没有能找到 midp2.0 的源代码。 第 21 页 共 25 页 但是对于碰撞的代码在老师的指导下已有了一些研究。 在游戏开始的时候玩家的位置会出现在屏幕的左边位置,而敌人此时能够 上下移动来阻碍我们的玩家顺利的通过游戏。在屏幕的右方则会有个守门员。 屏幕的最左上的小头像为告诉玩家还可能进行游戏的次数,屏幕最右上方的数 字则是表示玩家目前所取得的分数。下图 10 则是游戏开始时的图像。 图 10 游戏开始时效果图 在游戏中当玩家的足球不小心碰到敌人(防守队员或者守门员)的时候, 玩家的位置则会重新回到游戏开始的地方,并且在屏幕的左上方出的小头像会 减少一个。图 11 显示的是当玩家失去一次机会后的情况。 图 11 失去了一次机会 当玩家把足球踢出去后,玩家的再次移动将不会导致足球的移动。图 12 显 示了玩家把足球踢出去后的移动情况,下方的足球将不在顺着玩家的移动而移 动。 图 12 玩家踢出球后的移动情况 当玩家每次胜利一次后,屏幕右上方的数字会增加,来显示玩家这个时候 在游戏中的得分情况。图 13 显示了玩家胜利一次后的得分。 第 22 页 共 25 页 图 13 分数的增加情况 如果玩家的三次机会用完了的话,就会退出游戏,显示玩家本次游戏所得 的总得分以及历次得分的情况记录,图 14 显示的是最后的得分屏。 图 14 游戏结束时的得分屏 结结 论论 之所以选择 j2me 手机程序设计实践 并且把 java 作为移动平台下的游戏开 发语言。第一手机编程这项技术还很新,并且支持这项技术的手机也很新。在 手机游戏产业还没有完全绽放的时候,能通过毕业设计的机会来学习如何设计 和构建手机游戏,虽然本次毕业设计的游戏还是过于简单,但是对于今后的发 展还是会产生很大的帮助,当该产业兴起的时候,就能够做好充分的准备来把 握机会。 对于该毕业设计选择为 midp2.0 的原因是,它内含丰富的游戏类库,这些 丰富的类库为游戏的开发和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论