java俄罗斯方块游戏设计与实现-论文内容摘要:

++和 Java在面向对象这方面比 VB要强,所以我排除了用 VB做的可能性。 但是 C++为了与 C语言兼容,其是包含了些面向过程的成分; Java除了 C++中非面向过程的部分,其程序编写过程就是设计、实现类, 定义其属性、行为的过程。 还有 Java特有的“沙箱”机制是其安全性的保障,同时它去除了 C++中易造成的错误指针,增加了自动内存管理等措施,保证了 Java程序运行的可靠性。 所以经过再三比较了三种语言后,决定采用 Java语言编写俄罗斯方块。 第四章 概要设计 游戏设计分析 Java 为纯面向对象( ObjectOriented, OO)的程序语言,它的诸多优点在此就不作论述了。 从面向对象的观念出发,本程序可分为以下几个对象:  方块类型数据  程序运算逻辑  绘图  显示平台 分析对象的技巧在于它的重复 利用及维护效率。 试想,若要把设计出来的程序在不同的显示平台上执行,就要作大幅度的更动甚至重写,这样就失去了面向对象属性,所以在本程序分析时将不变与易变的因素分别做成对象,如方块类型数据及程序运算逻辑就是不变的项目,而绘图及显示平台会因为环境而有所不同属于易变的项目。 方块类型虽然运送不同,但状态与行为都是相同的,如下表所示。 方块的状态与行为 对 象 要 素 说 明 状态 记录方块形状的变量 行为 方块根据 x=y。 y=2x进行 旋转 程序中逻辑运算通常只作数值的运算及分析,如方块移动时阻碍判断、方块满行判断、删除满行、方块移动、定时器、事件响应等。 绘图会因为显示平的不同而有所不同,例如在单机与手机上的显示环境就不相同,或显示效果会有所不同,例如方块的样式作修正时,即可以产生出不同的显示效果。 “可移植性高”是 Java 的属性之一, Java 的应用涉及许多领域,如手机、单机程序及浏览器等,不同的平台对于它的设定不尽相同,若将显示平台独立为一个类,将有助于主程序的完整性及移植程序的快速性。 注意事项 游戏在设计时除了将程序切割成多个对象外,在游戏的逻辑运算上应尽可能做到弹性化。 所谓弹性就是方块地图的长与宽应该可以用参数来改变。 游戏流程图 顶层图 图 1 按 S 键 关 开 1. 游戏开始 控制游戏开关 2. 键盘控制台 循环运行 程 序 运 行 否 是 否 是 否 是 游戏开始 接受按钮的控制信息 1. 检查满行 2. 删除满行 3. 重新装载方块 产生控制方块下降的执行信息 移动方块 显示方块于屏幕中 ,检查方块在屏幕上是否有阻碍发生 方块移动时是否有阻碍 方块是否无法下移 游戏结束 图 2 无效 有效 按键 保持不动 可动 检查按键 检查可移动性 第五章 详细设计 总体设计 程序流程图 序号 方法名 作用 1 Main() 定义窗口 2 Init() 创建变量 3 start() 打开线程 4 paint() 游戏界面初始化和游戏开始开关 5 run() 控制游戏速度 6 gameinit() 游戏变量初始化 7 begin() 装载图形 过关 游戏结束 重新游戏 下一个图行 达到提定位置 达到提定位置 显示屏幕信息 按向上键 游戏开始 否 按 s 键游戏开始 按键 () () () () () () () () () () () () Main() () 8 save() 保存上一个图形的坐标 9 xian() 屏幕显示 10 reach() 处理到达后的图形,进行加分, 满行判断及消行处理等 11 keyDown() 控制按键信息 12 change() 控制图形变化 13 destroy() 游戏结束 屏幕信息初始化( paint()) 游戏开关控制图(在 panint()内实现) paint()方法 是绘制游戏地图的方法,先指明是什么颜色,再定义颜色范围,本游戏是先用红色画了一个大的实心矩形框,再在红色中画一个比红色小一点的黑色实心矩形框,这样黑色的框便会把原来红色的部分遮掉,让人看起来就是黑色的框周围围了一圈红色。 黑色矩形 框为后面的游戏方块活动的范围。 该方法中还设置了一把锁,是游戏是否开始的锁,如果还没开始则会在黑色框中提示游戏开始的方法。 如果游戏锁解开,会调用 gameinit()方法。 Paint()方法还可在前面加 re,即 repaint(),该方法可以将整个屏幕清屏,再重新画一个游戏界面。 也由于如此,如果在方块向下运动中,每运动一行都要掉用一次 repaint()方法的话,屏幕便会闪烁的很快,这样就游戏的可观性来说很不好。 所以我另外定义了一个 制作图形变量 (Graphics gg),这个变量只要被激活 (gg = getGraphics()),就可以拥有绘图的所有功能。 同时也定义了另外一个绘图的方法 (xian()),这样就 减少重新绘图而造成的屏幕闪烁问题。 有关 xian()方法的使用,将在后面的显示控制中提到。 gameinit()方法 是游戏初始化,用双重循环把定义游戏地图的二维数组screen[][]赋为 false,即清空游戏地图中的所有方块。 也把每行方块数初始化,分数初始化,打开游戏地图清屏 开关, 再调用装载游戏方块 begin()方法。 调用 gameinit()开启游戏,gameinit()是变量初始化,也是游戏的入口 判 断是 否按下 S 键 显示开启游戏的方法 方块的装载 (begin()) 方块装载( begin()方法 ) 定义一个随机变量 ,然后调用随机函数( rand=(int)(()*7)+1), 所取得的随机数在 1到 7之间,用这 7个数字 表示 7中常见的方块,并从 7种方块中随机抽取 图形。 每一 种方块都是由两个一维数组 (x, y)表示的,其中一个用来保存方 块所在行,另一个数组用来保存方块所在列,这样有利于方块在屏幕上准确而有活动的定位。 所有 7 种图形都是在三行三列的地图中研究后给出的坐标,给出的坐标也是方块在游戏地图中靠最顶行 的坐标。 这就好象方块存在于一个三行三列大小的图形中而够成的一张图片。 图片的运动也就是方块的运动,这样,要实现方块的变形,就要在三行三列的图形中定义一个最左上角的基点,方块运动,基点也跟着运动。 基点坐标在加载方块是加载,基点的存储空间在加载每个方块数组的最后定义。 这样使得方块在游戏地图中的每一个地方都可以变形。 也不会因为变形而方块在游戏地图中的变动很厉害,出现瞬移的现象。 图形坐标装载完后,先判断在方块的下一行是否已有方块,如果有则说明方块以到达游。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。