J2me-开发实例-俄罗斯方块.ppt

上传人:max****ui 文档编号:6357333 上传时间:2020-02-23 格式:PPT 页数:26 大小:934KB
返回 下载 相关 举报
J2me-开发实例-俄罗斯方块.ppt_第1页
第1页 / 共26页
J2me-开发实例-俄罗斯方块.ppt_第2页
第2页 / 共26页
J2me-开发实例-俄罗斯方块.ppt_第3页
第3页 / 共26页
点击查看更多>>
资源描述
JavaME移动开发编程 开发实例 实例 俄罗斯方块 一 游戏设计 操作流程本游戏的操作流程非常简单 玩家启动MIDlet启动后 即进入游戏主画面 屏幕开始显示为欢迎画面 玩家按下任意键 进入游戏 当玩家按下 开始 按钮后 就可以开始玩游戏了 在游戏过程中 玩家可以按下 暂停 按钮暂停游戏运行 按下 继续 按钮 恢复游戏运行 任何时候按 退出 按钮 MIDlet都会终止 流程图 游戏分析 要实现上述游戏功能 我们需要实现哪些类 首先 我们需要一个控制类 用来管理整个程序运行的流程 其次 我们需要一个游戏类 用来实现游戏的核心功能 再次 我们需要一个类来实现产生下一个方块 方块移动和旋转等操作 其他的一些辅助类 诸如定时器任务类等 控制类的实现 控制类的功能比较简单 根据流程 它主要控制在显示了欢迎界面后 启动游戏类的显示 二 核心逻辑的设计思路 游戏的实现其实就是把一个现实世界的物理模型抽象成能用程序描述的逻辑模型 我们回想一下俄罗斯方块的游戏过程 一个有一定形状的方块从屏幕顶部往下掉 而且这个方块可以旋转 可以左右移动 那么我们来分解这个过程 俄罗斯方块的游戏过程 首先 考虑怎样实现方块不停的从屏幕顶端往下落的过程 要上方块不停的从屏幕顶端往下落 这是一个重复的且按照一定时间间隔的行为 我们自然可以想到在这里用一个定时器来实现这一个重复的过程 我们只需要在定时器的定时任务里完成方块的下落就行了 俄罗斯方块的游戏过程 其次 考虑方块表示和方块的旋转 移动 俄罗斯方块共有7种不同类型的方块 上面的7种方块中 每一种类型的方块都可以看作是单位方块的组合 且都是由4个单位方块组成 俄罗斯方块的游戏过程 另外 方块在屏幕上的移动是以一个单位方块为单位移动到的 那么我们可以把屏幕划分成若干个小方格 每次移动就向相应的方向移动一小格 如下图 俄罗斯方块的游戏过程 向右移动五次 向下移动五次 核心逻辑的设计思路 在本例中 方块都是用一个填充颜色的实心矩形表示的 那么我们为了要表示放块 需要先把屏幕划分成mxn个小格子 在本例中 m 15 n 11 为了表示这些格子 我们可以定义一个二维数组intScreenBlock newint 11 15 来表示屏幕中的每个小格子 这里为了和屏幕坐标统一起来 所以数组的第一维表示一行多少列 第二维表示总共多少行 这样与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 则表明这一行可以消除 消除的时候 我们把这一行的小格子的状态置为0就可以了 另外 我们消除一行时 还需要将这一行上面的方块顺序的往下挪 要达到这个目的 我们只需要在消除行时 对每一列的数据元素进行移位就行了
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!