JAVA俄罗斯方块游戏设计与实现.doc

上传人:精*** 文档编号:837923 上传时间:2023-09-08 格式:DOC 页数:22 大小:147.25KB
下载 相关 举报
JAVA俄罗斯方块游戏设计与实现.doc_第1页
第1页 / 共22页
JAVA俄罗斯方块游戏设计与实现.doc_第2页
第2页 / 共22页
JAVA俄罗斯方块游戏设计与实现.doc_第3页
第3页 / 共22页
JAVA俄罗斯方块游戏设计与实现.doc_第4页
第4页 / 共22页
JAVA俄罗斯方块游戏设计与实现.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、 第一章 绪论1.1游戏的历史游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件水平的提高,游戏开发新技术层出不穷,经典游戏比比皆是。1.1.1 从头谈起真正的电子游戏机产生于20世纪70年代。1971年,麻省理工学院的学生Nolan Bushnell设计了世界上的第一个业务用游戏机(俗名街机),叫做电脑空间。这台游戏机用一台黑白电视机作为显示屏,用一个控制柄作为操纵器,不过由于市场因素这款游戏以失败告终。但是最后他在电子游戏的发展上取得了非凡的成就。上面介绍的是专用机游戏的历史,而最早的电脑游戏可以追溯到1972年,一个叫Crowther的工程师用当时最流行的主机DEC公司的PDP10

2、编写一段简单的FORTRAN程序。在这个程序里,Crowther设计了一张地图,地图上不规则的分布着陷阱,游戏者必须寻找路径避开陷阱。这个程序被公认为是最早的电脑游戏程序。1989年,BroderBund公司的设计师乔丹.麦克纳根据阿拉伯民族的古老传说一千零一夜在Apple平台上制作了一部动作冒险相结合的电脑游戏波斯王子。这个游戏获得了第一作,它代表了当时电脑技术的最高水平。1986年,任天堂公司发售了一款真正的游戏巨作超级马里奥。20世纪80年代IBM PC兼容机的出现打破了Apple公司的垄断地位。到了20世纪90年代,游戏业才真正成熟起来,成为了一种产业。由于PC机价格非常低而且硬件速度

3、越来越快,游戏逐渐成为人们生活中不可缺少的一部分。游戏产业也逐渐发展成熟。1.1.2 图形硬件的革命图形硬件的飞速发展是近些年来的事情,部分原因是来自工业方面的压力,例如在军事和医疗方面对于实时图形的需求很强烈,而交互娱乐产业也极大的推动了图形硬件的发展。技术上的因素同样也推动着图形硬件的发展,许多图形算法可以很容易地表达为并行方式,这样硬件执行的效率变得很高。摩乐定律也起了作用,越来越多的晶体管可以集成到一块单独的芯片上。在所谓的GPU(图形处理器)概念出现以前,特殊的图形硬件只出现在诸如SGI和E&S系统里面,这些硬件价格太昂贵,不过这些公司提供了第一代基于硬件的顶点变换和纹理映射的解决方

4、案。1.2游戏的意义与内涵游戏这个名称一直就存在于每个人的日常生活中,如猜拳游戏、猜谜游戏、大地游戏、球类游戏等,林林总总,不胜枚举,甚至于有些流行歌曲把人生也比喻为游戏,好比“一场游戏一场梦” 。因此,游戏对于现代人的成长历程,绝对是一个不可或缺的重要角色。1.2.1 游戏的组成要素“游戏”,最简单的定义,就是一种供人们娱乐休闲的快乐元素。从更专业的角度形容, “游戏”是具有特定行为模式、规则条件、身心娱乐及输赢的一种行为表现。这种行为表现具备以下4个要素。行为模式: “游戏”最简单的要素就是游戏有特定的流程模式,这种流程模式贯穿于整个游戏的行为,用户必须依照它的模式流程来执行。倘若一种游戏

5、没有了特定的行为模式,那么就没有执行的行为;在没有执行的行为之后,这个游戏也玩不下去了。举个例子来说,如果猜拳游戏没有了剪刀、石头、布等行为模式,那么这还能叫做“猜拳游戏” 吗?所以不管游戏的流程有多么复杂还是多么简单,一定要有特定的行为模式。条件规则:当游戏有了一定的行为模式后,接着就必须制定出一系列的条件规则。简单来说,这些游戏的条件规则就是大家必须去遵守的游戏行为守则,只要是大家一致以为的游戏行为,在游戏中,玩家就必须遵守它,如果不遵守这种游戏行为,那么就失去了公平性。如同一种简单的球赛,打球的英文解释可以用PLAY GAME来加以说明,按照英文字面上的解释,它就是执行游戏的行为,而球赛

6、必须有一定的条件规则,并且参与者都要必须去遵守它,不能遵守它就叫作“犯规”。所以不管是什么游戏,它都会具备一组规则条件,在游戏进行的时候才会有足够的公平性。娱乐身心:一种游戏所带来的娱乐性,关键就在于为玩家所带来的刺激感,这也是游戏的精华所在。简单来说,不管是很多人玩的游戏,还是一个人玩的单机游戏,游戏本身就会存在它的娱乐和刺激性,使得玩家们想要去玩它。输赢:其实针对游戏而言,输赢是所有游戏的最终目的。一个没有输赢的游戏,也就没有了它存在的意义,如同我们常常接触到的猜拳游戏,说穿了最终目的就是为了分出胜负而己。一般而言,游戏又可以分为动态和静态两种形态。动态的游戏必须配合肢体动作,如猜拳游戏;

7、而静态游戏则是较偏向思考的行为,如同纸上游戏。然而不管是动态或是静态游戏,只要具备上述4项组成要素,都可以将它称为“游戏”。第二章 可行性研究2.1 设计目的综合运用在校期间所学理论知识和技能,设计开发俄罗斯方块,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,提高工程实践能力,为将来实际工作打下坚实的基础。2.2 可行性研究前提基本需求:系统开发的总体任务是实现游戏的可操作性、美观性、及时性。开发过程遵循软件工程规范,可采用结构化或面向对象分析设计方法。主要实现windows的GUI程序开发,对游戏中的图形图像进行键盘控制。游戏者可以通过上下左右键来对游戏进行操作。主

8、要开发目标:采用结构化设计方法,开发出一个可操作性、美观性、及时性的游戏,实现windows的GUI程序开发,并通过此次软件开发过程全面提高自身的综合素质。条件假定和限制:由于本软件目前是我的初次版本,可能还存在一些问题。如果该软件提高版本,本软件需要根据游戏者的要求进行进一步的修改。可行性研究所采用的方法和步骤:通过研究分析俄罗斯方块所具备的能力及实现的方法、确定主体结构。利用现阶段我所能达到的能力,以最简洁、最容易的办法,边开发边测试边修改,实现一个初级游戏软件。评价尺度:由于本软件是一个初级产品,对其要求不是太苛刻,所以能够达到俄罗斯游戏的一般功能即可。2.3 可行性分析管理可行性: 该

9、游戏软件为首次开发,目的只为提高工作自身素质和检查自学Java的效果,用 Java3.0软件编写后在Applet管理器中运行简单明了,所有功能均根据基本需求所做。便于管理,所以在这方面是可以实现的。经济可行性:由于本游戏的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行JAVA3.0软件的电脑便可,所以不用考虑到经济问题。技术可行性:可用与本游戏的编程语言有VB,Java,Delphi等,考虑到用于编写程序的困难度,和对语言的了解程度,选择JAVA作为编程语言。需要对变量定义、变量初始化、界面初始化、游戏初始化

10、、然后进入游戏、处理游戏过程中的各种操作。社会可行性:本游戏的开发作为毕业课程设计以巩固先前所学的知识,以个人为单位,仅供个人平常娱乐所用,无须考虑有可能造成的社会影响,不用考虑到法律、版权等的社会因素,所以在这方面是完全可行的。2.4 结论意见综上所述,本游戏软件的技术成熟、完备。各方面均无重大问题,因此本游戏软件可开始着手编写。第三章 需求分析3.1 引言对软件需求完全理解对于软件开发工作的成功是至关重要的,需求说明的任务是发现、规范的过程,有益于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,便于采用工程方法开发软件,提高软件的质量,便于开发人员、维护人员、管理人员之间的交

11、流、协作,并作为工作成果的原始依据,并且在向潜在用户传递软件功能、性能需求,使其能够判断该软件是否与自己的需求相关。3.2 游戏需求 随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域,若填满一条便消掉,记分,当达到一定的分数时,过关,设置三关,每关方块下落的速度不同,若在游戏中各形状填满了给定区域,为输者。游戏功能要求如下:游戏界面需求:良好的用户界面,有关数显示和分数显示。让方块在一定的区域内运动和变形,该区域用一种颜色表明,既用一种颜色作为背景,最好设为黑色。还需用另一种颜色把黑色围起来,宽度适中,要实现美感。游戏形状(方块)需求:良好的方块形

12、状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针。键盘处理事件:方块下落时,可通过键盘方向键(上、下、左、右键)对该方块进行向上(变形),向下(加速)、向左、向右移动。显示需求:当不同的方块填满一行时可以消行,剩余方块向下移动并统计分数。当达到一定的分数时过关。设置三关,每关方块下落的速度不同。3.3 软硬件需求操作系统Windows98/me/2000/XP/2003内存容量64MB显卡要求8M声卡要求支持DirectX 8.0 音效卡交互工具键盘/鼠标CPU奔腾133以上光驱8倍速以上

13、硬盘空间400MB显示器VGA以上显示器开发软件Java可视化编程3.0以上版本3.4 接口控制本软件需求通过键盘进行操作,在Windows的操作系统下,利用键盘的上、下、左、右键对方块进行移动变形,要使用键盘的接口事件。3.5 方案论证学校现已开设的课程有C语言、VB、C+,自己本身自学了Java,就目前了解,可用Jave,VB和C+编写俄罗斯方块程序。3.5.1 VB的优点VB是完全中文化的环境使用,语句生成器和快速提示帮助使用户不必记忆成千上万的属性和方法,在较短的时间内就能开发出功能强大的应用程序。Internet应用程序的开发功能更加强大和容易,支持动态HTML技术的应用程序。种类繁

14、多,功能强大的多媒体控件,能帮助用户在较短的时间内用较少的语句编写出图文声像并茂的多媒体程序。能对多种数据库进行读写操作。它所提供的可视化数据管理器能帮助用户构造多种类型的数据库。用户自定义类型可以作为参数或作为公共属性和方法的返回值,函数可以返回数组变量,动态数组可以赋值,文件系统对象,按名调用,增强创建对象函数和StrConv函数。应用程序安装向导能帮助用户自动生成具有一定功能的应用程序,加快了程序的开发速度。3.5.2 C+的优点C+是对C语言的扩充,扩充的绝大部分来自著名语言中的最佳特性:从SIMULA 67中吸取了类,从ALGOL 68中吸取了运算符一名多用、引用和在分程序中任何地方

15、说明变量,综合了Ada的类属和Clu的模块特点,从BCPL中吸取异常处理,从BCPL中吸取了用/表示注释。C+保持了C的紧凑、灵活、高效和易移植强的优点,它对数据抽象的支持主要在于类概念和机制,对面向对象风范的支持主要通过虚拟函数。C+既有数据抽象和面向对象能力,语言运行性能高多,加上C语言的普及,而从C至C+的过渡较为平滑,以及C+与C的兼容程度可使数据巨大的C程序能方便地在C+环境中重用。尽管C+当初的设计本意是帮助管理大型程序,但其用途并不仅限于此。C+的面向对象的特性可有效地用于实际的程序设计工作。C+常常用于设计编辑器、数据库、个人文件系统以及通讯程序等。而且,由于C+共享C的效率,

16、所以用C+可以构成很多高性能的系统软件。3.5.3 Java的优点Java是定义位于网络计算的计算机语言,它几乎所有的特点也是围绕着这一中心展开的并为之服务的,这些特点使得Java语言特别适全于用来开发网络上的应用程序;另外,作为一种面世较晚的语言,Java也集中体现和充分利用了若于当代软件技术新成果,如面向对象、多线程等,这些也都在它的特点中有所反映。3.5.3.1 开台无关性如前所述,Java语言独特的运行机制使得它具有良好的二进制级的可移植性,利用Java,开发人员可以编写出与具体平台无关、普遍适用的应用程序,大大降低了开发、维护和管理的开销。3.5.3.2 面向对象Java是面向对象的

17、编程语言。面向对象技术较好地适应了当今软件开发过程中新出现的种种传统面向过程语言所不能处理的问题,包括软件开发的规模扩大、升级加快、维护量增大经及开发分工日趋细化、专业化和标准化等,是一种迅速成熟、推广的软件开发方法。面向对象技术的核心是以更接近人类思维的方式建立计算机逻辑模型,它利用类和对象的机制将数据与其上的操作封装在一起,并通过统一的接口与外界交互,使反映现实世界实体的各个类在程序中能够独立、自治、继承;这种方法非常有利于提高程序的可维护性和可重用性,大大提高了开发效率和程序的可管理性,使得面向过程语言难于操纵的大规模软件可以很方便的创建、使用和维护。3.5.3.3 安全稳定对网络上应用

18、程序的另一个需求是较高的安全可靠性。用户通过网络获取并在本地运行的应用程序必须是可依赖的,不会充当病毒或其他恶意操作的传播者而攻击用户本地的资源;同时它还应该是稳定的,轻易不会产生死机等错误,使得用户乐于使用。3.5.3.4 支持多线程多线程是当今软件技术的又一重要成果,已成功应用在操作系统、应用开发等多个领域。多程序技术允许同一个程序有两个执行线索,即同时做两件事情,满足了一些复杂软件的需求。Java不但内置多线程功能,而且提供语言级的多线程支持,即定义了一些用于建立、管理多线程的类和方法,使得开发具有多线程功能的程序变得简单、容易和有效。3.5.3.5 简单易学如前所述,衍生自C+的Jav

19、a语言,出于安全稳定性的考虑,去除了C+中不容不得易理解和掌握的部分,如最典型的指针操作等,降低了学习的难度;同时Java还有一个特点就是它的基本语法部分与C语言几乎一模一样。这样,无论是学过Java再学C,还是已经掌握了C语言再业学Java,都会感到易于入门。3.5.4方案选择面向对象是一种认识世界的方法,是一种程序设计方法。面向对象的观点认为,客观世界是由各种各样的实体,即对象组成的。每种对象都有自己的内部状态和运动规律,不同对象间的相互联系和相互作用就构成了各种不同的系统,并进而构成整个客观世界。按照这样的思想设计程序,就是面向对象的程序设计。面向对象的程序设计吸取了结构化程序设计的先进

20、思想,并把它们同几个支持用户用新方法进行程序设计的有力概念结合在一起。所有面向对象的程序设计语言一般都包含三个概念:封装、多态性和继承性。这种方法要求语言必须具备抽象、封装、继承和多态性这几个关键要素。面向对象的程序设计,是通过数据和代码建立分块的内存区域,以便提供对程序进行模块化的一种程序设计方法,这些模块可以被用作样板,在需要时再建立其副本。C+和Java在面向对象这方面比VB要强,所以我排除了用VB做的可能性。但是C+为了与C语言兼容,其是包含了些面向过程的成分;Java除了C+中非面向过程的部分,其程序编写过程就是设计、实现类,定义其属性、行为的过程。还有Java特有的“沙箱”机制是其

21、安全性的保障,同时它去除了C+中易造成的错误指针,增加了自动内存管理等措施,保证了Java程序运行的可靠性。 所以经过再三比较了三种语言后,决定采用Java语言编写俄罗斯方块。第四章 概要设计4.1 游戏设计分析Java为纯面向对象(Object-Oriented,OO)的程序语言,它的诸多优点在此就不作论述了。从面向对象的观念出发,本程序可分为以下几个对象:l 方块类型数据l 程序运算逻辑l 绘图l 显示平台分析对象的技巧在于它的重复利用及维护效率。试想,若要把设计出来的程序在不同的显示平台上执行,就要作大幅度的更动甚至重写,这样就失去了面向对象属性,所以在本程序分析时将不变与易变的因素分别

22、做成对象,如方块类型数据及程序运算逻辑就是不变的项目,而绘图及显示平台会因为环境而有所不同属于易变的项目。1.方块类型数据方块类型虽然运送不同,但状态与行为都是相同的,如下表所示。 方块的状态与行为对 象 要 素说 明状态记录方块形状的变量行为方块根据x=y;y=2-x进行旋转2.程序运逻辑程序中逻辑运算通常只作数值的运算及分析,如方块移动时阻碍判断、方块满行判断、删除满行、方块移动、定时器、事件响应等。3.绘图绘图会因为显示平的不同而有所不同,例如在单机与手机上的显示环境就不相同,或显示效果会有所不同,例如方块的样式作修正时,即可以产生出不同的显示效果。4.显示平台“可移植性高”是Java的

23、属性之一,Java的应用涉及许多领域,如手机、单机程序及浏览器等,不同的平台对于它的设定不尽相同,若将显示平台独立为一个类,将有助于主程序的完整性及移植程序的快速性。4.2 注意事项游戏在设计时除了将程序切割成多个对象外,在游戏的逻辑运算上应尽可能做到弹性化。所谓弹性就是方块地图的长与宽应该可以用参数来改变。4.3 游戏流程图按S键关开1.游戏开始控制游戏开关2.键盘控制台循环运行程 序 运 行顶层图否是否是否是游戏开始接受按钮的控制信息1. 检查满行2. 删除满行3. 重新装载方块产生控制方块下降的执行信息移动方块显示方块于屏幕中,检查方块在屏幕上是否有阻碍发生方块移动时是否有阻碍方块是否无

24、法下移游戏结束图1无效有效按键保持不动可动2.1检查按键2.2检查可移动性图 2第五章 详细设计5.1 总体设计过关游戏结束重新游戏下一个图行达到提定位置达到提定位置显示屏幕信息按向上键游戏开始否按s键游戏开始按键7.begin()10.reach()12.change()9.xian()6.gameinit()8.save()5.run()11.KeyDown()13.Destroy()1.Main()2.Init()3.start()4.paint()程序流程图序号方法名作用1Main()定义窗口2Init()创建变量3start()打开线程4paint()游戏界面初始化和游戏开始开关5r

25、un()控制游戏速度6gameinit()游戏变量初始化7begin()装载图形8save()保存上一个图形的坐标9xian()屏幕显示10reach()处理到达后的图形,进行加分,满行判断及消行处理等11keyDown()控制按键信息12change()控制图形变化13destroy()游戏结束5.2 屏幕信息初始化(paint()) 调用gameinit()开启游戏,gameinit()是变量初始化,也是游戏的入口判断是否按下S键显示开启游戏的方法游戏开关控制图(在panint()内实现)paint()方法是绘制游戏地图的方法,先指明是什么颜色,再定义颜色范围,本游戏是先用红色画了一个大的

26、实心矩形框,再在红色中画一个比红色小一点的黑色实心矩形框,这样黑色的框便会把原来红色的部分遮掉,让人看起来就是黑色的框周围围了一圈红色。黑色矩形框为后面的游戏方块活动的范围。该方法中还设置了一把锁,是游戏是否开始的锁,如果还没开始则会在黑色框中提示游戏开始的方法。如果游戏锁解开,会调用gameinit()方法。Paint()方法还可在前面加re,即repaint(),该方法可以将整个屏幕清屏,再重新画一个游戏界面。也由于如此,如果在方块向下运动中,每运动一行都要掉用一次repaint()方法的话,屏幕便会闪烁的很快,这样就游戏的可观性来说很不好。所以我另外定义了一个制作图形变量(Graphic

27、s gg),这个变量只要被激活(gg = getGraphics(),就可以拥有绘图的所有功能。同时也定义了另外一个绘图的方法(xian(),这样就减少重新绘图而造成的屏幕闪烁问题。有关xian()方法的使用,将在后面的显示控制中提到。gameinit()方法是游戏初始化,用双重循环把定义游戏地图的二维数组screen赋为false,即清空游戏地图中的所有方块。也把每行方块数初始化,分数初始化,打开游戏地图清屏开关,再调用装载游戏方块begin()方法。5.3 方块的装载(begin()是否7654321随机抽取一个数随机数一字形Z字形反Z形7字形反7形倒T形田字型游戏是否结束保存当前方块坐标

28、显示方块于屏幕上游戏结束调用destroy()关数初始化返回开始界面 方块装载(begin()方法)定义一个随机变量,然后调用随机函数(rand=(int)(Math.random()*7)+1),所取得的随机数在1到7之间,用这7个数字表示7中常见的方块,并从7种方块中随机抽取图形。每一种方块都是由两个一维数组(x,y)表示的,其中一个用来保存方块所在行,另一个数组用来保存方块所在列,这样有利于方块在屏幕上准确而有活动的定位。所有7种图形都是在三行三列的地图中研究后给出的坐标,给出的坐标也是方块在游戏地图中靠最顶行的坐标。这就好象方块存在于一个三行三列大小的图形中而够成的一张图片。图片的运动

29、也就是方块的运动,这样,要实现方块的变形,就要在三行三列的图形中定义一个最左上角的基点,方块运动,基点也跟着运动。基点坐标在加载方块是加载,基点的存储空间在加载每个方块数组的最后定义。这样使得方块在游戏地图中的每一个地方都可以变形。也不会因为变形而方块在游戏地图中的变动很厉害,出现瞬移的现象。图形坐标装载完后,先判断在方块的下一行是否已有方块,如果有则说明方块以到达游戏地图的顶端,游戏将结束。没有则先把方块坐标保存,这是为了在方块向下移动的时候在它的后面不会有虚假的方块,因为方块向下运动,记录的是新一行的方块坐标,但旧一行的没有消掉,所以要先旧方块的坐标保存起来,搽掉旧方块再显示方块。这样也会

30、减少屏幕的闪烁问题。5.4 处理键盘事件上左右下是否判断是否是S键且游戏游戏还没开始按键等待开启游戏开关判断按键图形变化调用change()方法1. 判断可移动性2. 可以则移动1.判断可移动性2.可以则移动1.判断是否能再向下移2.可以则向下移调用xian()将发生变化后的方块显示在屏幕上用save()保存原有坐标 键盘事件功能图(KeyDown())keyDown()是处理按键的事件,刚开始运行程序时,游戏还没有开始,这时除S键(解键盘锁的键)是有用外,其他的键都给锁住,这样可以避免键盘过早的控制游戏。在判断是否在S键的语句中还加了对游戏锁取反并判断是否为真的语句,两个语句同时成立时,才会

31、解开游戏锁,程序开始时,游戏还没有开始,游戏锁是关的,但是取反后它就是真的,所以只要按下S键后,两个语句都成立。这样做是为了在游戏开始时再按下S键,游戏不会重新开始,即游戏开始后,S键就没有用了。按下S键后,游戏锁才被解开,键盘也被解开。每当有按键,也就是方块要产生变化时,先保存方块的坐标,便于清理旧方块,显示新方块。当方块要进行上(变形)、下、左、右变化时,先对方块将要移动到的位置进行判断,判断是否有障碍,有则保持原来的位置不变,没有则根据所按的键执行相关的操作。再把方块的位置显示在屏幕上。方块的移动其实也只是对行或列坐标的增减而己。例 向左键的障碍物判断及处理:for(i=0;i4;i+)

32、if (xi1 | screenxi-1yi)/判断是否到达屏幕最左边或要到的左边有没有方块 break; if(i=4) / 当无障碍时 for(i=0;i5;i+) xi-=1; /方块向左移动 break; 5.5 方块变化(change())不可变可变采用x=y;y=2-x的逆时针旋转规则产生新坐标新点坐标赋给控制方块变量方块变化(按向上键)检查可变性不发生任何改变当按下向上键时,将会执行方块变化事件(change())。常见的方块有7种(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),所有图形都是用两个一维数组来统计它的横坐标和纵坐标,每个方块有4种不同的变化形状,所以我对

33、7种图形都做要详细的研究和分析,得到了一个方块逆时针旋转结论:x1=y;y1=2-x;其中x,y代表方块变化前的坐标,x1,y1代表方块变化后的坐标,这样使方块成功的变化。这里的变量和游戏中的无关,只用于此处说明。但田字形的方块用上面的变化规则时,方块晃动的厉害,所以上面的规则只能作用与其他6种图形。因为田字形本身的变化也是原来的图形,有变化和没变化一样,可以对它不作改变,即按下向上键时,不对田字型的做改变。这样就可以解决田字形变化的问题。还有两个Z字形和一字形变化不是很规范,但没有太大的问题,所以为了避免麻烦我就没有处理这些问题。当图形要改变时,它将先判断变化后的位置是否没有任何小方块,或是

34、否已到达游戏地图的边缘,如果有小方块或到达边缘,则不执行方块变化,这也是一种障碍物的判断;如果没有的才处理方块变化。至于处理障碍物的方式与处理方块向左运动的方式差不多,所以在这不做详细的解说。5.6 控制游戏速度与自动下降(run()否是是否游戏是否开始游戏暂停判断方块是否到达底行或下面己有方块调用到达事件(reach())调用save()保存方块当前位置方块向下移动一行调用显示控制xian()用Thread.sleep(1200-pass*300)控制下降速度的数值,即控制游戏的休眠时间为了使每一关中每个方块的下降速度的一致性,Thread.sleep(1200-pass*300)是一个固定

35、的数字,每次循环时都会根据关数(pass)的级别决定所增加的数字大小。可以说控制游戏的关数,也就是控制速度,也可以说是对休眠时间长短的控制,休眠时间越短则游戏关数越高,游戏速度就越快。因为这个数字就是控制方块在每行的休眠时间,不会受游戏者按键的影响。 Thread.sleep()是游戏休眠,括号中的数字将决定休眠的时间,也是方块在此行停留的时间。Run()是当游戏没有任何操作,就会返回它进行循环运行。如果游戏还没开始那么在这里下降功能将被锁定,因为游戏都没有开始,在这里处理自动下降有点说不过去。如果游戏开始这个功能马上会被开启,正因为有自动向下运行的功能,那么也少不了障碍物的判断和是否到达底行

36、的判断,只要符全其中之一,就可以调用到达事件(reach())来处理。否则就为了清除旧图而保存方块当前坐标,然后方块再向下移动一行。方块向下运动时,先保存旧方块的坐标,记录新的方块坐标,然后用黑色把旧方块覆盖,再画出新方块的图形,由于电脑处理速度快,在视觉效果上就像方块向下运动了一行一样。5.7 处理到达事件是否堆积方块,统计每行方块数目2.统计分数判断是否过关关数增加,游戏速度将变快。调用游戏初始化gameinit()开始新的一关装载图形(调用begin())1.判断行满、处理消行、堆积方块向下移动 处理方块到达图reach()事件是在方块自动下降或是按键下降时,当方块新坐标遇到障碍或是到达

37、底部时调用此事件。到达事件是将方块所在位置上的点,用一个屏幕数组记录下来,成为以后的障碍物。在这里还有一点要做详细的解说,屏幕是如何实现,为什么方块能够堆积之类的问题:屏幕采用的是一个二维的逻辑数组,主要描述第几行第几列上是否存在方块,如果存在则这个逻辑变量的值将会为真,否则为假。这个数组也能描述哪行哪列上存在着小方块,能描述方块在屏幕上的准确位置。但在屏幕上显示方块,是通过这个数组和显示里面的控制得到屏幕上的显示信息。到达事件一触动就证明了方块到达目的地,那么就将方块进行堆积。方块的堆积实现如下:for(j=0;j0)/有消行,使屏幕方块向下移动 for(i=0;i12;i+) screen

38、ij=screenij-k; rowj=rowj-k; j-;/向上推动一行5.9 显示控制是否清除屏幕所有方块、成绩和关数,全部重新绘置,使得消行视觉化判断是否消行清除旧图形(方块在屏幕上前一点的位置)绘制新图形方块组成:小方块是由三个不同颜色的正方形方框组成,其中正方形有实心的也有空心的,这样使得方块变得好看点能看出堆积的视觉效果.每个图形是由四个小方块拼凑而成的。显示控制时先看之前是否发生过消行事件,如果发生了清除屏幕所有方块、成绩和关数,全部重新绘置,使得消行视觉化。然后再清除旧图形,绘制新图形。其实消除屏幕只是将屏幕重新画一次而己,清除成绩和关数,也只是在有显示成绩和关数的地方画一个

39、白色的框而己。重新绘置新点,就是从下向上判断看哪些地方有方块的就得新画一个小方块,没有的不画。5.10 保存方块坐标(save())save()方法将活动方块的之前坐标保存,在方块移动后,它就起到清除旧图形的重要作用,就是如些使显示界面不用不断的刷新,然后再去绘制新图,这样可以使得屏幕不会变得太闪烁。5.11 处理游戏结束destroy()来处理游戏结束,l 关闭游戏开关l 关数初始化l 返回到开始界面l 调用repaint()使屏幕初始化第六章体会在做毕业设计以前,我对Java游戏开发只是停留在理论知识的水平上,是“纸上谈兵”,缺乏实际的软件开发经验。这次通过做毕业设计,我完成了俄罗斯游戏的

40、软件开发任务。在整个开发过程中遇到了很多问题,如方块的装载和变形、屏幕太闪烁的问题、满行判断及消行的处理。但最终都被我一一解决,对其中比较主要的几点体会总结如下。第一,为了熟悉俄罗斯方块的相关运作,我经常在玩街机和游戏机上的俄罗斯方块,慢慢去发现它所有的功能,然后再思考和查阅资料进行分析,经过逐步的设计与反复的修改论证,才完成了整个游戏的开发。第二,完成了从“小而全”,到“全而精”的转变。设计过程中,经常会遇到困难,我学会通过反复思考和测试,然后找出自己的错误并加以改正,再进行下一个步骤。这个程序就是在这样反复过程序中一点一点的完成的。完成之后再来优化整个程序。第三,作是一个不断学习新鲜事物的

41、过程,从设计初的不懂到最后能够顺利完成,我体会到在实践中学习的重要性,这对于将来我走上工作岗位具有重要意义。 第四,通过毕业设计使我对Java这门课程有了一定的了解,也对我今后的就业之路打下了一定的基础。经过一个月的不断努力,毕业设计内容已经基本上完成了。回顾这个设计过程,我学到了许多书本上没有学到的知识。通过这次自己制作的软件,丰富了自己的实践技能,扩展了本专业的知识面,使我受益非浅,同时也体验到了搞软件开发的困难度。在这次设计的同时,我又从中学到了许多东西。但由于我对这样的软件开发还只是一个开始,了解的不多,这其中或许还有很多的不足,有些模块做得不是很好,有些功能还不能够完全的实现,如不能把要装载的方块提前显示出来。因此做得不是很好,界面的设计及整体的布局还比较简单,没有突出特色出来,这也可能是我这个系统的不足之处,在这里也恳请各位老师能

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业设计

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922