




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JavaME移动开发编程开发实例,实例俄罗斯方块,一、游戏设计,操作流程本游戏的操作流程非常简单,玩家启动MIDlet启动后,即进入游戏主画面,屏幕开始显示为欢迎画面。玩家按下任意键,进入游戏。当玩家按下开始按钮后,就可以开始玩游戏了。在游戏过程中,玩家可以按下暂停按钮暂停游戏运行,按下继续按钮,恢复游戏运行。任何时候按退出按钮,MIDlet都会终止。,流程图,游戏分析,要实现上述游戏功能,我们需要实现哪些类?,首先,我们需要一个控制类,用来管理整个程序运行的流程,其次,我们需要一个游戏类,用来实现游戏的核心功能,再次,我们需要一个类来实现产生下一个方块、方块移动和旋转等操作。,其他的一些辅助类,诸如定时器任务类等,控制类的实现,控制类的功能比较简单,根据流程,它主要控制在显示了欢迎界面后,启动游戏类的显示。,二、核心逻辑的设计思路,游戏的实现其实就是把一个现实世界的物理模型抽象成能用程序描述的逻辑模型。我们回想一下俄罗斯方块的游戏过程:一个有一定形状的方块从屏幕顶部往下掉,而且这个方块可以旋转、可以左右移动。那么我们来分解这个过程,俄罗斯方块的游戏过程,首先,考虑怎样实现方块不停的从屏幕顶端往下落的过程。要上方块不停的从屏幕顶端往下落,这是一个重复的且按照一定时间间隔的行为,我们自然可以想到在这里用一个定时器来实现这一个重复的过程。我们只需要在定时器的定时任务里完成方块的下落就行了。,俄罗斯方块的游戏过程,其次,考虑方块表示和方块的旋转、移动。俄罗斯方块共有7种不同类型的方块,上面的7种方块中,每一种类型的方块都可以看作是单位方块的组合,且都是由4个单位方块组成。,俄罗斯方块的游戏过程,另外,方块在屏幕上的移动是以一个单位方块为单位移动到的,那么我们可以把屏幕划分成若干个小方格,每次移动就向相应的方向移动一小格,如下图,俄罗斯方块的游戏过程,向右移动五次,向下移动五次,核心逻辑的设计思路,在本例中,方块都是用一个填充颜色的实心矩形表示的,那么我们为了要表示放块,需要先把屏幕划分成mxn个小格子,在本例中,m=15,n=11。为了表示这些格子,我们可以定义一个二维数组intScreenBlock=newint1115;来表示屏幕中的每个小格子。这里为了和屏幕坐标统一起来,所以数组的第一维表示一行多少列,第二维表示总共多少行,这样与x,y是统一的。有了这个二维数组,我们可以将方块对应屏幕位置的二维数组的相应数据设置为1,而没有方块的地方设置为0,这样我们在屏幕渲染时,就扫描整个二维数组,只要数组元素为1,我们就将相应的区域着色。,核心逻辑的设计思路,下面考虑怎样表示不同类型的方块以及方块的旋转。接着上面思考,既然我们的屏幕上已经划分好了小格子,那么我们只要把每种方块贴到屏幕上的相应位置的格子里就行了,因此我们需要知道每种方块对应的那些格子应该着色。我们可以同样用数组来标记每种不同的方块应该在哪些区域着色。因为在这7种方块中,每一种类型的方块无论长或宽都不超过4个单位方块,所以我们可以用一个4x4的矩阵来表示。,核心逻辑的设计思路,方块的旋转,我们其实是用了一个4x4的二维数组来表示一种方块,那么我们在程序里可以用矩阵旋转的方法把放块旋转后的结果计算出来,这是一种方法。另一种方法,因为我们每次旋转都是旋转90度,那么每种方块也就只有4种状态,7个放块也就28种状态,那么我们可以在程序里将这28种状态都写出来,那么旋转的时候,我们只要顺序的取这些方块的状态就可以了。因此我们定义一个类BlockTypeArray来存储这些状态,方块的移动,有了前面的数据结构,我们可以设计一个类Block来控制方块的移动和旋转等操作。那么这个Block类有一个,x,y属性对应了这个方块在屏幕坐标中的位置。当我们要移动方块时,只要改变这个x,y坐标就可以了。至于渲染得时候,也是根据这个x,y坐标在加上每个方块的偏移位置,在屏幕中将这个方块画出来。,MainCanvas类的实现,完成的功能该类实现游戏的核心逻辑,需要完成的功能:实现游戏的控制(用户通过这个类实现与游戏的交互)游戏逻辑的实现包括:让方块定时下落判断方块左右移动和下落的可能性判断一个放块所涉及的行是否填满消去填满的行等,流程,实现,绘图采用双缓冲由于游戏中会频繁的清除屏幕,画方块,为了避免出现屏幕闪烁的现象,我们需要采用双缓冲技术,实现,在屏幕上画方块根据前面的分析,我们会将游戏区域划分成15x11个小格子,并用一个二维数组来表示这些小格子。通过分析,我们会发现,这些小格子不外乎有3种状态:没有方块映射到当前格子上;有方块固定在当前格子上;有方块经过当前格子。为此,我们可以用数字0,1,2分别来表示屏幕上每个小格子的当前状态。,实现,有了格子的状态表示,那么我们在paint函数里画图的时候,先清除这个屏幕,然后扫描代表屏幕小格子的二维数组,如果当前的小格子状态为0,则不用对当前小格子所代表的屏幕区域作处理;若状态为1,在将当前小格子所代表的区域画上活动方块的颜色;若状态为2,则将当前小格子所代表的区域画上固定方块的颜色。如下图:,实现,0,0,0,0,方块的定时下落,在程序中,会随机产生一个方块,要让这个方块定时下落,根据上面所讲的block类,我们可以知道只要在定时器任务里,将具体的某个block的成员变量y+1即可。,方块的左右移动、旋转和下落,方块左右移动、旋转和下落的数据表达在上面的Block类里已经实现了。在MainCanvas类里需要解决的问题是:怎样判断方块这些动作的可能性?,有了我们在前面所做的设计,要判断方块的这些可能性还是比较简单的。我们可以先记录下方块还没有作动作的状态(包括它的x、y和它的类型),让后让方块做这些动作。方块做完了这些动作后,它有了新的位置和状态,对应的x、y和类型会有所改变。那我们判断这个新的位置核心的类型所对应的方块数据会不会和其他方块或者屏幕的边界发生碰撞。如果发生碰撞,则当前的方块的状态改变无效,我们将它重设会没有改变前的状态;否则就承认当前的改变。,消除行的判定,有了前面的基础,消除行的判定是比较容易实现的。现在,我们用1来表示屏幕中某个小格子是方块固定后的状态,那么我们可以循
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年车管所受理岗试题及答案
- 慢性喉气管炎合并支气管扩张护理查房
- 2015年1月国开电大法律事务专科《行政法与行政诉讼法》期末纸质考试试题及答案
- 2025 年小升初韶关市初一新生分班考试数学试卷(带答案解析)-(人教版)
- 幼儿园中班教研组工作总结2025
- 西藏2025年下半年造价工程师考试造价管理基础:非节奏流水施工的特点考试试卷
- 沪教2024英语二年级上册Unit 1 My Morning 单元测试卷(含答案含听力原文无音频)
- 抵押合同范本相片
- 企业代运营合同范本
- 租船合同范本有哪些
- 酒店应收挂账管理办法
- 咖啡服务培训课件
- 运管助理面试题及答案
- 2025至2030年中国手机电池块市场分析及竞争策略研究报告
- KYT考试题及答案
- 吉林省国资委监管企业招聘笔试题库2025
- 聚合工艺作业培训课件
- 肿瘤科护理沟通标准化建设
- 千人相亲活动方案
- 船舶代理公司管理制度
- 医学影像检查技术题库含答案
评论
0/150
提交评论