基于javame无线网络移动端的俄罗斯方块游戏的实现—计算机毕业设计内容摘要:

玩家不在积木落到屏幕底下或翻转它,不能给它找一个最有利的位置,这块积木就可能会堵住某处,而它下面的几行也就没有办法拼接完整,玩家也就离游戏结束又靠近了一行或几行。 在游戏进程中,积木落下来的速度越来越快,这样对玩家的挑战也就越来越大,游戏的难度也逐步增加。 俄罗斯方块游戏的规则 俄罗斯方块游戏的玩法非常简单易学,游戏界面是一个很高的长方形 2D 盒子,方块出现在盒子的上方,这些方块都由四个小方块组成,并按照各种方式排列,其中每一个方块都至少和另一个方块相 连。 然后,这些积木慢慢地落向盒子底部,玩家可以把这些方块左右移动或旋转。 一旦这个方块碰到阻碍,比如盒底或者另一个方块,它就会停止,而玩家可以对之加以操作。 当屏幕底端的方块拼满一横行时,这个层的方块就会消失,而这一行以上的所有方块都会下降一层。 而当那些没有拼完的横行填满整个长方形盒子,新的方块无法再出现时,游戏就结束了。 俄罗斯方块游戏的特性 (1)单屏游戏: 俄罗斯方块全部反映在一个屏幕上。 玩家可以在同一时间看到整个游戏环境,在此基础上决定怎么处理手上的这块积木。 这个游戏当中没有任何探险成分在内,它不会让玩 家真正大吃一惊,玩家能够看到让游戏顺利进行下去的所有信息,所以玩家输了的话只能怪他自己。 (2)无限游戏: 只要积木还没有堆到盒顶,俄罗斯方块就允许玩家一直玩下去,不管他做出了多少错误的决定。 每次游戏都以失败而告终,没有人真正能打败这个游戏。 玩家们总是能找到提高玩俄罗斯方块技艺的方法,这就是俄罗斯方块和传统拼图游戏的根本不同。 一旦玩家拼好了一幅拼图,只要他还记得他是怎么拼的,那么这个拼图就对他再也无挑战了。 所以人们通常不会多次玩一个拼图,但一个设计精巧的游戏却总能让人玩上一遍又一遍。 俄罗斯方块正是这样一个游 戏。 (3)多条生命: 和大多数的街机游戏不同,最早的俄罗斯方块只给玩家一条生命。 积木一堆到盒子顶部,玩家就输了。 但是游戏的设计允许玩家出现错误,同时还不会立即败下阵来。 当积木叠在长方盒子的底部时,玩家可以看到自己所犯的错误,在游戏结束前,他还是有时间想一想如何把后面的积木拼放得更合理些。 这样,俄罗斯方块虽然没有给玩家多条生命,但却在玩家重新开始前,给玩家一个改善游戏技巧、获得一些小小成就的机会。 (4)最高分机制: 俄罗斯方块引入一个计分模式,它给玩家计分并把分数记录在高分排行榜上。 实际上,因为玩家不可能 击败这个游戏,所以,取得一个更高分数的可能性就成为玩家反复玩这个游戏真正的动力所在。 (5)简单易学,容易操作: 俄罗斯方块的真正杰出之处在于它的游戏机制简单平朴,浅显易懂。 玩好这个游戏只需极少的键位,所有操作都在屏幕上一览无余。 这意味着,不论是否熟悉计算机游戏,任何人都可以走过来并立即开始玩它。 然而,玩家永远不可能完全掌握这个游戏,因为这个游戏的难度与是递增并且它在理论上可以玩无限长的时间。 4 游戏系统分析设计 系统 解决方案 本系统在 Windows XP 的操作系统下,以 Java Micro Edition Wireless Toolkit 为开发工具,用中文版 UltraEdit 做为代码编辑器而实现的。 在 KToolBar 开发包的 DefaultColorPhone 模拟器下进行调试。 系统总体结构 系统开发的主要任务是俄罗斯方块游戏在无线移动端的实现。 本系统的主要实现功能模块分为:难度选择模块、方块处理模块、游戏规则模块。 难度选择模块 用户 在 title 屏按键数字键选择 0- 9种游戏难度,进入相对应游戏关卡。 图 6 Title屏选择关卡模块图 方块处理模 块 方块处理模块定义方块的 7 种状态, 每种状态都是由四个小方块组合而成,如下 : 图 7 方块形状模块图 游戏规则模块 游戏规则模块主要实现俄罗斯方块游戏基本规则。 比如, 积满 一行后消减;能够快速直接的下落;记录游戏最高 分;方块翻转;分数计算; 随机生成方块 ,见下图: 进入游戏 按键输入 (0- 9)选 择关卡难度 处理输入 选择 关卡难度 进入关卡 0 进入关卡 1 进入关卡 2 进入关卡 3。 判断游戏是否结束 图 8 游戏规则模块图 游戏中断处理流程 中断处理是移动设备程序生命周期的重要组成特性,包括下图三种阶段: 图 9 系统生命周期图 5 系 统实现与测试 系统源文件结构 本系统由 10个类组成并实现全部功能。 项目名字为 TetrisMidlet,其项目文件结构如下图: 游戏规则 消减积满行 快速下落 方块翻转 分数计算 随机生成方块 运行阶段 (startApp) 挂起阶段 (pauseApp) 结束阶段 (destroyApp) 唤醒 挂起 结束 结束 图 10 项目结构图 在项目源文件中, src 文件夹下为实现系统的源文件。 建了两个包作为功能划分,分别为: ui 包和 model 包。 难度选择模块 难度选择模块结构 ui 包里包含以下类: 用于显示数字的信息框 显示 title 屏,包含当前高分提示选择一个难度 显示下 一个激活方块 处理程序的所有 UI 在屏幕上显示 Box 其结构图如下: 图 11 ui包结构图 ui 包 InfoBox TitleBox NextPieceBox TetrisCanvas DisplayBox 其中核心类 的方法图如下: 图 12 类 DisplayBox的方法图 在 paint()实现了 title屏的显示,其代码如下: public final void paint(Graphics g) { ()。 (x, y, width, height)。 // box的背景 ()。 (x, y, width, height)。 // 边框 (g)。 } 下面是 paintBlock()方法的实现代码: private void paintBlock(int x, int y, int blockType, Graphics g) { int blockX = + ( * x)。 int blockY=+(* (y ))。 if( != blockType) { // 绘制下落时的阴影 ()。 (blockX + 1, blockY + 1, 1, 1)。 // 绘制一个实际的方块覆盖在阴影上 (blockType, g)。 (blockX, blockY, 1, 1)。 } else { //绘制颜色 ()。 (blockX, blockY, , )。 }} 其中, TOP_VISIBLE_ROW为 TetrisConstants下定义, Y坐标的从行 0开始索引的位置,初始值为 2。 BLOCK_EMPTY为 TetrisConstants下定义的空方块,初始值为 1。 COLOR_BLACK为 TetrisConstants下定义的预设 RGB颜色,初始值为 0x00000000。 COLOR_WHITE为 TetrisConstants下定义的预设 RGB颜色,初始值为 0x00ffffff。 难度选择模块功能 模拟器程序运行,在应用程序列表里显示可以载入运行的模拟程序,如下图: 图 13 载入程序 点击运行程序后,在 title 屏显示游戏名称、作者、最高分记录和按键提示,点击数字键输入 09中的一个数字,以选择不同难度的关卡,如下图: 图 14 运行游戏 在 title 屏,也可以点击左软键退出程序。 游戏规则模块功能 游戏规则模块结构 游戏规则模块包含 3个类: 处理方块下落问题 常数定义 游戏规则和 对键盘输入的捕捉 ,以及中断的处理 其结构图如下: 图 15 游戏规则模块结构图 其中核心类 实现了方块的下落,它的方法图如下: TetrisMidlet Ui 包 Model 包 DropThread TetrisConstants TetrisMidlet 图 16 类 DropThread方法图 其中 run()方法实现循环下落,代码如下: public void run() { //运行方法 while() { // 当前下落的方块 if() { = false。 } else { ()。 } try { (())。 // 线程睡眠 } catch(InterruptedException ie) { }}} 游戏规则模块功能 游戏规则模块实现俄罗斯方块游戏的主要功能包括,消减积满的 行、快速下落、方块翻转、分数计算、下落碰撞检测、随机生成方块。 下面是消减积满行功能代码,如下: private int clearCompletedRows(TetrisPiece piece) { TetrisBoard board = ()。 // 检查方块的每一行,看是否以完成 for(int i = 0。 i。 i++) { int rowY = (i)。 // 如果一行被填充满,则标记为完成 if((rowY)) { (rowY, true)。 } } int numClearedRows = 0。 for(int y = 1。 y = 0。 y) { //从下到上重复 if(numClearedRows 0) { (y, numClearedRows)。 } if((y)) { numClearedRows++。 (y, false)。 // 为下一次重置 } } // 清除最上面的完成行数 for(int i = 0。 i numClearedRows。 i++) { (i)。 } return numClearedRows。 } 为了增加玩家在游戏过程中的游戏性,下落 的方块设置成随机生成,这里利用 方法得到随机数,下面是随机生成方块功能的部分代码,如下: private int getRandomPieceType() { return (() % ) + 1。 } 首先用 () 方 法 得 到 随 机 数 后 , 用 随 机 数 除 以TetrisCanstants 中定义的表示方块类型数的常量 NUM_PIECE_TYPE,其值初始值为 7,取余后 加 1 取其绝对值。 实现效果如下图: 图 17 游戏进行状态图 在 前面 部分通过图 9的 系统生命周期流程图,已经了解了游戏中断处理的过程。 在游戏运行时可以按右软键调用程序生命周期中 pauseApp()方法暂停游戏,方块会停在暂停位置,直到玩家再次点击右软键恢复游戏, pauseApp()方法代码如下: protected void pauseApp() { // 挂起程序使游戏进入暂停状态 if( == ) { ()。 } } 在 pauseApp方法中调用了 pauseGame()方法,其实现代码如下: private void pauseGame() { // 把暂停命令替换成恢复命令 ()。 ()。 // 进入暂停状态并停止下落 ()。 ()。 } 游戏 暂停阶段 画面如下: 图 18 游戏暂停状态图 当点击右软件恢复游戏后,方块从暂停位置继续下落,这里用了resumeGame()来实现此功能,代码如下: private void resumeGame() { // 把恢复命令替换成暂停命令 ()。 ()。 // 进入运行状态并下落 ()。 ()。 } 游戏 恢复阶段 状态,如下图: 图 19 游戏恢复状态图 方块处理模块 方块处理模块结构 俄罗斯方块游戏中出现的七种方块是由 4 个小块组合而成。 方块处理模块包含在 model 包中: 当前下落方块的处理 定义方块格 子的状态 其类结构图如下: 图 20 方块处理模块结构图 核心类 TetrisPiece 中实现了七种方块下落时翻转方式的下落,方块翻转方式分三种方式:自由翻转 (Free)、两面翻转 (Toggle)、不能翻转 (None),下图是判断图示: Model TetrisPiece TetrisBoard 图。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。