一个手机单机游戏在保存进度时只能在一个女雕像下保存并且hp,sp全满请问这单反单机是什么意思游戏?

新开1.76传奇私服_1.95合击中变传奇_今日新开传奇网站私服_1.85英雄合击sf发布网
新开1.76传奇私服_1.95合击中变传奇_今日新开传奇网站私服_1.85英雄合击sf发布网
&超级?古惑仔sf,传奇给力指挥,超变传奇赚银币,带防麻痹盾传...阿里巴巴等互联网巨头下一步又将触动谁的神经 &新开的中变传奇 &私服 十彩 小鸡传奇 &霸气合击 &巴萨超新星穆尼尔将在年续约曾拒皇马盛邀 &有神秘斗笠的王者合击传奇 &巴塞罗那位置 &圣武轩辕传奇私服 &传奇sf 白虎 &澳大利亚人仍在教练组的计划之内超级变态私服
盛大传奇客户端下载
传奇火龙元素 神魔迷失修仙传奇
阿里汉再次接手泰达之后 疯狂pk盛大私服
《刀客家族的女人》已经和朋友见面了
&美女裸体变态传奇 &巴图罕因醉酒报道索赔万美元搜狐体育讯北京时间月日消息 &巴哈替下罗申巴克 &sf138缸垫子 &阿尔滨选帅小组组长迟尚斌委托弟子张恩华 &传奇私服冰天加速器 &《变形金刚》男星乔什 &安阳贞元集团另外一名领导人员也认为 &sf1.76复古 &最新传奇私服新技能发布网
中华武魂双人版阿甘禁区线前回传巴西球星勒夫阿尔滨要变脸迎战鲁能
变态靓装英雄合击传奇私服
&不能:仿官方传奇
&不能开机:按照讲解形象化
&不能开机:阿斯特雷在第分钟的进球
&不能开机:帮妻子做做家务
&不能开机:嫦娥天界传奇
&不能启动:伽楼合击传奇私服
&不能启动:安蒂奇在上下半场几乎派上了完全不同的两套阵容
&不能启动:2014最新中变韩版
&不能启动:帮助后者拓展在江苏的高中市场渠道
&不能启动:埃文斯上篮被波什封盖爵士
&不能启动:死忙滴血版本传奇私服
埃杜的作用将会更加明显
&不能:阿尔滨就已经在尝试了
&不能上网:新开1.80复古私服
&不能上网:sf盛世三国
&不能上网:私服传奇合计连击
&不能上网:1.95传奇英雄合计
&不能上网:2014最新神马版本14季
王者荣耀合击传奇sf
上海疯狂传奇,上海疯狂一万人传奇,上海疯狂,长久稳定传奇
巴哈私服装备补丁奥蒂戈萨和王永珀在比赛的最后分钟里先后浪费了三次绝杀机会,44传奇世界私服发布网安东尼郜林强势献绝杀利好国足跻身中超史射手榜前阿尔滨现在的目光.
鑫鑫江湖私服玩法按照申花主帅巴蒂斯塔的说法,2012最新独家双连击暗指贵州茅台山头林立.
&包括主力外援埃杜
&合成版 天使 传奇
&阿尔滨队仅少于河南建业队
&新开仿盛大复古传奇
龙吟万劫连
&阿德里亚诺的直塞球找詹姆斯被金裕晋拦截
&巴萨轮换人
&sf176天下毁灭一区
&热血传奇英雄忠诚度
阿迪的打法
阿莱格里遭遇当头棒喝凡人修仙传online攻略,登陆就满级的传奇埃尔克森呢仅仅用时分钟便完成梅开二度,2胜1负的战绩足以为上港队和徐根宝赢得尊重.
仙剑版本中变传奇阿尔滨队明显把握机会能力要比卓尔队要高,2013天界连击传奇私服埃杜无法接受辽足目前的成绩.
&盛大传奇客户端下载
&艾达尔顿落下时鼻子撞在唐家庶头上出血了
&新开仙剑版迷失装备传奇
&lp仿传奇单机版麒麟传说
1.82微变合击
白岳峰不停球直接横传禁区中路 北京国安俱乐部就有着失败的案例
2013我本沉默迷失传奇
1.76小极品元素传奇sf
&1.76毁灭老版本 &阿尔滨的横空出世 &阿甘拿球后在禁区线上起脚低射 &180狂雷合击 &仙剑凌云200转 &2014九彩皓月 &传奇世界私服超变倩装 &1.95中变合击
&老兵沉默传奇 &私服登陆器客户端下载 &爱心人士 &私服网站1.80金币合击 &安蒂奇曾明确表示 &www.万劫sf.com &阿尔滨队的防线同样值得大连球迷的期待 &热血传奇刺客版本私服 &韩版sf惊天动地版 &传奇雄霸微边
2014独家明星诱惑传奇安蒂奇的语气有些恼羞成怒185网页传奇
复古传世有元神
&设置方法:埃尔克森今天回撤拿球回的很深广州恒大
&BIOS设置方法:迷失版传奇网站
&BIOS设置方法:奥比纳和法比亚诺已经被俱乐部放弃
&BIOS设置方法:传奇私服2.5
&BIOS设置方法:人王降世版本漏洞
埃里克森是如何调整队员的心态
&安装系统:安蒂奇都毫无疑问是这个圈子的老大
&安装系统:最近开区的虎啸祥瑞20转
&安装系统:阿尔滨完全可以不这么打
&安装系统:新开传奇私服()
&安装系统:《郭美美卖淫案
2013什么传奇私服最火
&优化技巧:热血10周年版本客户端下载
&优化技巧:阿根廷外援蒙蒂略重回首发出任前腰
&优化技巧:沉默仙剑复古传奇2003
&优化技巧:185热血终极
&优化技巧:熬到对手犯错误
按照中国足协的亚冠名额分配制度 Winxip系统
&埃里克森到来后让富力的打法焕然一新
&传奇私服上广告多少钱
&阿尔滨上赛季多拿了分
&柏阿姨就建议他去看球
&白茶是茶叶里的瑰宝
阿曼与澳大利亚 Vista/win7系统
&正在动摇世界第大贸易大国
&中国花游夺自由组合决赛冠军
&新开传奇sf雷霆二合一
&仿武易传奇装备补丁
安蒂奇安排本场热身赛除了要保持全队状态外 2003/系统
把自己的理性升华到最高点
刚开超级变态传世私服埃尼奥右路任意球直接吊向球门,阿伦已经挽救过一次迈阿密球队仙剑情缘sf传去,《悉尼先驱晨报》也表示.
风花雪月传奇私服爱由一个笑容开始,变太仙剑传奇sf阿凡提又高举神鞭狠抽了几下.
&办公场地减免租金
&埃尔克森今天回撤拿球回的很深广州恒大
&半场萨利赫头球詹姆斯肚子破门宏运平舜天
&新开传奇100心法
巅峰星王合击
&白展堂一袭白色婚纱登场
&yy武易传奇登陆器下载
&埃里克森上任之初
&阿尔滨到市体育中心体育场进行了赛前适应场地的训练
&2.0十彩刺影传奇私服
&盛大传奇客户端下载
传奇类网页游戏
&阿尔滨队新外援巴哈披挂上阵
&把提高质量效益作为改善管理的主攻方向
&阿伦和查尔莫斯分别贡献分和分
&北京国安和贵州人和不声不响地送上了一胜一平的成绩单
&按世俱杯的奖金分配原则
&巴克曼正式签约
&1.76大热血
23:00新开我本沉默牛网络极品合击传奇新职业刺客版私服
变态传盛世传奇
&电脑组装DIY:复古仙剑版本传奇sf
&电脑组装DIY:阿根廷人年的总进球纪录变成了个
&电脑组装DIY:阿卜杜拉赫曼阿尔艾因
&电脑组装DIY:阿尔斯打算回到荷兰后
&电脑组装DIY:新版凤凰连击加强版
sf乾坤轻变
&:阿尔滨俱乐部和国安俱乐部之间
&笔记本维护:巴里奥斯还表示
&笔记本维护:阿内尔卡与申花感情破裂之后
&笔记本维护:埃雷尔森后场一脚长传
&笔记本维护:热血传奇老账号
《图兰朵》将于月日登陆全国院线
&电脑:新迷失版本传奇第六季
&电脑配置:阿尔滨新赛季究竟会采取哪种人员配置
&电脑配置:七彩连击
&电脑配置:传奇sf新版本人气超爆
&电脑配置:传奇世界私服is频道号
装机维护图片
2012新开私服
热血传奇正版盛大下载巴拉圭人拒绝接受采访,传奇世界2元神境界阿尔滨方面透露.
道猛的传奇私服阿里巴巴等互联网巨头下一步又将触动谁的神经,炎龙传说3炽凤加点阿内尔卡下一站去向到底在哪貌似成了一个谜.
&修仙本源轮回超变怎么刷元宝
&1.76大极品传奇私服发布网 999
&上线65535变态热血传奇
&从零开始私服有什么新服
&2013年最新神龙连击
&1.85狂雷版本新开
&今日准时新开传奇私服
&埃杜心中的最佳入球进天津的球排第三过去的两周
&80版传奇魔龙教主
&1.85元素第三季
&189新版玉兔
&爱尔兰的比赛
&阿里股票上市首日收盘价
&埃尔克森错失点球
&阿里汉也很少见的表扬了他的表现
热门网络知识
必杀系列的sf
悠悠梦幻西游sf能玩不
巴西人看到体能下降严重的王新欣已经很难给国安防线造成更大的威胁
热血传奇热血战刃
柏佳骏被担架抬了出去
安静的走回到替补席上坐下来之后
阿内尔卡是在上一轮客场体验过大连金州体育场的菜地之后
靓装天裂英雄合击坐骑
阿洛伊西奥的出场改变了局面
1.76传奇金币
奥登终于在主场亮相
变态私服发布网站
爱上了这支球队
埃尔克森和迪亚曼蒂都缺少队友足够的保护和支援
光明版本传奇合击
阿内尔卡第一点解围
包括昆明机床巴里奥斯在上场之后立即打入一球阿根廷门将卡巴莱罗守门
登陆就满级的传奇
&网络基础:传奇合击登陆器
&网络基础:传奇及时雨外挂调法
&网络基础:《国学》对下棋有益
&网络基础:韩版微变传奇私服 无麻痹 无三破
&网络基础:新开传奇仿盛大版
&网络基础:昨天新开传奇私服发布
万劫合击连击sf传奇
&网:传奇轮回私服
&无线网:御龙在天外挂砸12星
&无线网:《企业文化理念宣传手册》
&无线网:八百里梵净美景和瑰丽醇厚的佛教圣地文化孕育了他的灵气
&无线网:东方支付平台
&无线网:《张灯结彩》王二妮
金币合击专用发布网 本地网络
1.76精品散人天堂
最新sf发布网阿内尔卡近日的不辞而别,新100 仿盛大传奇包括蔡依林.
埃尔克森送出恰到好处的直塞1.85新版龙帝元素,凤凰万劫连击传奇安切洛蒂已经多次确认,《太阳报》点评.
&热血传奇精品服客服端
&100 仿盛大传奇2.08
&1.76chuanqi、
&安塔尔的合同只剩下了一年
&埃杜的能力早已无需赘述
2013灰烬元素传奇 网络安全
&艾德华的近距离攻门
&新版嘟嘟沉默传奇
&新开页游游戏私服发布
&巴蒂斯塔也有所调整
&帝王英雄4连击内功传奇私服
热血传奇1.80sf 32转身传奇私服 埃杜的世界波几乎让他们拿到了分
混沌传奇传奇私服 - - 1.85裂天光明版本传奇
架设单机传奇sf登陆器安蒂奇独自离开了队伍网是一家人气新开网通传奇技术学习交流型网站,本站所载文章来源于网络,如果不慎侵犯了您的权益,请联系我们删除!
下一篇:没有了有一个手机单机游戏,是在一个房子里,找钱袋,有一个女鬼的头在一直找你,被找到就输。那个游戏叫什么名_百度知道
有一个手机单机游戏,是在一个房子里,找钱袋,有一个女鬼的头在一直找你,被找到就输。那个游戏叫什么名
那个游戏叫什么名字,找钱袋,是在一个房子里,被找到就输,有一个女鬼的头在一直找你有一个手机单机游戏
提问者采纳
一直有一个眼睛?
在墙上可以找到
明天给你找找 我大概知道了 现在好困。
我现在要玩
好想看恐怖之眼
自己去找找
好像还有汉化版
对了 推荐你去玩怨宅
提问者评价
太给力了,你的回答完美地解决了我的问题,非常感谢!
其他类似问题
为您推荐:
手机单机游戏的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁好用的p2p种子搜索器,影视剧吸烟镜头
友情链接:目录项目小组成员...................................................................................................................................2 摘 要.............................
..................................................................................................................2 关键词...............................................................................................................................................2 一、游戏简介以及世界观............................................................................................................... 4 二、运行环境及开发环境............................................................................................................... 4 1、运行环境.............................................................................................................................4 2、开发环境.............................................................................................................................5 3、开发思路.............................................................................................................................5 三、部分开发工具介绍...................................................................................................................5 1、Eclipse................................................................................................................................. 5 2、Mapwin............................................................................................................................... 5 四、可行性分析...............................................................................................................................5 1、商业层面.............................................................................................................................5 2、技术层面.............................................................................................................................6 五、概要设计...................................................................................................................................6 1、游戏设定与相关规则......................................................................................................... 6 2、游戏代码设计.....................................................................................................................6 六、详细设计.................................................................................................................................12 1、开发准备...........................................................................................................................12 2、个类的功能.......................................................................................................................13 3、网络版...............................................................................................................................14 七、编码实现.................................................................................................................................15 1、Tales 类以及生命周期的实现..........................................................................................15 2、FCanvas 类、地图切换,坐标转化以及界面要素的实现............................................... 15 3、HeroSprite 类以及键盘事件,进度更新的实现.............................................................19 4、MonsterSprite 类以及人工智能的实现........................................................................... 22 5、网络版服务器端...............................................................................................................23 6、网络版客户端...................................................................................................................24 八、使用指南.................................................................................................................................25 九、后记.........................................................................................................................................271 基于 J2ME 的手机 RPG 游戏研究-----《征途》开发记项目小组成员专业年级: 参与项目者: 软 件 02 级莫紫东(主程序员) 周琳娟 (美工) 文鹏(网络程序员) 崔永志(游戏策划)摘要本游戏是基于 J2ME 平台(MIDP2.0,CLDC1.0)开发的手机游戏,目前在 DOPOD515 以及 MOTOROLA V500 机型上调试通过,其他对应版本因为没有调试环境,暂时没有开发。主要是 实现单机情况下的仿《暗黑破坏神》的 ARPG 类游戏,联网版实现类似《传奇》MMORPG 游戏 框架,游戏特效使用 AE,PHOTOSHOP,FLASH 制作,服务器使用 J2EE Servlets 实现。关键词J2ME,J2EE,MIDP2.0,CLDC1.0,Eclipse,Eclipse me,JDK,WTK,AE,PHOTOSHOP,智能 手机,JApps,FALSH,ARPG,MMORPG,手机游戏,在线版手机游戏,精灵,碰撞检测,AI, 区块地图,滚屏,层,等级,经验值,HP 槽,持久存储,PNG 压缩,层叠关系,物品掉落与 拾取,金钱掉落与拾取,装备,键盘事件,低级绘图,装载进度条,界面开发,地图切换, 地图拼凑,主角/英雄,面向对象,网络编程,游戏逻辑SUMMARYThis game is a mobile game based on J2me Platform,have tested successfully on spv515 and motorola v500,and others is not yet.Our purpose is to implement a ARPG just like”diablo”.And Online Edtion is wanted for a MMORPG just like”MIR”.Game effects were made by Adobe After Effect,Adobe Photoshop and Macromedia Flash.Game Server was made by J2ee Servlets.2 KEY WORDSJ2ME , J2EE , MIDP2.0 , CLDC1.0 , Eclipse,Eclipse me,JDK,WTK,AE , PHOTOSHOP , Japps,Flash,ARPG,MMORPG,Mobile Game,Online Mobile Game,Sprite, Collision Test,AI,Tiled Map,Scroll-Screen,Layer,Level, Experience,Hp,Record Store,PNG Condensation, Cascade Relation,Item Drop & Get,Gold Drop & Get,Gears,Key-board Event,Low-level Graphics,Load Bar,Interface Development,Map Change,Map Tiled,Hero,OOP, Net Programming,Game Logic要sこの携ゲ`ムは j2me(midp2.0、cldc1.0)で_kしました。今は SPV515& MOTOROLA V500 で成功にテストしました、他のはh境がありませんのに、でき ませんでした。Wたちの主な目的は<Diablo>のような ARPG を作ります。それに、< mir>のような MMORPG をつくります。ゲ`ムの抗 AE、PHOTOSHOP、FLASH で つくりました、サ`バ`は J2EE Sevelets で_kしました。キ`J2ME, J2EE, MIDP2.0, CLDC1.0, Eclipse,Eclipse me,JDK,WTK,AE, PHOTOSHOP, 知能携,JApps,FALSH,ARPG,MMORPG,携ゲ`ム,ONLINE 携 ゲ`ム,スプリト(Sprite) ,触れテスト,AI,タルト地恚攻愆`ル?スクリ`ン, 樱A段() ,UYHP,RMS,PNG Rs,重なりvS,アイテムの落ちと手入れ, お金の落ちと手入れ,装浈ぅ匹啵`ボ`ト事件,ロ`エンド?ドロ`,ロ`ド? バ `,インタ`フェ`ス_k,地恧吻肖晏妞à耄恧谓Mみ立てる,主役,面向对象, ネ ットワ`ク?プルグランミンゲ,ゲ`ム理3 一、 一、游戏简介以及世界观1.1 创意本游戏的创意来源于著名的游戏《暗黑破坏神》和现在流行的 MMORPG 游戏。 《暗黑破坏神》 是一款经典的 ARPG 游戏, 奠定了现在 ARPG 游戏的基础。 2001 年《暗黑破坏神 2》的资料片《毁灭之王》发售,让游戏界有进入了一个新的时代―― 网络游戏时代。因此我以他为基础想在手机上实现一个无线的联网 ARPG 游戏。1.1 1.1.游戏背景这是一个――桫坨罗国。人民过着富足祥合的生活。兽族和人组和直到有一天一 匹跛狼缓缓的从荒原&走来,拖着带血的残腿,恐惧的眼神让它看起来毫无以往的凶猛 威风&数天后,野蛮的兽人和身体变了形的各种野兽,举着带血淋的武器,携着疯狂 的…..嘶喉着杀了过来……. 所过之处,哀鸿遍野、了无人烟沙海的尽头究竟发生了什 么事,使的万物如此的疯狂,和平的额人们充满了恐惧和疑问。 终于消息传来,在末日火山居住的暗魔族的魔王魔罗终于在火山中复活,他挈带 着愤怒,怨恨来报复人族了,他的暗魔血气是首族暴筐,野兽变种。魔罗的力量控制 着他们杀来了…. 在这灭顶之灾来临之际,人族的杰出者---英雄终于拿起了手中的武器,用爱智慧 和信念来阻挡暗魔的肆虐,带者爱他的人和他爱的人的期望,踏上征途。1.2 游戏文化魔幻架空世界观,以西方中世纪的文化为背景。共有三种族:人族,兽族, 暗黑魔族。人族的刚猛的剑士,高贵的白袍的法师,阴暗神秘的术士。还有野蛮的半 兽人,兽人,强兽人;暗魔一族;当然还有各种洪荒猛兽。英雄有其信仰,剑士以他 的荣誉为第一。法师身份高贵,术士崇尚利用一切为作战力量。 1.3产品定位目前,手机游戏产业在中国已正处于高速发展阶段,其消费者对游戏需求与游 戏选择上已有更多更全面的认识。该游戏上手难度适中。带有普通网游的特点, 同 时具有无线连网能力,方便你随时随地的娱乐。主要以有一定网游经验的消费者和 有手机游戏消费这为对象。在年龄上主要以 17~28 岁玩家为主要目标群体。二、运行环境及开发环境1、运行环境目前测试成功的环境为多普达 515+JAPPS(Smartphone 上的 JVM)以及摩托罗拉 V500,如果机器支持 MIDP2.0 理论上能方便地移植4 2、开发环境客 户 端 : Windows Xp Sp2 + J2SDK1.4.2.07 + WTK2.2 + Eclipse3.0.2WIN32 + Eclipseme0.90+Adobe After Effect6.0+Adobe Photoshop CS+Macromedia Flash MX2004+Macromedia Fireworks + Mapwin1.4.11 + zlib.dll1.1.3.0 + libpng12.dll 1.2.5.14743、开发思路主要利用配置好的 Eclipse 进行 J2ME 平台的代码开发,关于美工方面,在模拟 GBA 游戏《王国之心》以及游戏《秦殇 2 复活》里切取角色图样,导入 PS 中处理,去掉 背景,利用 FLASH 调整图片位置,导出 PNG 格式供 J2ME 使用,期间使用 AE 处理部 分特效,地图编辑器 Mapwin 编辑地图,代码编写完成经调试后,利用 WTK 发布工 具发布为可供手机使用的 JAR 以及 JAD 文件。三、部分开发工具介绍1、Eclipse(JAVA 集成开发工具,具体略) Eclipse( 2、Mapwin(地图编辑器,具体略) Mapwin(地图编辑器,具体略)四、可行性分析1、商业层面当今的国内游戏市场一股开发手机游戏的热流正在兴起, 不少市场分析家都称 手机游戏是继网络游戏之后游戏市场的又一热点,目前国内的手机游戏市场也日趋 成熟,收费模式日趋合理,对于在游戏业有报复的同学们,正是一个进入的好时机, 我们也正是看到了这样的机会,才着手做这样一部游戏。 目前的手机游戏有两个大的发展趋势,一是 3D 化,毫无疑问,玩家们都希望 看到更好的游戏画面,但一方面碍于手机机能有限,另一方面由于我们工作室成员 在 3D 图形方向的沉淀的原因,暂时也没有能力去做;而另一个方向则是网络化, 喜 欢玩网络游戏的玩家们都希望有朝一日能随处都能升级,都能玩着自己钟爱的网络 游戏,如果能将现在的网络游戏手机化,让 PC 平台以及手机平台的玩家们都能在一 个世界中冒险,给玩家们带来的诱惑无疑是巨大的,虽然碍于现在手机无线上网的 带宽及费用,目前还不太现实,但一旦手机进入 3G 时代,这绝对是创造中国另外一 批首富们的市场,所以这次我们的游戏就定在了这个方向,虽然暂时不太有可能,5 但我们先行解决这方面开发的上层技术问题(目前利用红外进行调试) ,一旦突破 3G 的技术瓶颈,就能抢到先机。2、技术层面从暑假开始,我们工作室的成员开始了 J2ME 的学习,经过了一个暑假的沉淀, 加 上大二时候 NIIT 课程开设过 JAVA 基础课程,所以对 JAVA 本来有一定程度的 了解,而这次的项目虽然具有不少挑战,但我们一定能克服,而且经过这次的项目, 相信我们的 JAVA 编程能力一定能上一个台阶, 对面向对象思想的认识也会再上一个 台阶。五、概要设计1、游戏设定与相关规则游戏操作操作界面模仿暗黑,并参靠考 GBA 游戏《王国之心》来设定。采用二唯画面第三 人称视角。另外 ACT 的操作采用一键决定,这样利于手机的操作。游戏特点每个人都有自己的生活方式,可以活得潇洒,但要活的辉煌,英勇的剑士,敏捷 的猎人,神秘的法师。大家走在了一起,共同背负起了命运的责任。为了爱自己的和 自己爱的人,为了美丽的土地和温暖的家园而踏上了征程。用自己的信念和智慧以及 爱去阻挡怪物前进的脚步。 该游戏具备了丰富的系统功能,包括 PK、聊天、交易、战盟、组队等等系列, 而且每个功能都有丰富选项,全面满足玩家需要。尽可能的实现 PC 平台上的网络有 游戏所具有的功能。 技术特点,在手机上无线联网运行,方便玩家随时随地的去实现自己的英雄梦。游戏类型原定 MMORPG 现阶段开发 单机 ARPG。玩家在游戏中要操作什么玩家要操作一名角色在这个世界里不断的成长,从一个平民一步一步走上英雄 之路。在不断的战斗中提高自己的各项属性和能力。交互功能1)与 NPC 的交流 2)与玩家交互 聊天2、游戏代码设计既然是用 JAVA 进行开发,面向对象是必然,主角和敌人和地图都写成类,还有6 控制这些内容的类,如果要生成新的敌人,传相应参数进行实例化,就能自动生成, 首先应该定义出游戏的流程,流程图如下:开 始显示标题画面是否选择联网版以及是否退出选择退出 选择单机 单机初始化游戏, 实例化 选择网络 连网初始化,实例化 结束选择进度根据选择 读取记录根据记录加载英雄数据是 是否回到主画面 否开始作图,处理逻辑是 主角是否生存 否死亡处理,同时回到诞生地类的结构: i. Tales: 继承了 MIDlet 类,进行 MIDlet 的生命周期的控制 ii. SFCanvas: 继承了 GameCanvas 类,进行游戏画面的描绘和操作 iii. ASprite: 继承了 Sprite 类,为了实现英雄类和怪物类的公有属性 iv. HeroSprite: 代表英雄的类,继承自 ASprite 类7 MapTiled: 代表地图的类,继承自 TiledLayer 类 vi. MonsterSprite: 代表怪物的类,同样继承自 ASprite 类 下面是单机版的类图:v.MIDletGameCanvas&&Interface&& Runnable&&Interface&& CommandListenerDefault Package Tales SFCanvas1…*1…*1…*HeroSpriteMonsterSpriteNPCSpriteMapTiled1…*ASpriteSpriteTiledLayer由于类比较多,因此继承聚合关系也显得有点复杂。 聚合于 SFCanvas 类中的各对象,除了 HeroSprite 之外都可以有一个或者多个。 继承自 MIDlet 类的 Tales 类只负责了 MIDlet 的生命周期控制,而画面上的描绘 以及部分界面操作则是交给 SFCanvas 类来进行,研究过 J2ME 的在这里可能会感 到奇怪, 为什么 MIDP2.0 中专门提供了 Sprite 类, 我却还要设立一个 ASprite 类, 这实际上是为了实现一个效果,因为在画面绘制过程中需要对比包括主角怪物在 类所有精灵类的 Y 坐标值,然后决定重叠关系,所以需要一个能统一这个值的类,8 而且这个属性本来就是精灵类都公有的属性,虽然会增加一些额外的资源消耗, 但权衡利弊,还是决定新建一个类,关于这点在详细设计中有讲解。 这里我想顺便为初次接触 MIDP2.0 的朋友们解释一下 MIDP2.0 中新增加的几个类, 不然可能会很困惑。 GameCanvas:继承自 MIDP1.0 上就有了的 Canvas 类,在新增几个键盘值基础上, 增加了几个很方便开发的方法,包括 flushGraphics()(直接对目前的 Graphics 类 进行双缓冲, 以前用 MIDP1.0 开发的时候, 想必很多初学者都对双缓冲困苦不已) , getKeyStates()( 可 以 直 接 捕 获 几 个 编 写 游 戏 时 常 用 的 按 键 返 回 值 ) , paint(Graphics g)(主要用来描绘另外几个 MIDP2.0 中新增加的类) Sprite:包含在 MIDP2.0 中新增的 game 包中,有了这个包真的是方便了很多游戏 开发上的工作,比如这个精灵类,如果是在之前的 MIDP1.0 中,开发者们还需要 自行切割图象,自行形成图象序列帧,现在就不需要了,在该类的其中一个构造 方法中,可以直接指定单帧图片大小,然后生成的类就自动切好了图片,并且序 列也排好了,只需要在程序中合适地使用方法 setFrameSequence(int[])就行了。 另外该类中一个非常重要的方法 collidesWith(Sprite s, boolean pixelLevel) 也非常管用,这样检测两个精灵的碰撞就变得非常简单了,同时该方法还支持与 地图的碰撞检测,这样如果地图中如果有不能跨过的地方(比如湖海,山崖等) 就可以将这些放到另外一个图层上,但这次我们在项目中没有这么判定,一方面 有素材采集上的原因,另一方面也考虑到碰撞回增加资源开销。 TiledLayer:同样包含在 MIDP2.0 新增加的 GAME 包中,该类的主要是方便区块游 戏的开发 (一个很典型的例子就是 ARPG 游戏的背景, 当然实际上目前大多数的 2D 游戏都是基于区块的游戏开发,区块游戏开发有很多好处,这里就不详述了) 在 , 其构造方法的时候,也直接就讲传入的图片按参数切割成区块了,其提供的几个 主要方法比如 setCell(int col,int row,int tiledIndex[])就可以方便地将区块 填充到地图上,另外还有专门制作动态区块的方法,在这里就不详细叙述了。 (详 情请参阅《J2ME API 速查手册》 ) (1) 、下面是网络版的类图: 服务器端9 &&Interface&& Socket&&Interface&& ServerSocketThreadServerPacka ServerClient(2) 、网络客户端10 MIDlet&&Interface&& Socket&&Interface&& Runnable&&Interface&& CommandListenerGameCanvasDefault Package GameClient SFCanvas1…*1…*1…*1…*HeroSpriteMonsterSpriteNPCSpriteMapTiledOtherHe roSprite1…*ASpriteSpriteTiledLayer(3) 、数据库 本网络版的数据库采用的是 Oracle9i,目的是为了跨平台的使用。 服务器端类说明: Server:创建了一个服务器器套接字,实现了端口号 13(不必为其分配 IP, 因为它已经在它代表的那台计算机上) ,它在一直循环等待客户的连 接,建好一个连接以后,accept()就会返回一个 Socket 对象,它是那 个连接的代表,将此 Socket 存储在数组中,方便以后信息的发送。 Client:为了能够服务于多个玩家,因此 Server 必须是多线程的,当每一个 玩家登陆上来以后,建立好连接后,就实例话一个 Client,它将保存 该客户的 Socket 信息,并且将处理该客户的各种请求。 网络版客户端说明: 网络版的客户端和单机版的客户端最大的不同是, 要先登陆成功才能实例化 SFCanvas, 并且多了一个 OtherHerpSprite 类, 由它来处理其它玩家的信息。11 GameClient:它实现了一个 SocketConnetion 的接口,由它来连接上服务器。 登陆成功以后,它一直监听来自服务器端的信息 OtherHeroSprite:和 monster 类有点类似,它专门用来处理其它完家的状态 包括实例化其它完家,更新该完家的坐标 数据库设计说明: 由于现在网络版的开发处于研发状态,所以开发的进度很慢,所以现在数 据库里也只有玩家的基本信息一张表,里面包括玩家的 ID,用户名,密码, 和现在的状态(在线,离线)六、详细设计1、开发准备开发的准备上,首先应该确定游戏中所用到的源图片,由于 J2ME 仅支持 PNG 格 式图片,所以应将切取下来的图片保存为 PNG 格式,考虑到手机游戏的容量限 制,应该尽可能的减小文件体积,这里我们使用 PHOTOSHOP 进行切图,保存为 一般 PNG,再放入 FIREWORKS 中保存为压缩格式,当然 PHOTOSHOP 也能保存为 WEB 所用格式,不过保存后的效果不如 FIREWORKS 来得满意,一般来说都能将 体积压缩到 PS 保存的 1/5~1/10,而且基本感觉不出太大的差别。图象的名称 来说,主要有代表主角的 mainch.png,代表沙漠地图的 title.png,代表敌人的 monster.png 以及一些其他用于绘制界面的图片,这些图片都存放入项目中的 /res 目录下,部分图片如下:mainch.png12 title.png2、各个类的功能Tales:实现 MIDlet 的生命周期,其中有些比较重要的功能,比如在手机电话来 的时候的处理情况,单机版应该能暂停游戏执行,网络版应该能立即退出游戏 SFCanvas:这个类是实现整个游戏的容器,Sprite,Map 都应该在这个类中实例 化,以及控制线程的执行情况,”Canvas”即是“画布” ,关于图象处理的事情 都应该包括在这个类中,比如界面等,都划进这个类。方便的是 J2ME 提供了这 样一个类,大家写程序的时候都有了个规范。另外本类中将执行部分的存储功 能,包括初始化时候读出记录数据等。 ASprite:该类设置出来的主要目的是为了完成对比所有精灵类 Y 值大小的,对 比的目的是为了实现正常的精灵类的重叠关系,如果不进行对比,会出现如下 图一的情况:图一 图二 即是说,按照正常的顺序,靠近我们(也就是在屏幕中 Y 值更大的,原点在屏 幕的左上角,往右为 X 正方向,往下为 Y 正方向,和在数学中的坐标的 Y 不一 样)的应该把远离我们的盖住,即图二所示情况,为了实现这样的效果,需要 根据每个精灵的 Y 值对精灵类进行排序,然后在线程每次执行的时候按照排好 的顺序进行绘图,如果不定义本类,则无法进行比较,定义本类之后,所有的 精灵都从本类派生出去,就能以本类进行比较了。 HeroSprite:英雄类, 实现英雄的描绘, 在单机版中, 本类只会实例化一个对象, 即玩家操纵的角色, 本类的功能在于定义英雄的属性以及英雄的部分描绘方法, 这里有一个问题,关于碰撞判定以及之后的精灵类的扣除 HP 以及其他处理, 到13 底应该放在哪个类中?按照一般的考虑方法,可能会考虑,如果英雄类捕获到 了怪物类的攻击判定,那么就把相关的处理方法放到英雄类中,而相应的,怪 物类的被攻击的情况就放到怪物类中,然而却有这样一个问题,怪物受到英雄 类的攻击当然比较好检测,因为在单机版中英雄只有一个,每次只需要判定这 么一个英雄是否攻击了该怪物类就行了,然而英雄类那边却不行,不可能让英 雄类来遍历一次目前所有的怪物中哪个怪物攻击了英雄,这在手机上是巨大的 资源消耗,是行不通的。所以,只能把所有的碰撞以及相应处理都放在怪物类 中,包括对英雄的攻击后的处理。所以剩下的英雄类所做的事情其实相比怪物 类来说已经简单了很多,主要是接受键盘输入的控制,以及相应的描绘,另外 还有判定下一步的地图是否可以跨越,以及每次关于要存储进 RMS 中的数据的 更新等。 MonsterSprite:怪物类,实现怪物的描绘,应该能接受一些重要参数(比如等 级)以实现怪物的不同能力,以及具有一定的人工智能,另外有如前所述的具 有双方攻击判定以及相应的处理方法。本次游戏中的怪物对比上一次我们参加 康菲杯制作的游戏中的怪物要“聪明”上许多,在不遭受攻击的情况下,会根 据前方地图是否可以跨越然后慢无目的地四处溜达,在遭受攻击情况下,会一 直追着主角打,除非距离已经拉开了很长一段。可以说怪物类是本游戏单机版 本中游戏逻辑的核心。3、网络版Server:主要还是不停的接受玩家的连接信息,连接上来后实例化 Client,由 它来处理玩家的各种请求。 Client:当一个客户登陆上来以后,先验证该用户信息的有效性,合格以后发 送登陆成功的消息到客户端, 然后将已经在游戏中的玩家 ID 发送给该 客户, 该客户接受到这些 ID 后在 OtherHeroSprite 中实例话这些用户。 服务器还自动的将刚刚登陆上来的这位玩家的 ID 发送给其他完家。 当 完家在移动的时候,将完家的坐标发送给其它玩家。 GameClient:连接上服务器后,若登陆成功则实例化 SFCanvas,玩家进入游戏 界面,然后 GameClient 不停的监听来自服务器的消息。同时处理 客户端发给服务器的信息 OtherHeroSprite: 处 理 其 它 完 家 的 信 息 , 当 有 一 个 玩 家 登 陆 上 来 以 后 , GameClient 接 受 到 该 客 户 的 Id, 然 后 传 到 OtherHeroSprite,由 OhterHeroSprite 实例化该类。当该 玩家移动时候,OtherHeroSprite 接受到该玩家的新坐标, 刷新坐标,将该玩家画到新的坐标14 七、编码实现1、Tales 类以及生命周期的实现Tales 类直接继承自 MIDlet,沿用规范直接实现生命周期,另外该类实例化 SFCanvas 实现低级绘图容器,在重载方法 protected void pauseApp()中实现 游戏暂停的相应处理。具体来说,单机版暂停线程运行,网络版直接退出游戏。2、FCanvas 类、地图切换,坐标转化以及界面要素的实现 类、地图切换,SFCanvas 类中主要是执行初始化,线程控制以及其他类的实例化,精灵类层叠 次序的排序,类之间的通信,另外还包括相当部分界面的描绘,以及 RMS 数据 的读取。由于精灵类中将描绘和构造函数分离,所以在 SFCanvas 的构造函数中 先对各个精灵类进行初始化,然后在线程中进行相应的描绘,值得注意的是为 了尽量节约内存资源, 线程中应尽量只描绘当前画面的精灵和地图, MIDP2.0 在 中提供了一个 LayerManager 类对层进行管理,如果将精灵类和地图都加入 到 LayerManager 所管理的图层中,则该类会自动进行相关处理,描绘将只在屏幕 范围内进行,但该类有个缺陷,就是一旦规定了图层层叠顺序就无法在线程运 行过程中改变,天空层(可以将精灵类遮盖的层,比如树木,云层等等) ,地面 层 (地图) 倒是固定好了的顺序可以用 LayerManager 来管理, 但精灵就不行了, 如前文所述,精灵类的层叠顺序是按照精灵的 Y 值大小来进行排序的,所以, 最后程序采用了天空层, 地面层用 LayerManager 管理, 而精灵则采取 Graphics 类直接描绘。关于精灵的排序也是在本类的线程中实现的,其代码如下: //首先将要排序的精灵类都放入一个精灵类的数组 ms[] public ASprite[] chgMonsterOrder(ASprite ms[]){ for(int l=0;l&3;l++){ for(int m=0;m&3;m++){ if(ms[m].dy&ms[m+1].dy){//根据 Y 值排序, 本段采用了最简单 的冒泡排序法 tempMonster=ms[m]; ms[m]=ms[m+1]; ms[m+1]=tempM } } }//返回排序后的数组 } … ASprite ms1[] = {monsterSprite, monsterSprite1, monsterSprite2, heroSprite}; //将需要排序的精灵纳入数组 …15 ASprite ms2[]=chgMonsterOrder(ms1);//将排序完成后的数组赋值 … layManager.paint(g,0,0);//对层管理类进行描绘 for(int h=0;h&4;h++){ ms2[h].setPosition(ms2[h].dx-setX,ms2[h].dy-setY); if(ms2[h].dx&(getWidth()+setX) && ms2[h].dx&setX &&ms2[h].dy&(getHeight()+setY)&& ms2[h].dy&setY){//只对进入屏幕范围 类的精灵才进行描绘 ms2[h].paint(g); } }//对精灵类进行描绘 下面介绍下关于在本类中实现的关于怪物类和英雄类的通信,如设计中所述, 关于攻击判断都是放在怪物类中写的,所以,英雄受到攻击后削减 HP 以及打败 怪物后所获得的奖励等等都只能依靠类之间的通信来实现,这里我们采用了参 数返回和传递的方式,即怪物类返回一些参数,而将这些返回的参数直接传递 给英雄类,让英雄类实现各类数据的更新并且在更新后立即将新的数据存入进 度。具体的实现代码如下: //将怪物类的死亡后的等级以及各方面信息传递到英雄类 private void doMonster(MonsterSprite mSprite,HeroSprite heroSprite,RecordStore rs,int rid){ heroSprite.doMonster(mSprite.doMovedraw(heroSprite.x+heroWidth,hero Sprite.y+heroHeight,getHeight(),getWidth(),heroSprite.dir,heroSprite. iisBattle,heroSprite,heroSprite.hp,heroSprite.lv,heroSprite.itemlv), mSprite.deadlv,rs,rid); } 看起来比较复杂,让我们将他们分解一下,在 MonsterSprite 类中有一个方法. 主要用于描绘和相应的游戏逻辑处理,public int doMovedraw(int heroX,int heroY,int screenHeight,int screenWidth,int heroDir,boolean iisBattle,HeroSprite heroSprite,int heroHp,int herolv,int itemlv), 关 于该方法的详细解释会在怪物类的代码实现中有解释,它拥有一个 int 的返回 类型,在该方法中,返回的是英雄的 HP 值,而我们也可以看到传入的参数中也 有英雄的 HP 值,即这个方法中实现了怪物的描绘和英雄类 HP 的变化,同时在 怪物类中具有一个属性 deadlv,如果怪物处于生存状态,该值一直为 0,在怪物 类的 doMovedraw(…)方法中如果怪物死亡就立即将该值赋为怪物等级,而相 应的英雄类中处理怪物传来的信息的方法就捕获到该值,然后就对英雄类的属 性进行更新,将更新值存入进度. 接下来再介绍一下如何将进度存入 RMS 中,RMS 即 Record Management System, 是由 MIDP 提供的数据存储功能,使用这个功能,就可以存储游戏状态,关 于 RMS 的详细内容请有兴趣的朋友查阅相关资料,这里我们这种讲述如何实现进 度的存储,实际上由于 RMS 的存储功能远远不如大型的数据库功能完善,所以 很多地方需要自行设计许多东西来达到方便的记录管理, RMS 的存储是逐条地 操作,而一条记录并不存在如大型数据库中的字段类的概念,所以,为了实现 类似的功能,只能在程序中将的所有数据一次操作。 J2ME 中 提 供 了 对 二 进 制 数 据 进 行 操 作 的 DataOutputStream 类 和16 ByteArrayOutputSteam 类,通过这两个类可以很方便地把各种类型的数据转换 为二进制数据并存储在一行记录中,例如游戏中英雄类的一次记录操作包括记 录他的等级,当前的装备,拥有的金钱,物品盒中的物品,经验值等,它们的 类型有的是 String,有的是 int, 就可以按如下的程序实现二进制数据到真实数 据的转化: //对记录中的数据进行转化 public static void chgTogame(byte[] data,HeroSprite heroSprite) throws IOException{ ByteArrayInputStream bais=new ByteArrayInputStream(data); DataInputStream dis=new DataInputStream(bais); heroSprite.lv=Integer.parseInt(dis.readUTF()); heroSprite.itemlv=Integer.parseInt(dis.readUTF()); heroSprite.gold=Integer.parseInt(dis.readUTF()); heroSprite.MyItem=dis.readUTF(); heroSprite.exp=Integer.parseInt(dis.readUTF()); heroSprite.at=(heroSprite.lv-1)*8+30; heroSprite.df=(heroSprite.lv-1)*10+20; System.out.println(heroSprite.MyItem); heroSprite.itemcode=heroSprite.MyItem.toCharArray(); } 为了实现记录读取的效果,在此之前需要从进度中将记录读取出来 而在记录实际使用时: try{//尝试获得记录 rs=RecordStore.openRecordStore(dataname,false); //如果不成功则不创建 try{//成功后则尝试获取记录 heroData=rs.getRecord(1); chgTogame(heroData,heroSprite);//将记录转化为实际数据 isData1= }catch(Exception e){System.out.println(&没有获得记录&+e);}}catch(RecordStoreNotFoundException e){//如果没有成功获得 try{//关闭记录 System.out.println(&没找到记录&); rs.closeRecordStore(); rs= isData1= }catch(Exception ex){ } }catch(Exception e){}接下来向大家介绍一下地图切换的具体实现, 地图切换在这里我专门使用了一 个方法来实现,该方法以地图编号为参数,进行实例化以及相关垃圾处理,具体代 码如下: public void gotoMap(int mapDir){ if(mapDir==0){17 …//图1的对象撤消,具体是将其赋为NULL try{//描绘新地图 …//图0要用到的图片加载 }catch(Exception e){} …//实例化地图0要使用的对象 }else{ …//图0的对象撤消,具体是将其赋为NULL try{//描绘新地图 …//图1要用到的图片加载 }catch(Exception e){} …//实例化地图1要使用的对象 } } 而具体的地图描绘操作则是如下代码: mapTiled= heroSprite.isWalkable=//清空地图1资料 …… mapTiled=new MapTiled(30,30,mapImage,16,16,getWidth(),getHeight()); // 加载新地图资料 mapTiled.drawMap(mapDir,setX,setY); heroSprite.chgMapbool(mapTiled.isWalkable0); layManager.append(mapTiled); 这里的setX,setY是将相对于地图左上脚的屏幕左上脚的坐标: (地图一的情况下) setX=heroSprite.x-getWidth()/2+20;//地图画的位置的左上脚坐标 setY=heroSprite.y-getHeight()/2+20; if(heroSprite.x-getWidth()/2+20&=0){ setX=0; } if(heroSprite.x-getWidth()/2+20&=625-getWidth()){ setX=625-getWidth(); } if(heroSprite.y-getHeight()/2+20&=0){ setY=0; } if(heroSprite.y-getHeight()/2+20&=625-getHeight()){ setY=625-getHeight(); } 而实际上这里的setX,setY在坐标转化的过程中作用巨大,一方面实现了主角走到 边角人物移动而地图不移动的效果,另一方面也实现了绝对坐标和相对坐标的转化, 具体的如精灵类,怪物类的坐标如下:ms2[h].setPosition(ms2[h].dx-setX,ms2[h].dy-setY);转化方式如下图:18 地图 setY dy setX 屏幕 dx 精灵由此可见,相对坐标是(dx-setX,dy-setY)决定的,而dx,dy则是ASprite类定义的精 灵类的公有坐标属性.由此即可实现相对屏幕左上的坐标和相对地图左上坐标的转 化。3、HeroSprite 类以及键盘事件,进度更新的实现HeroSprite 类主要实现英雄的相应处理,包括对英雄的相应记录的更新,以及对 事件的处理,另外包括对不能行走地图的检测。 首相,对记录的更新,具体实现如下: public byte[] chgTorms(boolean isFirst) throws IOException{ ByteArrayOutputStream baos=new ByteArrayOutputStream(); DataOutputStream dos=new DataOutputStream(baos); if(itemcode!=null){ MyItem=String.valueOf(itemcode); } dos.writeUTF(String.valueOf(lv));//将具体数据写入流 dos.writeUTF(String.valueOf(itemlv)); dos.writeUTF(String.valueOf(gold)); dos.writeUTF(String.valueOf(MyItem)); dos.writeUTF(String.valueOf(exp)); if(isFirst==false){//如果不是第一次读入数据则计算攻防 at=itemat[itemlv]+(lv-1)*8+30; df=itemdf[itemlv]+(lv-1)*10+20; } baos.close(); dos.close(); numEmpty=0;19 if(isFirst==false){//如果不是第一次读入数据则计算空格数 for(int i=0;i&itemcode.i++){ if(itemcode[i]=='0'){ numEmpty++; } } } return baos.toByteArray(); } 对怪物的相应处理函数从 SFCanvas 中获得数据, 这一点在之前的 SFCanvas 中已有 叙述,具体实现代码如下: public void doMonster(int myhp,int deadlv,RecordStore rs,int recordid){ this.hp= if(lv&=6){ prevexp=lv*lv*60-(lv-1)*(lv-1)*60+150;//经验值公式 nextexp=prevexp+(lv-1)*(lv-1)*60-(lv-2)*(lv-2)*60+150; }else{ prevexp=lv*(lv-5)*(lv-5)-40*(lv-4)*(lv-4)+150; nextexp=prevexp+50*(lv+1)*(lv-4)*(lv-4)-40*(lv-3)*(lv-3)+150; } if(deadlv!=0){ exp=exp+deadlv*15+random.nextInt()%5;//怪物死亡时候等级和经 验值的换算公式,nextexp 下一等级需要的经验,deadlv 被杀死怪物的等级 if(exp&=nextexp){ if(lv&12){//目前设定的最高等级为 11 级 lv++; } at=itemat[itemlv]+(lv-1)*8+30; df=itemdf[itemlv]+(lv-1)*10+20; maxhp=160+(lv-1)*40; hp= } try{ rs.setRecord(recordid,chgTorms(false),0,chgTorms(false).length); }catch(Exception e){System.out.println(e);} isBattle= } } 关于地图可行与否的判断中会遇到如下问题:20 如上图,英雄贴着墙站着,而且下一步他就会进到墙里面。我们不会让它发生的。 当然在这里可以设置他即将进入的方块的可行性为 false,在向左行走时进行判断 主角下一步即将进入的方块可行性,如为 FALSE,则不进行坐标和帧变化,实际体 现出来的效果就是不能行走, 但在实际情况中往往没有这么理想, 他可能会产生如 下情况:由图可见,如果仅仅判断精灵类的左上脚,在这样的情况下,显然他的下一步是可 行的,但实际上该精灵因为左下脚被挡住,已然无法前进,因此在这样精灵向左走 的情况下, 实际是要检查左上和左下两个地方是否都可以行走的, 如果其中有一个 不满足则不能前进,与此相似,如果在向右走的过程中,则需要同时检查精灵的右 上和右下脚,其他的则以此类推,具体实现代码及解释如下(仅解释 UP 键) : case LISTENER_UP: if(dir!=DIR_UP){//如果按下 UP 键时之前的状态不是朝 UP 的话, 则改变状态 dir=DIR_UP; this.setFrameSequence(up_seq); } if(isWalkable[ldX][ldY-1] && isWalkable[rdX][rdY-1]){ //对下一步的判 断,如前所述 if(isBattle==true){//按下 UP 键时候如果是打斗状态则转化为 UP 奔跑帧 this.setFrameSequence(up_seq); isBattle= } if(isStop==true){//如果是停止状态也转化为 UP 奔跑帧 this.setFrameSequence(up_seq); isStop= } y=y-5;//坐标变化 this.nextFrame();//帧变化 } 关于 ldX,ldY 等则是左下坐标,rdX,rdY 则是右下坐标,如前所述如果要朝上走, 因为碰撞点设定在脚部,则应该判断的是下面的两个点。相关定义如下: private void getNowHanglie(){//获得主角的行列数值21 luX=(int)(x/16)+1; luY=(int)(y/16); ruX=(int)((x+40)/16)+1; ruY=luY; ldX=luX; ldY=(int)((y+40)/16); rdX=ldX; rdY=ldY; }4、MonsterSprite 类以及人工智能的实现MonsterSprite 类则对怪物类以及怪物类和人物类关系的相应处理,如前文所述, 由于关于英雄和怪物之间的关系也全写入了该类,从代码量来看, MonsterSprite 类是所有精灵类中代码量最大的,其中主要实现精灵攻击判断,以及怪物部分人工 智能,具体的实现思想是在可以行走的情况下隔一段时间赋与一个 8 以内的随机整 数值,该值关联到具体下一步怪物的朝向,怪物获得该值以后则朝对应的朝向走上 一段固定时间,时间到了以后等待下一个随机值的获取,这样就实现了在没有被打 击的情况下怪物的人工智能,属于有限状态机,而如果在被打击的情况下,将智能 值设为 TRUE,该情况下,会判断主角位置,并根据该位置一方面调整自己的朝向, 一方面进行坐标变化,朝向判断按照三角函数进行判断,具体思想如下:O1A C N X 怪物类H M Y英雄类 BE DO2如图所示, 如果存在一个怪物和一个英雄目前在屏幕上, 英雄类的中心点坐标在 O1, 怪物类的在 O2,需要计算的是怪物类在目前的状态下应该的朝向,在本游戏中,精 灵类都有 8 个朝向,如果要判断出具体用什么朝向,应该判断出目前两者中心坐标 的夹角,在什么角的范围内,然后根据该值判断应该采用什么朝向,如图,目前怪 物类在英雄类右下角,并且在角 M02N 的范围内,因此应该采用左上的朝向,而为什 么知道在角 MO2N 的范围,则是根据两者的中心坐标与水平线的夹角的正切值决定22 的,而由于 CLDC1.0 不支持三角函数和浮点数,所以进行了小小的变化,将几个重 要的正切三角函数值存入一个定量中,然后进行对比时将各个值都平方,最后即可 对比出值的大小,具体代码实现如下: if((tan041 & (int)(y-heroY)*10000/(x-heroX)) && (tan241 & (int)(y-heroY)*10000/(x-heroX))){//根据正切判断朝向 if(isSmart&&dir!=DIR_LU-1){ dir=DIR_LU-1; this.setFrameSequence(lu_seq); } if(heroDir==DIR_RD){ } } 这里的 tan041 是预先输入好的定值,由此则可以判断出怪物类应该的朝向,实现一 定的人工智能。5、网络版服务器端Server:在服务器端首先应该声明一个服务器套接字,如下代码所视: server=new ServerSocket(PORT); Server server = new Server(); 然后服务器端会一直在等待用户的接入, 当有用户连接上来以后, 就存 储连接上来的 Socket,然后实例化 GameClient: socket=server.accept(); Client c=new Client(socket); 然后存储该用户的 Socket: clientSocket.addElement(socket); Client:该类继承自 Thread 在该类的构造函数中注册了数据库的 JDBC 驱动程序, 并连接上了 数据库: Class.forName(&sun.jdbc.odbc.JdbcOdbcDriver&); myConnection=DriverManager.getConnection(&jdbc:odbc:MyD ataSource&,&sa&,&&); 存储客户端的输入输出流: dis=new DataInputStream(s.getInputStream()); ps=new DataOutputStream(s.getOutputStream()); 发送信息到客户端使用的是: ps.writeUTF()方法 服务器端接受客户端发送过来的消息是:dis.readLine()方法6、网络版客户端GameClient:调用 StreamConnection 连接上服务器:23 socket= (SocketConnection)Connector.open(GameServerURL, Connector.READ_WRITE, true); 存储输入输出流: dis=new DataInputStream(socket.openInputStream()); ps=new PrintStream(socket.openOutputStream()); 当登陆成功以后实例化 SFCanvas,将接受到的其它英雄的 ID 传到 SFCanvas 由 doOtherHero 来实例化其它英雄 public void doOtherHero(String userid){ //int meid = Integer.parseInt(mid); int otherid = Integer.parseInt(userid); //String meid = //String otherid = System.out.println(&开始画其它的英雄&); otherHero[otherid]= new OtherHeroSprite(hImage,40,40); heroWidth=heroSprite.getWidth()/2; heroHeight=heroSprite.getHeight()/2; layManager.append(otherHero[otherid]); layManager.paint(g,0,0); } 当玩家移动的时候调用的方法是: public void transXy(int x,int y){ String xyI StringBuffer moveInfo=new StringBuffer(&Move:&); System.out.println(&TransXy&); xyInfo=meid+&:&+x+&:&+y; ps.println(moveInfo.append(xyInfo)); ps.flush(); } 当玩家接受到其它英雄移动的消息后: sfcan.otherHero[Integer.parseInt(moveid)].doMove(Intege r.parseInt(moveX),Integer.parseInt(moveY)); 这样这个英雄就移动了 OtherHerosprite:调用 move 来画其他的英雄: public void doMove(int x,int y){ if(isAlive){ this.setPosition(x,y); } }24 八、使用指南1, 进入游戏上下可选择,点左软键可在游戏中随时退出2,剧情画面此过程中如果想跳过不看可以直接点按 SELECT 确定键3,选择进度一共有两个进度可选,游戏中自动存储进度4,游戏界面25 5,商店界面左右选择物品,上下决定购买数量,右软键退出该窗口6,任务界面空格键退出7,战斗画面26 (WTK)确定键攻击(dopod+java apps)8,装备画面(WTK) 9, 装备拾取(dopod+java apps)*号键打开改画面,左右键翻页,上下键选择,确定键使用,右软键或*#键拾取27 九、后记我们 ACEZONE 工作小组是由几个爱好游戏的软件学院的学生组成。在本游戏中,我们 分工明确,合作沟通良好,充分的体现了团队合作的精神。这个游戏的完成,是因为我们在 以往的学习中打好基础,而且有着对游戏的特殊的喜爱,做出了这款游戏。希望通过这次的 比赛能够锻炼一下我们的能力,增强我们的自信,也让我们的工作室为更多的人知道。为以 后我们进入竞争的社会打下基础。请访问以下网站了解工作室详细情况( .cn/acezone(由于空间到期目前已关闭) )28
基于J2ME的手机RPG游戏研究―汇集和整理大量word文档,专业文献,应用文书,考试资料,教学教材,办公文档,教程攻略,文档搜索下载下载,拥有海量中文文档库,关注高价值的实用信息,我们一直在努力,争取提供更多下载资源。}

我要回帖

更多关于 最大的单机游戏是什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信