首页 JAVA俄罗斯方块毕业论文

JAVA俄罗斯方块毕业论文

举报
开通vip

JAVA俄罗斯方块毕业论文JAVA俄罗斯方块毕业论文 重庆工商大学派斯学院(专)科毕业设计(论文) 目 录 第一章:绪论 ........................................................................................................... 3 第二章:需求分析 ............................................................................................

JAVA俄罗斯方块毕业论文
JAVA俄罗斯方块毕业 论文 政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载 重庆工商大学派斯学院(专)科毕业 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 (论文) 目 录 第一章:绪论 ........................................................................................................... 3 第二章:需求分析 ................................................................................................... 4 1. 引言 ................................................................................................................ 4 2. 游戏功能需求分析 ......................................................................................... 4 (1). 游戏界面需求 ..................................................................................... 4 (2). 游戏控制需求 ..................................................................................... 4 (3). 图形显示需求 ..................................................................................... 4 (4). 接口需求............................................................................................. 4 (5). 运行环境及系统性能需求 .................................................................. 4 3. 开发环境及技术分析 ..................................................................................... 5 (1). JAVA的特点 ......................................................................................... 5 (2). JAVA中线程的概念 ............................................................................. 6 (3). JAVA开发工具 ..................................................................................... 6 4. 游戏模块分析 ................................................................................................ 6 (1). 客户端模块 ......................................................................................... 7 (2). 方块及地图数据模块 ......................................................................... 8 第三章:程序详细设计 ......................................................................................... 11 1. 客户端设计 .................................................................................................. 11 2. 主模块—方块与地图模块设计 .................................................................... 12 (1). 得到方块........................................................................................... 13 (2). 方块的移动和翻转 ........................................................................... 15 (3). 满行消除........................................................................................... 19 (4). 升入下一关 ....................................................................................... 20 第四章:游戏测试 ................................................................................................. 21 1. 黑盒测试 ...................................................................................................... 21 2. 测试及结果 .................................................................................................. 21 3. 结果分析 ...................................................................................................... 22 第 1 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 结束 ........................................................................................................................ 23 致谢 ........................................................................................................................ 24 参考文献 ................................................................................................................ 25 第 2 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 第一章 绪论 游戏是人类生活的重要组成部分,从第一个电子游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件水平的提高,游戏开发新技术层出不穷,经典游戏比比皆是。 真正的电子游戏机产生于20世纪70年代。1971年,麻省理工学院的学生Nolan Bushnell设计了世界上的第一个业务用游戏机(俗名街机),叫做《电脑空间》。这台游戏机用一台黑白电视机作为显示屏,用一个控制柄作为操纵器,不过由于市场因素这款游戏以失败告终。但是最后他在电子游戏的发展上取得了非凡的成就。 上面介绍的是专用机游戏的历史,而最早的电脑游戏可以追溯到1972年,一个叫Crowther的工程师用当时最流行的主机――DEC公司的PDP,10编写一段简单的FORTRAN程序。在这个程序里,Crowther设计了一张地图,地图上不规则的分布着陷阱,游戏者必须寻找路径避开陷阱。这个程序被公认为是最早的电脑游戏程序。 1989年,BroderBund公司的设计师乔丹.麦克纳根据阿拉伯民族的古老传说《一千零一夜》在Apple平台上制作了一部动作冒险相结合的电脑游戏――波斯王子。这个游戏代表了当时电脑技术的最高水平。 1986年,任天堂公司发售了一款真正的游戏巨作――超级马里奥。到了20世纪90年代,游戏业才真正成熟起来,成为了一种产业。由于PC机价格非常低而且硬件速度越来越快,游戏逐渐成为人们生活中不可缺少的一部分。游戏产业也逐渐发展成熟。 俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人Alex Pajitnov制作的,它看似简单但却变化无穷,令人上瘾。 但是经过时代的变迁,当初简单却变化无穷的俄罗斯方块游戏如今却已失去了它的市场,究其原因,主要是因为游戏硬件以及技术的革新使得优秀的游戏接二连三地推出,而俄罗斯方块游戏作为一款形式、内容过于简单的游戏势必经受不住时间的冲击的。本软件通过对游戏界面的美化及人性化,使游戏用户重新燃起对俄罗斯方块游戏的热爱。 第 3 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 第二章 需求分析 1、引言 对软件需求完全理解对于软件开发工作的成功是至关重要的,需求说明的任务是发现、 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 的过程,有益于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,便于采用工程方法开发软件,提高软件的质量,便于开发人员、维护人员、管理人员之间的交流、协作,并作为工作成果的原始依据,并且在向潜在用户传递软件功能、性能需求,使其能够判断该软件是否与自己的需求相关。 2、游戏功能需求分析 (1)游戏界面需求 本游戏主要有两个界面,一是用于主游戏区的游戏画布,用来显示游戏时运动和落下去的方块,二是用于控制游戏的各种控件以及显现游戏信息的一些组件。 (2)游戏控制需求 方块下落时,可通过键盘方向键(上、下、左、右、空格或自定义快捷键)对该方块进行向上(变形),向下(加速)、向左、向右、空格(直接下落)移动。 (3)图形显示需求 随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域,若填满一条便消掉,记分,当达到一定的分数时,过关,一共设置十关,每关方块下落的速度不同,十关完成之后,即通关。 (4)接口需求 本软件需要通过键盘进行操作,在Windows的操作系统下,利用键盘的上、下、左、右及空格键对方块进行移动变形,要使用键盘的接口事件。 (5)运行环境及系统性能需求 本游戏对运行环境及系统性能的需求如表2.1所示: 操作系统 Windows98/me/2000/XP/2003 内存容量 32MB 显卡要求 8M 交互工具 键盘/鼠标 CPU 奔腾133以上 硬盘空间 40MB 显示器 VGA以上显示器 开发及运行软件 JDK1.5以上版本 表2.1游戏对运行环境及系统性能需求分析表 第 4 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 3、开发环境及技术分析 (1)JAVA的特点 Java是定义位于网络计算的计算机语言,它几乎所有的特点也是围绕着这一中心展开的并为之服务的,这些特点使得Java语言特别适全于用来开发网络上的应用程序;另外,作为一种面世较晚的语言,Java也集中体现和充分利用了若于当代软件技术新成果,如面向对象、多线程等,这些也都在它的特点中有所反映。 , 平台无关性:如前所述,Java语言独特的运行机制使得它具有良好的可 移植性,利用Java,开发人员可以编写出与具体平台无关、普遍适用的 应用程序,大大降低了开发、维护和管理的开销。 , 面向对象:Java是纯面向对象的编程语言。面向对象技术较好地适应了 当今软件开发过程中新出现的种种传统面向过程语言所不能处理的问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ,包括软件开发的规模扩大、升级加快、维护量增大经及开发分工日 趋细化、专业化和标准化等,是一种迅速成熟、推广的软件开发方法。 面向对象技术的核心是以更接近人类思维的方式建立计算机逻辑模型, 它利用类和对象的机制将数据与其上的操作封装在一起,并通过统一的 接口与外界交互,使反映现实世界实体的各个类在程序中能够独立、自 治、继承;这种方法非常有利于提高程序的可维护性和可重用性,大大 提高了开发效率和程序的可管理性,使得面向过程语言难于操纵的大规 模软件可以很方便的创建、使用和维护。 , 多线程机制:多线程是当今软件技术的又一重要成果,已成功应用在操 作系统、应用开发等多个领域。多程序技术允许同一个程序有两个执行 线索,即同时做两件事情,满足了一些复杂软件的需求。Java不但内置 多线程功能,而且提供语言级的多线程支持,即定义了一些用于建立、 管理多线程的类和方法,使得开发具有多线程功能的程序变得简单、容 易和有效。 , 简单易学:如前所述,衍生自C++的Java语言,出于安全稳定性的考虑, 去除了C++中不容不得易理解和掌握的部分,如最典型的指针操作等, 降低了学习的难度;同时?Java还有一个特点就是它的基本语法部分与C 语言几乎一模一样。这样,无论是学过Java再学C,还是已经掌握了C 语言再业学Java,都会感到易于入门。 (2)JAVA中线程的概念 JAVA程序有一个执行计算的处理机、包含处理机所执行的程序的ROM(只读存储器,在JAVA中也叫堆栈)、包含程序所要操作的数据的RAM(随机存储器,在JAVA中也叫堆)。进程是正在执行的程序。一个或更多的线程构成了一个进程(操作系统是以进程为单位的,而进程是以线程为单位的,进程中必须有一个主线程)。一个线程(执行上下文)由三个主要部分组成: , 一个虚拟CPU , CPU执行的代码 , 代码操作的数据 第 5 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 代码可以由多个线程共享,它不依赖数据。如果两个线程执行同一个类的实例的代码时,则它们可以共享相同的代码。类似地,数据可以由多个线程共享,而不依赖代码。如果两个线程共享对一个公共对象的访问,则它们可以共享相同的数据。 在Java编程中,虚拟处理机封装在Thread类的一个实例里。构造线程时,定义其上下文的代码和数据是由传递给它的构造函数的对象指定的。Java线程分守护线程和用户线程,由创建时设置。 在Java中,线程的调度是基于时间片基础上的优先级优先原则。抢占式调 优先级优先)是指可能有多个线程是可运行的,但只有一个线程在实际运度模型( 行。这个线程会一直运行,直至它不再是可运行的(运行时间到,时间片原则,或者,另一个具有更高优先级的线程抢占,优先级优先原则)。对于后面一种情形,低优先级线程被高优先级线程抢占了运行的机会。 线程的代码可能执行了一个Thread.sleep()调用,要求这个线程暂停一段固定的时间。这个线程可能在等待访问某个资源,而且在这个资源可访问之前,这个线程无法继续运行。 所有可运行线程根据优先级保存在池中。当一个被阻塞的线程变成可运行时,它会被放回相应的可运行池。优先级最高的非空池中的线程会得到处理机时 被运行)。 间( 一个Thread对象在它的生命周期中会处于各种不同的状态。线程进入"可运行"状态,并不意味着它立即开始运行。在一个只有一个CPU的机器上,在一个时刻只能进行一个动作。 因为Java线程是抢占式的,所以你必须确保你的代码中的线程会不时地给其它线程运行的机会。这可以通过在各种时间间隔中发出sleep()调用来做到。 (3)JAVA开发工具 开发工具:MyEclipse 8.5 中文名称:MyEclipse 8.5 企业级工作平台 英文名称:MyEclipse Enterprise Workbench 版本:8.5 发行时间:2009年 地区:美国 语言:英语 4、游戏模块分析 Java作为纯面向对象(Object-Oriented,OO)的程序语言,它的诸多优点在上文已经论述了。从面向对象的观念出发,本程序主要可分为以下两大模块: , 客户端GUI模块 , 游戏模块 分析对象的技巧在于它的功能的扩展性及维护效率。试想,如果因为外部环境或者用户需求的变化需要对程序进行功能扩展或者维护,就要对代码作大幅度的更动甚至重写,这样就失去了面向对象的优势,所以在本程序分析时将独立性 第 6 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 高的模块作为一个对象,以提高程序的可扩展性和可维护性。 (1)客户端模块 “客户端控制器”是指游戏界面上显示游戏相关信息及排布游戏控件的面板。游戏客户端控制器上集合了游戏的各种事件处理,包括游戏控制,键盘控制,界面更改,游戏记录等各种控制命令。本模块是程序的主模块,其它几个模块都由本模块进行控制。 客户端接口的结构,如图2.2所示: 程 序 运 行 客户端 按键风格控制器 调 整 自定 义 关 游戏记录1.游戏游戏开始 暂 停 成 绩 开始 图2.2 客户端结构图 , 客户端接口的实现 一个程序,在追求程序性能的同时,应该同时注重GUI的美观度,基于此,本游戏应该采用JAVA中swing组件包,swing组件是一组完全由JAVA语言编写的轻量级组件,没有本地代码,不依赖本机操作系统的支持,所以swing比AWI具有更强的实用性,比起AWI组件,swing组件在美观度和控制性能方面具有如下几方面的优点: , 可插入的外观感觉 在AWI组件中,犹豫控制组件外形恶对等类与具体平台相关,使得AWI组件总是只有与本机相关的单一的L&F。swing对PL&F的支持改变了单一图形界面的观感,即实现了在任意平台上运行同一个swing程序能有不同恶L&F。变成人员可以在GUI程序设计中加入相应的开关,使得程序运行时可以根据喜好选择不同的L&F,呈现不同个性化界面。 , 设置边框 可以使用相应的方法为swing组件设置一个或多个边框。Swing中提供了各种各样的边框供用户选用,也能够给通过变成人员的组合来设计个性边框。充分利用边框设计,可以协助布局管理器对组件进行合理的布局。 , 使用图标 此特性使得swing组件较之AWI组件具有更强的外观感受。与AWT组件不同, 第 7 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 许多swing组件如按钮、标签,不仅可以使用文字,还可以使用图标来加强外观效果。 , 支持键盘操作 在swing组件中,使用Jcomponent类的registerKeyboardAction方法,能使用户通过键盘操作来替代鼠标驱动GUI上swing组件的相应动作。 , 可存取性支持 所有swing组件都实现了可存取性接口,提供对可存取性的支持,使得辅助功能如屏幕阅读器、语音识别系统,能十分方便地从swing组件中得到信息。Swing组件设置三个通讯对象:模型、视图和控件,并将模型与视图分离开来,这样可以方便用户直接通过模型管理数据,实现基于一种模型的多种视图处理。 基于swing组件的优点,结合本程序的设计目标,程序的界面将使用swing组件实现。 (2)方块及地图数据模块 这是俄罗斯方块游戏最基本的功能模块,本游戏的设计思想是只要有客户端控制器及方块地图数据模块,就能实现游戏的基本功能。本模块其实可以分开为方块和地图两个模块,但考虑到二者联系紧密,需要共享数据结构,属于公共耦合,耦合性过高,将二者分开也有悖于作者设计的游戏算法,增加了程序的编写难度,故把它们并作了一个对象。 , 方块数据 方块数据存储了七种不同形态的方块,以及每个方块的四种形态,可用一个7x4x4x4的四维数组表示,例如,定义一个四维数组block[7][4][4][4],数组block的第一维表示七种不同形态的方块,第二维代表方块的四种不同翻转状态。数组的第三维和第四维代表某一种形态的方块的某一状态。 假定,block[0][0][i][j]的值如以下: 1,1,0,0 0,1,0,0 0,1,0,0 0,0,0,0 则,block[0][0][i][j]代表“7”字型的方块。当方块翻转时,只需改变第二维的下标即可,即,block[0][0][i][j]变为block[0][1][i][j]。而如果更改方块形态,就改变数组第一维坐标。 , 地图数据 本游戏的游戏地图为25x15格,故应当用一个25行15列的二维数组存储游戏地图数据,但是考虑到本游戏嵌入了方块越界自动纠正功能,而方块越界,实际上就是游戏地图数组越界。假定,方块数据有以下数据模式,代表长条形的一种方块: 0,0,0,1 0,0,0,1 0,0,0,1 0,0,0,1 第 8 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 当以上数据模式所代表的方块处在游戏的左边界区,并且发生翻转时,方块可能翻出游戏地图外,在这种情况下,就发生了游戏地图数组越界,JAVA异常处理系统会抛出ArrayIndexOutOfBoundsException,为避免这种情况的发生,游戏地图数组应当适当增大,故本游戏将地图数组长度和宽度各扩大了三个单位,定义成为28x18模式的数组。 , 建立游戏的坐标系统 俄罗斯方块,最终是要将方块绘到游戏地图中,如何确定方块在地图上的位置,就需要一个方块数组与游戏地图数组的映射关系。建立一个合理的坐标系统,对于游戏的设计有莫大的方便。结合JAVA的坐标系统,综合游戏设计上的考虑,本程序最终确定了将游戏地图的左上角坐标表示为(0,0),同样,方块在游戏地图中表示为记录方块左上角在游戏地图中的坐标。 , 对方块数据和游戏数据的操作 确定了方块数据与地图数据的映射关系,对方块和游戏数据的操作就变得简便了。对方块的操作包括方块的左移、右移、下移等,当方块左移时,只需将方块数组左上角的坐标往左方向移动一个单位即可,同理,方块右移、下移时,只需将坐标往右、往下移动一个单位。 如果以X代表方块左上角的横坐标,以Y代表纵坐标,方块左移,执行的操作是X--,方块右移,执行的操作是X++,方块下落,执行的操作是Y++。 , 游戏绘图 俄罗斯方块具有七种不同形态的方块,而方块又分别有正在下落和已经落下固定两种不同状态,如何在游戏地图中实现静态和动态地绘制出七种不同形态的方块,具有一定的挑战性。经过反复思考论证,本游戏决定采用不同的绘制模式来分别实现绘制动态和静态方块。 1. 遍历方块数组绘制动态方块 假定调用Graphics类中的fill3DRect(int x,int y,int width,int height,Boolean raised)方法绘制方块,再假定方块数组左上角在地图中的坐标为x和y,则绘制动态方块可采用如下方式实现。 for(int i=0;i<=3;i++) for(int j=0;j<=3;j++) if(Block[blocktype][turnstate][i][j]==1) g.fill3DRect((y+j)*width,(x+i)*width,width,width,raised); 这种绘制方式的原理是每一次绘制一个单位长度的正方形格子,在将这些格子组合成某一种的形态方块。这里面,某一种形态的方块是由方块数组中的参数i和j决定的,具体是哪种形态的方块,方块的哪一种翻转状态,是由参数blocktype和turnstate决定的。而参数y+j表示的当前格子的左上角在游戏地图中的横坐标,x+i表示的是小格子的纵坐标。 2. 遍历游戏地图数组实现坠下方块的消行绘制 当坠下的方块有满行需要重新绘制时,需要进行消行绘制。首先,可用一个数值代表游戏地图数组的某一个区域是否有方块填充,假定这个数值是2,即如 第 9 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 果地图数组中某一个元素的值为2,则表示这个元素所代表的地图区域存在方块。进行消行绘制时需要判断地图数组的某一行是否全为2,如果全为2,则可以认为这行被方块填满,需要进行消行,然后再继续往下判断下一行,直到所有满行被消除为止。 消行流程图如图2.3所示: 开始 结束 否 地图数组某一 行是否全为2 是 消去这一行 图2.3 消行流程图 第 10 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 第三章 程序详细设计 1、客户端设计 客户端是游戏非常重要的一部分,它是所有游戏功能的开关,上面集合了许多的图像用户接口,客户端的实现应该确定一种合理的组织架构。 游戏客户端采用swing组件开发,并且向其注册监听器,以实现各种控制功能,综合游戏前面的设计,客户端上至少要注册四个监听器,分别是窗口监听器(WindowListener)、动作监听器(ActionListener)、键盘监听器(KeyListener)、选项监听器(ItemListener)。 根据初步设计,可以确定客户端上所要用到的Swing组件对象有JFrame对象、JPanel对象,JLabel对象、JButton对象、JMenuBar对象、JMenu对象、JMenuItem对象、JTextField对象、JTextArea对象、JDialog对象、JRadioButton对象、JTabbedPane对象,至少十二个swing组件对象。 JFrame用以创建窗体,即游戏的整个游戏界面。在主界面上,可以确定有三个JPanel对象。第一个JPanel对象是用来绘制方块的游戏地图,第二个JPanel对象是用来排列其它各种组件的容器组件,做游戏信息显示面板,可以放在游戏地图的左边,第三个JPanel对象是用来显示NEXT方块的,应该画在第二个JPanel对象上。 综合以上信息,可以大概确定本游戏的主界面,如图3.1所示: 图3.1 游戏主界面结构图 第 11 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 主界面上,本游戏的按钮有四个,一个“开始游戏”按钮,一个暂停游戏按钮,一个结束当前游戏按钮,一个退出程序按钮。排列在游戏信息显示面板上,可以将“开始游戏”按钮放在顶端,当按下“开始游戏”按钮后,应该改变“暂停游戏”按钮为激活状态,按下“暂停游戏”按钮后,再将其文本内容设置为“继续游戏”。 本游戏主界面上的JLabel对象至少应该有四个。首先,应该为NEXT方块画布添加一个标签,然后,在显示分数的文本框上方也应该添加一个标签。最后,在游戏主界面的顶端要添加一个菜单栏,菜单栏上添加几个菜单对象。 2、主模块—方块与地图模块设计 方块与地图模块是游戏中最主要的模块,本模块存储了游戏最重要的两个数据结构——方块四维数组和地图坐标二维数组,以及对这两个数据结构的操作。这些操作就构成了游戏中最基本也是最主要的功能,如得到方块、方块的翻转移动、满行消除等等。 如何将方块绘制到地图中去,可以说是游戏主模块中最大的难题,有了良好的方块数据结构和地图数据结构,这个难题也就变得简单了。只要得到方块数组在游戏地图中的坐标,然后遍历方块数组,将方块数组中值为1的地方绘上一个单位的正方形格子,方块数组遍历完毕后,也就在地图上绘制出了形状不规则的方块。 本模块中方块的数据结构用一个四维数组存储,数组的第一维代表方块的形态,即是哪一种方块,第二维代表某种方块的一个翻转状态,第三和第四代表的是具体的方块。 例如,定义一个四维数组,int block[blocktype][turnstate][i][j],这就是七种方块、四种状态,一共二十八个方块的模型。当然,这其中,有一些方块的几种翻转状态是一样的,比如,长条形的方块,只有两种翻转状态,田字形的方块,只有一种翻转状态,这些方块在方块数组中存储的多种状态也就是一样的。 良好的数据结构让方块的移动,满行消除等操作变得简单。方块的移动和满行消除,涉及到的是对游戏地图数据的操作,例如方块往下移,需要将游戏地图的横坐标也随着往下移动一个单位,往左往右移动也同样如此。 方块满行消除,需要遍历游戏地图数组,发现某一行数值全为2,即认为这一行被方块填满,应该消去,行消去之后,应该把这行以上的数据全部向下移动一行,然后再继续往下检测,有满行就消行,再把上面的数据整体往下移动一行,如此重复,直到将所坠下方块占据的行数检测完为止。最后得到的就是消行之后方块的堆积状况和游戏地图数据了。本模块的主流程图如图3.2所示: 第 12 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 开始 游戏开始 升级到 下一关 初始化屏幕 结束 是 否 游戏是否结束 产生新方块,并产 生新的NEXT方 块 接受控制信息 否 是 分数是否达 方块是否 到设定值 能够移动 是 否 是 越界自 是 移动后 动纠正 是否越界 否 移动方块 计算 否 得分 方块是否 已落下 是否能 是 是 删除满够消行 行 否 图3.2 方块地图流程图 (1)得到方块 游戏中当方块落下后得到一个新方块,显示在游戏地图中,接着得到一个 NEXT方块,显示在NEXT方块画布中。这里,将要解决的问题就是怎么得到一个 新方块,怎么得到一个NEXT方块,又怎么将NEXT方块作为下一个新方块。 方块是有模型和颜色的,在得到一个方块前,还得先得到要出现的方块的模 型和颜色,然后才能在画布中绘制出指定模型、指定颜色的方块。 第 13 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 1( 方块的模型 每得到一个新方块,都是随机从七种形态的方块中选取一种。由概要设计中可以得出分析,可以定义一个变量,代表新方块的模型。比如定义int型变量blocktype代表方块模型,方块的模型只有七种,所以blocktype的取值也只有 ,即,0<=blocktype<=6。 七个,可以设定blocktype取值从0到6 那么,当方块落下需要得到新方块时,只需随机得到一个blocktype值,然后再把这个blocktype值赋给方块数组的第一维即可。 剩下的问题就是应该怎么随机到一个blocktype,JAVA语言包中的Math类提供了一个换取随机数的方法random(),调用这个方法会产生一个值在0-1之间的双精度浮点数。所以每次要得到新方块时,只需调用一次这个方法,得到一个0-1的双精度浮点数,然后把这个数乘以一个稍大的整数,比如1000,得到的结果除以7,然后取余,最后将余数取整,取整后的结果就是一个大于等于0,小于等于6的blocktype值了。 2( 如何得到一个新方块 在随机出一个新的blocktype值后,要得到新方块就变得非常简单了,只需要将blocktype值传递给方块数组的第一维,同时把随机出的Color对象也传递过去,这样,就可以用得到的颜色画出指定形状的方块了。 3( 如何得到NEXT方块 同样NEXT方块的形状和颜色也可以用上面的方法,然后在NEXT画布中绘制出得到的方块。剩下的任务就是怎么将现在的NEXT方块变成下一次出现的新方块的问题。 既然NEXT方块的blocktype值和color值已经得到,这个问题其实也就不难解决了。在得到新方块时,只需要将NEXT方块的blocktype值赋给新方块的blocktype,将NEXT方块的color值赋给新方块的color,然后再改写NEXT方块的blocktype和color,这个问题就解决了。 图3.3是得到方块的算法流程图: 绘制NEXT方块 开始 新方块接受控制信息 游戏开始 绘制新方块 结束 图3.3 得到方块算法流程图 第 14 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) (2)方块的移动和翻转 方块的翻转与移动比较容易实现,方块移动只需要改变方块的横坐标或纵坐标,然后重新绘制方块即可。方块翻转也只需要改变方块数据第二维turnstate的值,然后重新绘制方块即可。但是,这里边也会出现一个问题,这何种时候,方块不能再翻转和移动, 方块的移动 很显然,当方块移动到地图的左右边界处,或者落下去后,不能再继续移动;另一种情况就是,当方块要移动的方向被其他方块挡住时,方块不能再移动。 确定方块移动的规则后,接下来就是如何将这种规则用算法表示的问题了。比如,当方块移动的左边界处时,方块不能再继续往左移动了,这个时候,肯定有一个条件成立,那就是方块的横坐标必定是小于或者等于零的。 如果方块的横坐标等于0,方块就不能再移动,那么方块数组的第一列至少有一个值为1,这种情况比较简单,但是,如果方块数组的第一列全为0时,也就是说,当方块数组有1的那列碰到边界时,方块才不能移动,这个时候,首次 ,而方块数组的横坐标肯定已经小于0了。 出现1的那列的横坐标为0 假定我们以x记录方块数组的横坐标,以j记录方块不能移动时,方块数组中首次出现1的那列,当方块不能移动时,x+j的值必定是等于0的。 同理,当方块到达右边界不能移动时,我们可以从方块数组的右边开始检测,记录下首先出现1的那列的值,这个时候,x+j一定是等于14的。 当方块落下后,方块同样不能再移动。这又分为两种情况,一种是要坠下的地方还没有方块,这个时候,只要可以记录下方块数组中最后出现1的那一行,假定那是第i行,这样,只要y+i等于24,就可以认定方块已经落到游戏地图的底部,不能再继续下落。 当要方块下边或者左右有方块时,可以确定下边有方块的那一格在游戏地图中的纵坐标是横坐标或纵坐标是x+j+1或者y+i+1,假定那一格的纵坐标坐标或者横坐标为y或x,那么游戏地图数组中[x+j+1][y]或者[x][y+i+1]这个元素的值必定是2。 那么,方块的移动条件规则判定方法如表3.4 1 2 3 4 5 6 7 8 是否有阻隔 T T T T T T T F 条 x+j=0||gamearea[y+i][x+j+1]=2 T F T T T F T 件 x+j=14||gamearea[y+i][x+j-1]=2 F T F T F T T y+i=24||gamearea[y+i+1][x+j]=2 F F F F T T T 动 左移动 ? ? ? 作 右移动 ? ? ? ? 下移动 ? ? ? ? ? 表3.4 方块移动条件规则判定表 第 15 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 方块的翻转 大多数的俄罗斯方块游戏的翻转判定条件都比较简单,即方块处在边界处时就不能再翻转,因为这种时候翻转会发生数组越界错误。试想一下,当方块移动到边界处,甚至还没有到边界处时,就不能再翻转了,无疑会给操作带来大大地不方便性。 方块翻转的另一个问题就是,当方块下落过程中,左右两边都有方块,周围的空间不能再容许它翻转,往往很多游戏没有注意到这一点,这就导致,方块翻转之后把原来存在的方块给挤掉了,这个问题本质上也是翻转越界。 为了解决以上问题,游戏设计中应该增加一个对于方块能否翻转的判定以及翻转越界纠正功能。 1.方块翻转判定 如上所述,在两种情况下一种是方块落下去固定住以后,第二种是周围的空间不允许它进行翻转。第一种情况好办,只要参考方块落下去后不能够再移动的判定即可。 对于第二种情况,在每次方块翻转前,必须首先计算出方块周围的空间,如果空间允许则翻转,否则,不能翻转。 这里面又出现一个棘手的问题,因为七种方块是不规则的,每种方块要求的翻转空间都是不一样的,甚至是在它的不同翻转状态下,所要求的翻转空间也是不一样的,首先想到的自然就是为每一种方块,方块的每一种状态都写一个判定条件,然后根据当前的blocktype和turnstate值,选择哪种判定条件进行判定,但是这样做未免过于麻烦。 根据观察,不难发现,七种形态的方块,长条形的方块如果以横条的形态下落,则只有能够下落,就能翻转,如果以竖条的形态下落,那么它翻转后所处的位置必须要有4x1个格子的空间才能够翻转;对于田字形的方块,只有能够继续下坠,就一定能够翻转,所以田子型的方块只要没有落下,就一直能够翻转;而其它五种形态的方块,又有一个共同点,就是它们都有两种翻转状态横向占三个格子的空间,竖直方向占两个空间,另外两种翻转状态横向占两个格子的空间,竖直方向占三个格子空间,如果他们是以横向占三个格子的状态下落,那么只要能下落,就一定能够翻转,如果是以横向两个格子的状态下落,那么在翻转后,周围必须要有3x2个格子的空间。 所以,方块翻转的判定,要分三种情况。第一种情况是方块落下去后不能翻转;第二种情况是对竖直状态出现的长条形的方块进行翻转判定;第三种情况是对除长条形和田字形之外的其它五种以横向占两个格子的状态出现的方块进行翻转判定。 何种情况下方块能够翻转的问题解决了,接下来,我们就应该解决方块翻转后所处的位置的问题了,因为只有事先知道方块翻转后所处的位置,才能够对那个位置的空间范围进行判定,判定它是否能够容纳方块。 可以确定的是,无论方块怎么翻转,都处在方块数组中,也就是说方块必定是在游戏地图中某一4x4个格子的空间范围内。 方块数组在游戏地图中的坐标是确定的,不确定的是方块翻转后到底处在方 第 16 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 块数组的哪个位置,为了解决这个问题,我们可以限定方块在方块数组中的存储原则是靠左、靠上,这样,无论翻转怎么翻转,方块数组中第一行和第一列都是有方块的,这样也就确定了方块在方块数组中的位置,也就可以得知方块翻转后在游戏地图中的位置了。 ,那么,这个位置就是,长条形的方块翻假定方块数组的横纵坐标是x和y 转后所处的那一行是游戏地图的第y行,所占的列是第x到x+3列,长条形和田字形以外的五种方块翻转后的所占的行数是游戏地图的第y和第y+1行,所占的列是第x到x+2列。所以,如果以上空间有空格子,方块就能够翻转。 据此,我们可以列出方块翻转的条件判定表,如表3.5所示: 1 2 3 4 5 6 7 8 落下 T F F F F F F F 田字形方块 T 所 有 长条形方块 1x4形态 T T 条 4x1形态 T 件 其它五种 2x3形态 T T 方块 3x2形态 T 第y行, x、x+3列空 T F 第y、y+1行x、x+2列空 T F 所有 翻转 ? ? ? ? ? 动作 不能翻转 ? ? ? 表3.5 方块翻转条件判定表 2(翻转越界纠正 由上述判定表可以看出,只要方块翻转后所处的空间足够,方块就能够翻转,但是,如果方块翻转后所处的空间不足够,而在它的另一边却有足够的空间呢, 比如,一个方块在它左边正好差一个格子的空间才能够翻转,但是它的右边恰好有一个格子的空间,这种情况,如果方块不能够翻转,就不方便用户操作,如果能够翻转,就会发生越界,将已经存在的方块挤占掉。要想实现翻转又不发生越界,那么,就应该在方块翻转后把它往右边移动一个格子,然后再绘制方块,这样,方块就不会挤占掉其它已经固定住的方块了。 同样,方块在边界处时,翻转后不仅可能翻出地图外,还可能发生数组越界,当然,只需要将地图数组定义得大一些,就能够避免数组越界错误,对于方块越界,如果在它的另一边有足够空间,那么,就应该把方块往另一个方向移动适当的单位,纠正方块越界错误。 结合上述,可以列出方块翻转-越界纠正判定表,如表3.6所示: 方块翻转处理的流程图如图3.7所示: 第 17 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 落下 T F F F F F F F F F F 田字形方块 T 所 长条形方块 1x4形态 T T T T 有 4x1形态 T 条 其它五种 2x3形态 T T T T 件 方块 3x2形态 第y行, x、x+3列空 T F F F 第y、y+1行x、x+2列空 T F F F 另一边有足够空间 T F T F 翻转 ? ? ? ? ? 所有 不能翻转 ? ? ? ? 动作 翻转越界纠正 ? ? 表3.6 方块翻转-越界纠正判定表 结束 接收到翻转信息 是 方块是否落下 不能翻转 否 否 翻转后是否有足不能翻转 够空间 是 否 翻转后是否越界 直接翻转 是 翻转越界纠正 结束 图3.7 方块翻转处理流程图 第 18 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) (3)满行消除 JAVA图形类中提供了一个方法,copyArea(int x, int y, int width, int height, int dx, int dy),这个方法的作用是将组建的某一区域复制到由dx和dy指定的水平距离和垂直距离所在的区域。利用这个方法,可以消除满行。 那么,当方块落下去后,如何判断有行需要消除呢, 如概要设计中所述,游戏地图中有方块的区域可以用2表示,当方块落下去后,判断某一行是否全部为2,如果全为2,即表示这一行已满,需要消除,这个时候,就可以利用copyArea这个方法将这一行消去了。 消去一行后,要继续向下检测,如果下一行是满行,消除,否则再往下检测,一直将落下的方块所占的行数全部检测完为止。 假定,以竖直状态落下一个长条形的方块,很显然,方块一共占据了四行。这时候,应该从长条形的方块占据的第一行开始检测,不管期间是否有消行,都必须将长条形的方块所占据的四行全部检测完为止。并且记录下消去的行数,方块消行完成后,增加相应积分。 但是,这里面又会遇到一个问题,因为并不是所有方块所占的行数都一样,方块落下后到底该检测多少行呢,考虑到方块落下后最多占据四行,以及计算机运算的高速性,可以设定每一次方块落下后都往下检测四行。 方块消行的流程图如图3.8所示: 开始 方块落下 结束 检测第一行 是 统计所消行数,是否有消行 消去该行 增加相应积分 否 检测第二行 消去该行 消去该行 是否有消行 是 否 是否有消行 检测第三行 否 是 检测第四行 是否有消行 消去该行 图3.8 方块消行流程图 第 19 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) (4)升入下一关 当游戏分数达到一定值后,游戏将会自动进入下一关。升入高一级别的关卡后,游戏难度会随之增加,表现在方块下落的速度会加快,旋转方块出现的几率会提高,在游戏的底部会生成一定数量的小正方形方块。 1(升入下一关 每一次消行增加得分后,检查游戏的分数是否达到设定的值,如果达到设定值,则游戏关数别提升1,这个时候应该立即结束当前关卡的游戏,提示用户过关信息,当用户确认后,重新初始化游戏,进入下一关进行游戏。 2(加快方块下落速度 可以用一个变量记录当前游戏的关数,假定定义整型变量level代表游戏的关数,每一次,分数达到设定值后,level要自加1,重新初始化游戏时,应该根据这个level得到新的定时器休眠时间值,方块下落的速度也就随之改变了。 (提升旋转方块出现的几率 3 同样,旋转方块几率的提高也可以用如上方法得到一个新的旋转方块控制线程休眠时间值,旋转方块出现的几率也将随之提高。 第 20 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 第四章 游戏测试 1、黑盒测试 黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。黑盒测试法注重于测试软件的功能需求,主要试图发现下列几类错误。 , 功能不正确或遗漏; , 界面错误; , 性能错误; , 初始化和终止错误等。 2、测试及结果 (1)游戏界面菜单选项功能测试 名称 输入 输出 结论 游戏开始 点击“开始”按钮 游戏开始 正常 游戏暂停 点击“暂停”按钮 游戏暂停 正常 游戏结束 点击“结束”按钮 弹出结束对话框 正常 游戏帮助 点击“帮助”按钮 弹出帮助对话框 正常 (2)按键事件功能测试 名称 输入 输出 结论 游戏过程中,点击方块移动 方向控制测试 正常 “下左右”键 不出边界 游戏过程中,点击不出边界 翻转测试 正常 “上”键 正常翻转 点击“设置”“游键位自定义测试 自定义按键可用 正常 戏界面”设置按键 (3)方块堆砌与消行测试 名称 输入 输出 结论 方块下落到底层方块成功堆砌在堆砌方块测试 正常 或与障碍物解除 上面 所有满行被消除 消行测试 出现满行现象 正常 方块下移到底部 第 21 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) (4)界面美化测试 名称 输入 输出 结论 点击“设置” “游一共可以选择6种 背景样式测试 戏界面”“主题”背景样式或自定正常 “背景样式” 义背景颜色 点击“设置” “游可以选择4种方块 方块样式测试 戏界面”“主题”样式或自定义方正常 “方块样式” 块颜色 游戏区和下一个点击“设置” “游添加网格测试 方块预览区均可正常 戏界面”“游戏” 设置网格 3、结果分析 经过测试,本游戏实现了基本的功能,完全能够正常运行。至此,游戏初级版本的开发工作结束,不过整体功能还不是很强大,作为开发的第一个版本,游戏在很多方面还需要进一步完善。 第 22 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 结 束 经过两个月的努力,本游戏的开发工作至此告一段落,游戏能够正确运行,虽然说本游戏还只是一个初级产品,但是比起很多俄罗斯方块游戏,它的功能算是比较丰富的,界面也具有一定的美观度,可以说取得了初步性的成功。 游戏设计与实践是一项复杂而且庞大的工作,在选题之后,我才意识到过程的艰难,因为以前从来没有接触过游戏设计,刚开始时有点迷茫和彷徨。后来通过看书和在网上查找资料,逐渐找到了一些感觉,也依照资料自己动手编写了几个简单经典的游戏。本文仅以俄罗斯方块为例予以说明。 本次设计让我初步懂得了电子游戏所涉及到的有关技术、方法,包括电子游戏分类、选题、构思等。并实现几个可演示的游戏软件,其中有很多应用了学习的相关技术,并且做到了图、文、声并茂,能实际演示。此次设计过程中印象最深的收获有:1、学到了很多新知识,并且对老知识进行了回顾。经过长时间的学习,更进一步熟悉了Java语言。2、通过不断上机实验,调试程序,总结经验,从对课题的不理解到能够开始动手去做,提出问题并自己想办法解决问题,自己 、提高了中、英文资料的检索能力。这次毕业多实践,所以增强了动手能力。3 设计过程中我查阅了很多资料,不但有图书馆的期刊、杂志、馆藏图书,还有网络中的电子文档、电子书籍、网页及下载的视频教学课程;不但有中文资料还有英文资料。这些资料,使我的眼界更开阔,对课题的认识更加深刻,编写程序的时候思路更加清楚,少走了很多弯路。 但如果真的要从事游戏设计的工作,需要走的路还很长,即便是对于国际知名的大公司,也是在不断的探索和实践中前进。但这并不表明前途就是渺茫的,通过这次实践,进行了一次从底而上和自上而下的归纳和演绎的过程,在变化多端的游戏面前,总算领悟了一点它的奥妙。内容繁复、采用的表现手段多姿多彩的游戏世界,即便是再复杂,也可以通过一定程度的归纳演绎得出适应其规则和表现的契合点。 回顾这个设计过程,我学到了许多书本上没有学到的知识。通过这次自己制作的软件,丰富了自己的实践技能,扩展了本专业的知识面,使我受益非浅,同时也体验到了搞软件开发的困难度。在这次设计的同时,我又从中学到了许多东西。但由于我对这样的软件开发还只是一个开始,了解的不多,这其中或许还有很多的不足,有些模块做得不是很好,有些功能还不能够完全的实现,界面的设计及整体的布局还比较简单,没有突出特色出来,这也可能是我这个游戏的不足之处。 第 23 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 致 谢 毕业设计是大学里的最后一堂课,从开始进入课题研究到论文顺利完成的两个周的时间里,我经历了大学期间最为难忘的一段时光。在这段时间里,我学到了很多以前不曾接触的东西,这两个月经历对我未来的人生都会有很大的帮助和影响。 首先衷心感谢我的指导老师张倩老师给予我的无微不至的关怀和细心的指导。在设计过程中张倩老师为我提出了许多宝贵的意见和建议,在此我要由衷的向张倩老师致以最衷心的感谢和深深的敬意。 在此过程中同学们也给予我很大帮助,感谢我的同学们。在我遇到的一个又一个问题时同学们都热心的帮助我,帮我分析和我探讨,提出了许多解决问题的好方法和建议,使我最终解决了一个又一个问题,感谢我的同学们。 由于我的学识有限,加之时间仓促,文中不免有错误和待改,不足之处,真诚欢迎各位师长、同学提出宝贵意见。最后,祝愿所有的教师和同学们,愿你们身体健康,工作顺利~ 第 24 页 共 25 页 重庆工商大学派斯学院(专)科毕业设计(论文) 参考文献 [1] 罗伟坚著.Visual C++经典游戏程序设计[M].北京:人民邮电出版社,2006.2 [2] 朱福喜著. Java程序设计技巧与开发实例[M].北京:人民邮电出版社,2004.2 [3] 赵东跃著.俄罗斯方块编程[M].电脑编程技巧与维护,1998年第六期 [4] 陆惠恩著. 实用软件工程[M].北京:清华大学出版社,2006.5 [5] 黄复贤著.俄罗斯方块游戏的敏捷设计与开发[M]. 电脑编程技巧与维护,2005.4 [6] (美)Bruce Eckel著,陈昊天 译.Java编程思想[M].北京:机械工业出版社,2007.6 [7] 高凌琴,陈青华 著. 俄罗斯方块游戏关键技术探讨[M].信息技术与信息化研究探讨,2008年第二期. [8] 王宇,战学刚,高国伟著. 计算机算法解决俄罗斯方块中的数学与计算问题[M].计算机应用与软件,第二十四卷第三期,2007.3 . [9]朱福喜,黄昊著. Java项目开发与毕业设计指导[M].北京:清华大学出版社,2008.6 [10] 郑人杰,殷人昆,陶永雷著.实用软件工程[M].北京:清华大学出版社,2004.11 第 25 页 共 25 页
本文档为【JAVA俄罗斯方块毕业论文】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_574951
暂无简介~
格式:doc
大小:81KB
软件:Word
页数:34
分类:工学
上传时间:2017-10-06
浏览量:17