首页 基于JavaGUI的俄罗斯方块的设计与实现论文

基于JavaGUI的俄罗斯方块的设计与实现论文

举报
开通vip

基于JavaGUI的俄罗斯方块的设计与实现论文基于JavaGUI的俄罗斯方块的设计与实现论文 职场大变样社区(www.zcdby.com):下载毕业设计成品 全套资料,全部50元以下 题目:基于JavaGUI的俄罗斯方块的设计与实现 学 生 姓 名 学 号 班 级 所属院(系) 指 导 教 师 2016 年 5 月 17日 毕业设计(论文)任务书 专业: 时间: 学 生 姓 名 指 导 教 师 基于JavaGUI的俄罗斯方块的设计与实现 设计(论文)题目 1、对Java编程语言的学习与研究,深入了解Java语言编程的运行与实 现方法...

基于JavaGUI的俄罗斯方块的设计与实现论文
基于JavaGUI的俄罗斯方块的 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 与实现 论文 政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载 职场大变样社区(www.zcdby.com):下载毕业设计成品 全套资料,全部50元以下 题目:基于JavaGUI的俄罗斯方块的设计与实现 学 生 姓 名 学 号 班 级 所属院(系) 指 导 教 师 2016 年 5 月 17日 毕业设计(论文)任务书 专业: 时间: 学 生 姓 名 指 导 教 师 基于JavaGUI的俄罗斯方块的设计与实现 设计(论文)题目 1、对Java编程语言的学习与研究,深入了解Java语言编程的运行与实 现方法; 2、研究Java语言的行业现状,分析其优势与弊端; 3、研究目前我国电子游戏的行业现状,分析其发展方向; 主要研 4、研究Java语言在游戏编程方面的应用; 究内容 5、了解C语言、PHP语言等其他编程语言,并与Java语言对比,分析其 优点与劣势; 6、用Java语言设计并实现一个项目。 1)理论研究方法:通过网络与图书馆相关资料文献,结合案例进行分析并进 行相关方向的研究。 研究方法 2)实证研究方法:运用所学知识,独立设计一个Java项目,并使之运行实现。 设计俄罗斯方块游戏,在eclipse环境下,运用java.awt、javaswing、键盘监听、线程等技术进行实现 主要技术 1) 能够按照任务和要求完成毕业设计; 指标(或 2) 毕业设计说明书紧扣课题,内容严谨,联系实际; 研究目 3) 开题 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 和毕业设计说明书的格式要符合要求; 标) 4) 毕业设计说明书字数不少于15000字,装订 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 。 [1] 朱福喜 黄旻.Java项目开发与毕业设计指导[M]. 北京:清华大学出版 社,2008.6,2-5. [2] 张海藩.软件 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 导论(第四版)[M]. 北京:清华大学出版社,2007.5, 45. [3] Karl E.Wiegers.软件需求[M]. 北京:清华大学出版社,2004.11,主要 221-227. [4] 蔡敏 徐慧慧 黄炳强.UML基础与Rose建模教程[M]. 北京:人民邮电出参考 版社,2006.12,76、114、115、162. 文献 [5] Joseph Schmuller.UML基础、案例与应用[M]. 北京:人民邮电出版社, 2007.1,5-7. [6] Bruce Eckel.Thinking in Java,Third Edition [M]. USA: Prentice Hall PTR, 2003.8,487-495. 基于JavaGUI的俄罗斯方块的设计与实现 摘要 在全面实现现代化的今天,电脑、手机等各种电子产品已经逐渐成为我们生活之中不可或缺的一部分,而伴随着电脑、手机等电子工具的普及,电子游戏游戏也越来多的出现在我们的生活中,它可以使人心情愉悦,调剂我们的生活,尤其在工作、生活压力不断提高的现代,适当的游戏,对调节心情、排解压力,有着不可替代的作用,因此,我这次毕业设计选择了用Java语言设计一款俄罗斯方块游戏。 俄罗斯方块,英文名Tetris,它是由俄罗斯人阿列克谢.帕吉克诺夫于1986年6月发明的,作为最为经典的益智休闲游戏之一,它由于规则简单,但每次游戏却都有不同的体验而深受全世界人民的喜爱。我这次设计开发的程序,在大体上保持了经典俄罗斯方块操作简单,用户体验性强的特点,并在原有基础上增加了调节难度、暂停游戏等功能,同时显示下一个出现的方块,使游戏更好地适应于不同玩家对游戏的功能需求的差异,提高了用户体验度。 关键词:俄罗斯方块、体验度、游戏开发 1 ABSTRACT In the full realization of the modernization of today, computers, mobile phones and other electronic products has gradually become a part of our lives indispensable, and with the popularity of computers, mobile phones and other electronic tools, electronic games is becoming more and more appear in our life, it can make people feel happy, adjust our life, especially in the modern work and life pressure increasing, the appropriate game, to adjust the mood, relieve the pressure, irreplaceable role,Therefore, I chose the graduation design with the Java language, a Tetris game. Tetris, Tetris, it is by the Russians Alexey. Invented by Patrick Lyapunov in June 1986, as one of the most classic puzzle casual games, it due to the simple rules, but every game but have different experience and loved by the people all over the world. I the design and development process and in general keep the classic Tetris operation simple, user experience strong characteristics, and on the basis of the original increase the difficulty adjusting, the ability to pause the game, also shows that under a box, make the game better adaptation to different players the function demand of the game differences, and improve the user experience. Key words: Tetris, Experience degree, Game Develop 22 目录 第一章、 绪论 1.1、选题的目的与意义 1.1.1、选题的目的 1.1.2、现实意义 1.2、国内外研究现状分析 1.2.1、国外研究现状分析 1.2.2、国内研究现状分析 第二章、 项目的可行性分析 2.1、引言 2.2、技术可行性分析 2.3、经济可行性分析 2.4、操作可行性分析 2.5、法律可行性分析 第三章、 需求分析 3.1、引言 3.2、开发意图 3.3、游戏功能需求 3.3.1、界面需求 3.3.2、内容需求 3.3.3、操作需求 3.4、技术需求 3.4.1、JavaGUI编程 3.4.2、Java线程模式 3.4.3、Java监听器 3.5、配置需求 第四章、 项目总体设计 4.1、总体设计概述 33 4.2、总体设计思想 4.2.1、系统界面的设计 4.2.2、方块产生的设计 4.2.3、方块显示的设计 4.2.4、方块移动的设计 4.2.5、方块旋转的设计 4.2.6、方块障碍的设计 4.2.7、方块消行的设计 4.2.8、游戏分数和等级的设置 4.2.9、键盘按键设置 4.3、系统类图 4.3.1、模块图 4.3.2、界面类图 4.3.3、功能类图 4.4、系统流程图 4.4.1、游戏总体流程图 4.4.2、方块运动流程图 4.4.3、方块消行流程图 第五章、 各功能详细设计与实现 5.1、项目总体概述 5.2、各部分的功能的设计与实现 5.2.1、主界面的设计与实现 5.2.2、游戏方块产生的设计与实现 5.2.3、方块运动的设计与实现 5.2.4、方块障碍的设计与实现 5.2.5、游戏控制的设计与实现 5.2.6、游戏拓展功能的设计与实现 第六章、 系统测试 44 6.1、测试概述 6.2、界面效果测试 6.3、方块效果测试 6.4、分数、等级测试 6.5、其他测试 第七章、 结论 55 第一章、绪论 1.1、选题的目的与意义 1.1.1、选题的目的 本次毕业设计的目的是实用Java语言设计一款面向大众化,受大家欢迎的俄罗斯方块游戏。 1.1.2、现实意义 在全面实现现代化的今天,电脑、手机等各种电子产品已经逐渐成为我们生活之中不可或缺的一部分,而伴随着电脑、手机等电子工具的普及,各种电脑、手机软件运营而生,这些软件功能涉及我们生活的方方面面,而电子游戏,就是其中不可或缺的一部分。游戏是我们日常生活之中不可或缺的一部分,它可以使人心情愉悦,调剂我们的生活,尤其在工作、生活压力不断提高的现代,适当的游戏,对调节心情、排解压力,有着不可替代的作用,因此,设计一款面向大众化,老少皆宜的电子游戏,就比较重要了,因此,我这次毕业设计选择了用Java语言设计一款俄罗斯方块游戏。 俄罗斯方块,英文名Tetris,它是由俄罗斯人阿列克谢.帕吉克诺夫于1986年6月发明的,作为最为经典的益智休闲游戏之一,它由于规则简单,但每次游戏却都有不同的体验而深受全世界人民的喜爱。截止2009年,俄罗斯方块就已经发行了1.25亿份,有50多种语言版本,运行在十多种平台上,从掌机、街机到电脑、手机,都可以看到它的身影。而我这次选择俄罗斯方块,根据软件工程的有关规范,设计一种适应于广大群众,受大家喜欢的俄罗斯方块,对大家日常游戏生活带来更多的欢乐与享受。 1.2、国内外研究现状分析 1.2.1、国外研究现状分析 Java语言是一种面向对象平台动态语言,它有性能稳定、安全、结构中立、可移植性强、适应于多种环境开发等多种优势而深受广大程序开发者的喜爱。因此,在1995年被sun公司推出后,全世界程序开发者的目光都被这种神奇的编程语言所吸引,程序员们纷纷使用这种语言编写程序,并推广到世界各地,包括IBM、 66 微软、Oracle、Netscape等众多世界型企业都与sun公司签订合作,目前,JAVA语言已经成为世界最流行的网络编程语言。 电子游戏是诞生于1952年,距离世界上第一台电脑的诞生不足十年,然而在上世纪八十年代末期,随着强大的电脑显卡出现,才开始渐渐崛起,时至今日,电脑游戏已经进入了万花竞艳的时代,各种单机、网页、网络游戏成出不穷,而在2009年,苹果扩展了手机游戏市场,之后随着Android手机系统的迅速崛起,也给电子游戏市场带来了新的商机与活力。 1.2.2、国内研究现状分析 目前我国程序开发正属于快速发展的时代,各种软件开发能力飞速猛进,但是不可否认,目前国内外程序的发展水平还是有一定的差距,最直接看来,从方法论到各种框架,再到新兴的众多编程语言,每一轮新技术的发起者都是外国的个人或公司,而我国的程序开发,大多数时候都是处于一种“跟随者”的状态,电子行业飞速发展,而在许多关键性的技术都显现出原创性的缺失;而且在国外,有许多中立机构会进行数据收集,并制定各种编程规范,而在我国暂时还缺少相应的机构,这样导致了在编程方面,国内许多机构存在不同的编程规范,这样的问题在单个项目中提现的并不明显,但从整体上来看,却是确确实实的差距。 俄罗斯方块作为一款非常经典的益智休闲游戏,目前国内的各大游戏网站都有相对应游戏,对比腾讯、新浪、中国游戏中心等游戏平台,其中以新浪iGame平台上的俄罗斯方块在游戏界面、功能方面都有创新和突破,而随着手机游戏市场的快速发展,也给俄罗斯方块游戏带来了新的活力。 第二章、项目的可行性分析 2.1、引言 系统程序编程中最重要的就是用户体验度,其中包括了用户对于软件产品的操作性能,页面美观程度,以及反馈的及时性都有一定的需求,本次毕业设计软件遵循软件工程规范,主要实现在Windows系统下的JavaGUI开发,使用布局管理器美化系统效果,对图形使用键盘控制,充分发挥经典游戏俄罗斯方块操作简便,用户操作性强,功能扩展方便等优势,下面通过技术可行性、经济可行性等几个 77 方面对此次项目的可行性进行分析: 2.2、技术可行性分析 本次软件主要采用Java语言进行编程,在Windows系统下eclipse开发平台,主要考虑到Java语言对GUI开发需求功能的封装,降低开发难度和开发成本,提高开发效率。 Java作为一种程序语言是一种简单、面向对象、运行稳定的编程语言,经过十多年的发展,Java语言已经是一种非常成熟的编程语言,可以很好的适用于程序项目的开发。对于GUI开发,Java在JDK的Java.awt包中封装了Window、Menu、Label、Button等抽象类,这些抽象类定义了GUI组件的许多功能和特性,方便Java程序员对GUI程序的开发。 2.3、经济可行性分析 本次毕业设计所开发的俄罗斯方块游戏,其主要目的是丰富人们的业余娱乐生活,规模适中,工作复杂性较低,从人力、物力、时间上讲,开发所需的成本比较低,而且eclipse开发平台的开源性,以及Java语言对GUI功能类的封装,大大降低了开发的复杂性,提高了开发效率,而且在后期维护上的成本和复杂程度也有一定性的降低,而且这次开发出来的系统也有一定的实用性和现实意义,所以从经济的角度来看也是可行的。 2.4、操作可行性分析 本次项目在页面部分是采用Java的GUI组件来创建用户操作界面,简洁明了的界面风格,并且使用java.awt.event接口KeyListener键盘监听事件控制游戏操作,Runnable线程来实现控制方块下落速度,所有功能都按照基本需求进行开发,着重于用户体验度,适应用户的操作需求,提高程序的完整性和合法性,因此,从用户操作的角度来说也是可行的。 2.5、法律可行性分析 本次毕业设计程序的开发着重在于对能力的提高和对所学知识的综合应用能力,以个人为研发单位,研发出的产品仅供个人娱乐用,不进行盈利活动,并且在本次研发过程中所用到的其他人劳动成果和参考文献都已标出,不会产生社会问题,在法律方面也是可行的。 88 第三章、需求分析 3.1、引言 需求分析是正式进入程序设计前的最后一步,其关键在于对项目中出现的问题进行详细分析,明确自己将要干什么,要做到什么样的效果,要做到这样的效果需要些什么,目的在于对系统需要完成那些目标进行清晰明确的定义,也是项目进行成功与否的关键所在,直接关系到了项目的成功与质量。需求分析明确了项目的开发目标,定义了项目的开发规范,有利于项目开发的控制和监管,提高程序质量。 3.2、开发意图 作为对俄罗斯方块这样一款非常经典的电子游戏,本次开发的首要目标就是保持其操作简单,游戏可玩性强的优点,延续经典游戏的各功能正常实现,并在原有游戏的基础上对各功能进行拓展和延伸,加入音乐等其他内容,使之成为一款操作简单,内容丰富,适应广泛的游戏软件。 3.3、游戏功能需求 3.3.1、界面需求 一个好的游戏界面可以提高用户的视觉感受,从视觉上来吸引用户。本次项目界面风格保持简洁美观,主要功能一目了然,界面采用360*490的规格,上方游戏菜单内有新游戏等功能,主体界面分左右两部分,左边为游戏的主体部分,显示游戏方块,右边为功能栏,显示分数、等级等数据。 3.3.2、内容需求 这次俄罗斯方块游戏的设计,保持其原有的七种常见的方块类型,并使各方块实现向左、向右、向下移动以及旋转的效果,在方块到达底部或已有方块时,改变方块的颜色。方块的自动下落速度由Java线程来控制,通过不同的方块下落速度,将游戏分为5个不同的等级,可以在主界面进行等级调节,以实现不同人群对游戏难度的不同要求。 在方块达到可以消行的要求时,运行消行代码,移除要消除的方块行,并将上方的方块整体向下移动一行,同时对分数进行增加,达到一定分数后,对等级进 99 行增加,当方块充填到顶部的时候,弹出结束游戏的弹窗,点击菜单栏中的“新游戏”,移除原有方块,并产生新的方块,进行新一局的游戏。 3.3.3、操作需求 此次项目采用键盘和鼠标配合操作,键盘主要控制方块的运动,通过键盘中上、下、左、右四个方向键控制方块旋转和向下、向左、向右三个方向的移动;而鼠标则主要是控制游戏中各功能的实现,如通过点击鼠标实现新游戏的开始,游戏的暂停和继续,以及对游戏等级的调节,并且在游戏主界面中加入方向按钮,是玩家可以通过鼠标点击来直接对方块进行旋转和向下、向左、向右三个方向的移动。 3.4、技术需求 3.4.1、JavaGUI编程 使用Java语言实现俄罗斯方块,主要用到JavaGUI的两大类架包:java.awt和java.swing。awt主要包括创建用户界面和绘制图形的分类,作用是程序界面和方块图形的绘制;swing是用户界面的开发工具包,提供程序中各种工具构建,与awt的重量级封装不同,swing大多采用轻量级封装,适应于程序开发中的不用需求。 3.4.2、Java线程模式 俄罗斯方块充分利用了Java之中的线程模式,在游戏中需要对方块的状态进行实时的改变,并且每个方块都有生命周期,通过线程可以更好地控制方块的下落和其他变动,提高用户体验度。 3.4.3、Java监听器 Java有非常完善且功能强大的监听器功能,通过监听器可以更好进行事件判断,方便程序开发,这次项目中许多地方都运用了监听器,包括方块降落到底部、开始暂停等按钮,以及键盘操作所用到的KeyListener监听器等。 3.5、配置需求 硬件环境:安装内存:2.0G(1.5G可用); 处理器 :Intel(R)Core(TM)i3-2348M; CPU :2.3GHz; 1010 软件环境:Windows操作系统; Eclipse开发环境; JDK1.7版本。 第四章、项目总体设计 4.1、总体设计概述 经过需求分析阶段的准备工作,已经基本确定了本次项目需要实现哪些方面的功能,而在项目的总体设计中,这是对这些需要实现的功能再次进行更加细化的划分,确定每部分功能如何实现。 4.2、总体设计思想 4.2.1、系统界面的设计 在设计中系统界面共分为三大部分,分别是游戏菜单栏、界面操作系统和俄罗斯方块中显示方块的画布。 在游戏菜单栏中,我设计了“游戏”和“帮助”两个选项,“游戏”选项中有 新游戏、暂停、继续、提高难度、降低难度、结束等,主要为新游戏的创建和其他一些系统功能的实现。 游戏界面上的操作系统设置在主界面的右边,主要作用有显示分数和等级,游戏暂停、继续、提高难度、降低难度以及上、下、左、右八个按键,对应游戏暂停和改变游戏等级等功能,并且在界面中加入四个方向按键,以适应不同客户群体对操作的需求。 系统中显示游戏方块的画布位于右边以及中间部分,它的主要作用就是使用Java中的Graphics方法将游戏中的方块绘制出来,并为方块添加色彩。 4.2.2、方块产生的设计 在经典的俄罗斯方块游戏中,共有七种不同形状的方块,而这些方块大多数通过旋转又可变为四种不同形态(长条型方块为2种,田字型方块为1种,其他方块都为4种),在这次的项目中,通过设置七个不同的二维数组,将方块的类型和不同形态都用数组表现出来,每次需要产生新方块的时候,通过方法随机选择七种类型和四种形态之中的一种来产生新的方块。 1111 4.2.3、方块显示的设计 由方块工厂产生新的方块数组,通过Graphics方法在界面中显示,并且每次 方块进行移动,运行Graphics方法绘出新的方块图形。 4.2.4、方块移动的设计 在游戏中方块的移动分为方块自动下落和玩家控制移动,使用类似于浏览器页 面的概念,将方块的移动范围看作一个大的坐标轴,以左上角作为顶点,方块的 每次移动,都可以看作是向下的加一和向左的加一或减一,在方块自动下落的过 程中,方块在线程之中每经过一段时间就向下移动一个;在玩家控制下移动,则 是根据不同操作进行方块位置的改变。 4.2.5、方块旋转的设计 这次项目中以键盘中的向上键进行方块旋转的操作,在产生新方块时,通过一 个二维数组来表示生产方块的类型和状态,玩家进行旋转操作时,通过算法来改 变数组中方块的状态参数,进而使方块的状态发生改变。 4.2.6、方块障碍的设计 在俄罗斯方块游戏中,每个方块下落到底部后,都会固定形态,变为一种类似 于障碍的形式,阻碍其他方块的移动,通过这些方块障碍一层一层的叠加,达到 顶部后,游戏结束。这些方块障碍也是使用数组的形式,每次方块无法继续下落 时,调用方法在数组上加入新的数据,实现方块一层层叠加的效果。在点击进行 新游戏时,则会对数组进行重写,使数组重新开始记录方块数据。 4.2.7、方块消行的设计 在进行方块消行时,先进行判断是否达到消行要求,将符合要求的方块所在行 数传给消行方法,消行方法通过循环将将要消行的方块擦除,同时将进行分数改 变。 4.2.8、游戏分数和等级的设置 本次俄罗斯方块中设定了每消一行增加100分,每增加1000分时,游戏的困 难等级就加一,同时设置了“提高难度”和“降低难度”两个按钮,让玩家可以 根据自身情况灵活的调节游戏难度,游戏等级中最低为一级,最高则为五级,玩 家只能在一到五范围内进行调节,而不能超出设置范围,同时游戏难度达到五之 1212 后将会只有分数进行增加,而级别不会改变。 4.2.9、键盘按键设置 游戏中键盘的设置采用的是继承Java中KeyAdapter类,重写其中的 KeyPressed方法,项目共设置了向下、向左、向右和向上四个键,以分别对应俄 罗斯方块游戏中方块的向下、向左、向右移动和方块的旋转,已达到简化游戏操 作的目的。 4.3、系统类图 4.3.1、模块图 4.3.2、界面类图 1313 4.3.3、功能类图 1414 4.4、系统流程图 4.4.1、游戏总体流程图 4.4.2、方块运动流程图 1515 4.4.3、方块消行流程图 第五章、各功能详细设计与实现 1616 5.1、项目总体概述 本阶段的目标是实现所有设计所采用的系统要求,也就是对系统实际程序代码的精确描述。通过前面的需求分析和项目总体设计,已经明确了此次项目需要设计的工程“蓝图”,而项目各功能详细设计和实现则是对项目一些细节的设计与调整,并且通过代码将程序进行实现。 5.2、各部分功能的设计与实现 5.2.1、主界面的设计与实现 对于一个游戏项目来说,界面的美观性显得尤为重要,一个足够漂亮、吸引人的界面,可以提高玩家对于游戏的认同感和游戏欲望,增加游戏的可玩性,使项目获得更长的游戏寿命。 界面的布局方面,我使用是Java下的java.awt包和java.swing包,其中java.swing采用了其中的Jframe、Jpanel、Jbutton、Jlabel、Jmenu等Java封装类,主要是对程序各功能模块的定义,java.awt则是采用其中的Color、Graphics、BorderLayout、GridLayout等Java封装的类,对项目布局、色彩以及方块的构图等方面进行支持。 1717 游戏界面图 俄罗斯方块游戏界面GameFrame继承于Jframe类,设定为一个392*490的容器,背景色为白色,调用父类构造器显示游戏的标题“俄罗斯方块”,并对 setVisible、setResizable、setDefaultCloseOperation等进行设置,Jframe的作用是对项目提供底层支持,以实现项目程序在操作系统中实例化窗口。 游戏菜单部分有游戏菜单和帮助菜单,游戏菜单下包括“新游戏”、“暂停”、“继续”、“提高难度”、“降低难度”、“结束”,对应游戏进行中的各个功能;帮助菜单下有“操作说明”、“关于”两个选项,是对游戏操作以及其他一些内容进行说明。 游戏界面部分分为两大窗口,分别是画布显示窗口和操纵面板窗口,两个窗口采用BorderLayout布局,画布显示窗口gamePanel设置在BorderLayout.CENTER位置,大小为240*440,占据整个界面的主要部分,背景色为天蓝色,它是游戏方 1818 块的显示窗口,通过paintComponent(Graphics g)方法将游戏中的方块绘制出来,paintComponent还调用gameShape.graphShape(g)和gameGround.graphShape(g)方法,gameShape.graphShape(g)在项目的方块类(gameShape)里面,它的作用是将游戏中正在运动的方块绘制出来,gameGround.graphShape(g)则是在项目的方块障碍类gameGround里面,绘制游戏中已经下落到底的方块,每次方块位置进行变化时,调用gamePanel中的appGraphic(gameGround, gameShape)方法,对方块和障碍进行重新绘制。 操纵面板窗口conrorlpanel处于BorderLayout.EAST位置,它是系统功能的显示位置和操纵位置,在窗口的的布局上,我采用的是GridLayout布局,将窗口从上到下分为四个小窗口;第一个小窗口上是显示游戏分数和困难等级,第二个则是显示下一个方块的窗口,第三个小窗口控制游戏操作,由上到下分别是“暂停”、“继续”、“提高难度”、“降低难度”四个功能键,用来对进行游戏功能性操作,第四个窗口是界面部分的方向操作按钮,采用和键盘上相同的排列方式,依次为“?”、“?”、“?”、“?”,用来控制游戏方块的变形、向左移动、向下移动、向右移动,并且用和键盘相同的排列方式,提高操作性,方便不同需求的用户进行操作。 5.2.2、游戏方块产生的设计与实现 俄罗斯方块的有一个专门的工厂类GameShapeFactory来进行生成,方块采用三维数组的形式进行表示,设为shapes[][][],第一个代表方块的类型,表示为七种基本方块之中的一种,第二个是方块的状态,表示在方块旋转过程中每次旋转时的状态,每个方块都有四种状态,其中“田”字型方块四种状态都相同,长条型方块状态两两相同,第三个则是方块的实际充填效果,表示方块最终出现形状。例如“T”形方块的数组: { { 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 } } 通过矩阵的形式,可以直接将数组中的方块绘制出来,如: 1919 方块出现时的形状: O X O O X X X O O O O O O O O O 经过变形后的形状: O X O O X X X O X X O O O X O O O X O O O O O O O O O O O O O O O X O O O X X O O X O O O O O O 其它六种也使用相同的方式,这样就把方块形态用二维数组的方式表示出来。 7种方块形状 2020 方块产生方面则是使用了一个getShape方法,通过调取上述的方块数组,并使用两个随机数int blockType =(int) (Math.random() * 1000) % 7;int turnState = (int) (Math.random() * 1000) % 4;分别见方块的类型和状态表示出来,并传到方块类gameShape的setBody和setStsatus两个方法中在通过gameShape中的绘图方法graphShape将二维数组表示的方块用Graphics在画布显示窗口绘制出来。 方块产生getShape方法代码 5.2.3、方块运动的设计与实现 方块运动方面我使用了一个ShapeListener监听器接口来对方块的运动进行监听。在getShape产生方块时,同时调用gameShape中的addShapeListener方法,进行监听器注册,ShapeListener之中共有两个方法接口,shapesMoveDown和isShapesMoveDown,shapesMoveDown是线程中方块下落时调用的方法,它将gameShape和方块障碍gameGround传到gamePanel中,使方块在主界面窗口中显示出来;isShapesMoveDown是对方块下落过程中的一些效果的判断,在调用到isShapesMoveDown方法是,现将方块向下下落一格,如果可以下落,就返回true,否则表示方块已经落到底部,同时调用gameGround中的fixedShape方法,将降落到底部的方块绘制到方块障碍中,并且判断方块是否已经顶到头,如果没有,从方块工厂GameShapeFactory产生新的方块,顶到头的话弹出“游戏结束”的弹框,isShapesMoveDown返回false,点击游戏菜单中的“新游戏”,重新开始游戏。 2121 判断方块是否可用继续下落代码 方块的自由下落是通过gameShape中的一个内部线程类ShapeDown来进行实现,每次新方块产生后调用new Thread(new ShapeDown()).start(),ShapeDown中使用一个while循环,在isShapesMoveDown返回true的时候,线程运行,调用MoveDown()和shapesMoveDown()方法使线程下落,线程运行的速度由难度等级来进行确定,设为Thread.sleep(600-level*100),level为玩家等级,共有1-5五个难度级别,相当于线程中Thread.sleep()的速度从0.5秒随难度增加到0.1秒,当难度到达五级后,只是分数增加,等级和难度不会再发生改变。 线程代码 2222 方块在gameShape中接受GameShapeFactory产生的方块用到了两参数status和bodys[][],由于方块在getShape方法中产生是已经确定了类型,bodys[][]相当于shapes[blockType][][],status是方块的状态,初始状态也是由getShape方法传出,每当进行方块旋转操作时,status=(status+1)%bodys.length,将方块的状态进行改变,最终bodys的值表示为bodys[status][y*4+x],y*4+x是方块充填效果,也就是GameShapeFactory中shapes[][][]数组的方块矩阵,确定由,0和1所组成的方块形状。 方块的移动设置了top和left两个参数,top代表页面画布窗口的顶部,每次方块向下移动时,调用MoveDown()方法,top加一;left则是方块在画布中的左右位置,取最左边为0,设left初始值为4,这样方块产生时出现在画布中间位置,方块的左右移动分别调用的是MoveLeft()和MoveRight()方法,表示left减一和left加一。 方块的旋转Rotate()方法,它设置status=(status+1)%bodys.length,每次进行旋转操作时status加一,并且status只能在0到3之间取值,以对应bodys的四种状态。 判断方块移动中是否超出边界用的是isMoveshape (gameShape,action)方法,action是方块运行参数0,1,2,3分别代表方块旋转、左移、右移、下落,isMoveshape调取gameShape中的top和left参数,用switch对方块移动方向进行筛选,随后进行判断方块的位置是否移动到画布窗口的边界处 top+y>=GameNumber.HEIGHT||left+x<0||left+x>=GameNumber.WIDTH,方块触到边界时返回false,将无法继续移动,否则返回true,方块可以继续进行移动操作。方块进行旋转操作时还调用isRotate(x,y,rotate)方法,取tempStatus=(status+1)%bodys.length,表示为下次旋转后方块的状态,isRotate返回bodys[tempStatus][y*4+x],也就是进行旋转操作后方块的位置,然后用isMoveshape进行判断,如果isRotate返回的方块没有超出边界,isMoveshape返回true,然后可以调用方块旋转方法Rotate(),如果isRotate返回的方块已经超出边界,则isMoveshape返回false,方块无法进行旋转操作。 2323 isMoveshape判断方块是否出界代码 方块的绘制采用的是graphShape(Graphics g),通过getWhere(x,y)返回bodys[status][y*4+x]确定方块所充填的位置,然后使用 g.fill3DRect((left+x)*GameNumber.SIZE,(top+y)*GameNumber.SIZE,GameNumb er.SIZE, GameNumber.SIZE, true);将方块的形状通过Graphics绘制出来。 5.2.4、方块障碍的设计与实现 程序中方块障碍物的实现是GameGround类,在GameGround类之中,定义了一个groundshap[12][22],12和22是画布窗口的宽和高,这样就可以将画布窗口看成一个12*22大小的网格形,方块的位置就在这些网格之中。 在方块移动过程中,通过isShapesMoveDown的判断,如果方块无法继续向下移动,就调用GameGround中的fixedShape方法,fixedShape会调用gameShape中isRotate()、getLeft()和getTop()方法,isRotate方法确定了方块的类型和状态,getLeft和getTop两个方法则是确定了方块在画布窗口中的位置坐标,通过这三个方法返回的参数,就可以唯一的确定在画布窗口中的方块,随后调用groundshap[][]数组,将方块写入数组之中。 2424 fixedShape记录方块障碍物代码 在方块运动过程中,每次写入新的方块,都会调用isFullLine方法判断方块是否达到满行,isFullLine采用两个for循环来进行满行判断,第一个for循环设定行数,第二个for循环则是对行中的每个方格进行遍历,如果该行已经满行,就调用消行方法deleteLine(line),line是将要消除的行的编号,deleteLine有groundshap[x][y]=groundshap[x][y-1]和 groundshap[x][0]=0两个式子,将需要消除的行在groundshap中擦除。在消行过程中,还会调用监听器接口scoreListener,通过消行监听每次消行都调用scoreListener中scoreUp()方法,增加游戏分数。 消行和清屏代码 2525 方块障碍物的绘制也使用graphShape(Graphics g)方法,每次方块进行移动时,调用gamePanel中appGraphic方法将障碍绘制出来。 5.2.5、游戏控制的设计与实现 本次项目中,游戏的控制主要在gameControl类中进行,游戏的控制分为两部分:鼠标界面点击和键盘方向键操作。 在界面部分,游戏中需要操作的功能键有游戏菜单中的:新游戏、暂停、继续、提高难度、降低难度、结束,以及操作面板窗口中的暂停、继续、提高难度、降低难度四个功能键和上、下、左、右四个方向键,这些功能我都是使用Java中的ActionListener()监听器进行监听。 例如“新游戏”功能,当在游戏菜单中点击“新游戏时”,通过ActionListener监听到后调用gameControl中的gameStare方法,gameStare会进行三不操作,分别是清除GameGround中的groundshap数组,消除上次游戏已经存在的方块障碍,然后调用GameShapeFactory中的getShape方法,产生新的方块,最后还注册scoreListener分数监听器,并清除分数和难度等级。 开始新游戏代码 游戏的暂停和继续,无论在游戏菜单中还是在界面功能窗口中点击,都会通过ActionListener调用gameControl中的gamePause和gameContionue方法,然后再调用gameShape中的gamePause和gameContionue方法,设置gameShape中playing为true或false来实现方块的暂停和继续功能。 “提高难度”和“降低难度”两个功能,在GameFrame主界面中进行实现的,当游戏难度等级发生变化时,调用isLevelUp和isLevelDown方法,isLevelUp方法是当等级level小于5时,level加一,同时通过setText改变界面中level的值,并将level值传到GameShapeFactory和GameShape中,改变GameShape中的 2626 内部线程类ShapeDown的参数。 游戏方块的旋转和移动操作则是键盘和鼠标点击都可以产生效果,鼠标点击同样是ActionListener监听,然后调用gameControl中的对应方法;键盘操作则是在gameControl中继承了Java中封装的KeyAdapter类,KeyAdapter是Java中键盘监听类,通过调用KeyAdapter中keyPressed方法,每次敲击键盘,会调用gameControl中shapeLeft()、shapeRotate()等方法,通过isMoveshape判断方块是否进行移动和旋转操作,之后再调用gamePanel中appGraphic(gameGround, gameShape)方法,将方块在画布窗口中重新绘制。 键盘监听代码 游戏分数和等级的设置共有三个参数,分别是玩家分数score,玩家在当前等级获得的分数levelscore以及游戏困难等级level,我在程序中设定了一个监听端口scoreListener,在游戏菜单中点击新游戏是,会同时注册scoreListener监听,每当gameGround中进行消行操作时,调用scoreListener中scoreUp方法,使score和levelscore同时增加100,使用setText改变界面中score的值;在levelscore改变时,进行一次判断,当levelscore大于900时,调用isLevelUp 2727 方法,levelscore重置为0,如果level小于5,level加一,改变gameShape和GameShapeFactory中的level值,提高游戏难度。 游戏结束界面 5.2.6、游戏拓展功能的设计与实现 游戏拓展功目前完成了下一个方块的显示,开始新游戏时,同时在gameStare中调用gameShape=gameFactory.getShape以及gameShapePanel=gameFactory. getShapePanel,使游戏画布窗口和操作栏下一个方块窗口同时出现方块图形,随后在产生新方块时,调用gameShapePanel中的getShape,将方块调用出来,同时调用gameShapePanel=gameFactory.getShapePanel,在gameShapePanel中产生新的方块。 2828 第六章、系统测试 6.1、测试概述 系统测试是项目开发过程中的一个重要环节,它直接关系到项目的完成质量以及是项目的各项指标是否达到预期的要求,通过对项目中各项功能的测试,可以使程序更加完善,将bug在测试阶段发现并进行修改,提升项目质量,并提高用户的游戏体验度。 6.2、界面效果测试 系统的界面部分为一个392*490的一个矩形窗口,上方标题为“俄罗斯方块”,关闭,最小化等功能正常,在游戏的菜单栏有“游戏”和“帮助”两个选项,其中各项功能效果都可以正常完成,下方画布显示窗口和操作面板窗口都可以正常显示,在画布窗口中方块和方块障碍物都可以正常显示,在操作窗口中,分数和等级数值都正常,暂停、提升难度等功能可以正常实现,界面上可点击操作方块运动的方向按钮和键盘操作同时进行操作时有一定的切换延迟。 6.3、方块效果测试 方块的效果方面,点击“新游戏”后方块可以正常出现,同时使用键盘的方向键操作可以正常的进行旋转和下、左、右三个方向上的移动,方块在移动到边界处时不会继续向外移动,在方块下落到底部时可以正常写入fixedShape生成障碍物,并且改变颜色,方块在碰触到障碍无法越过障碍物,在方块达到消行效果时可以正常消行,在方块累积到顶部是可以弹出“游戏结束”弹框,在点击新游戏时,原有的的方块和障碍物都会消除,同时产生新的方块。 6.4、分数、等级测试 游戏在消行后,分数可以正常增加,同时每增加一千分后,游戏等级会自动加一,同时方块的下落速度增加,在游戏难度等级达到五之后,分数继续增加,难度不会再发生改变,在玩家手动调节游戏等级时,最高为五级,最低为一级,调节后levelscore初始化为0,分数不会发生改变。 6.5、其他测试 系统在窗口打开时速度比较慢,游戏过程中运行稳定,线程运行正常,项目总体上来说安全稳定。功能方面已完成基本功能,在背景音乐等其他功能有待继续 2929 开发。 第七章、结论 经过几个月的设计与开发,俄罗斯方块游戏的各项功能已经基本实现,在项目的开发期间,曾遇到许多问题,如方块显示异常、页面方向按钮与键盘按键无法切换等,让我深刻的认识到以前学习中的许多不足之处,明白理论和实际结合的重要性,同时将所学的知识更好地运用到实践中去,积累了程序开发中的许多经验。 在项目的开发过程中,我首先认识到需求分析和项目设计的重要性,正所谓“磨刀不误砍柴工”,经过一系列的分析和设置之后,可以让我更加明确的认识到自己想要做成的是一个什么样的程序,了解自己需要完成哪些功能,应该怎样去完成这些功能,只有在明确的意识到这些问题后,才能更好地完成项目。 同时这次毕业设计也让我认识到自主学习的重要性,在程序的开发过程中,尤其是日后的工作中,不可能有老师来指正你的错误,更不可能在你遇到开发困难时有老师进行帮助,因此,自主学习就显得尤为重要,通过网上和图书馆资料,可以更加便捷的解决程序开发过程中所遇到的难题,不断积累开发经验,以适应各种不同项目的开发。 回顾这一段时间的设计和开发,真是感慨万千,从拿到课题时的不知道从何处开始下手,一直到现在完成了整个程序,一路上不仅将过去所学的知识往更深层发掘,同时也不断的学习新的知识去解决开发中所遇到的问题。在这次开发过程中我感触最深的就是学习的重要性,人上学的时间是有限的,但学习的时间确实无限的,活到老学到老并不是一句空话,尤其是我们即将要从业的软件行业,正处于高速发展,各种新技术层出不穷的阶段,因此也需要我们去用更多时间和精力去学习新的知识,程序员是一个需要不断学习的职业,只有通过不断的学习,才能从容面对工作生活中的各种问题,我们的大学即将毕业,但人生的大学才刚刚开始。 致谢 本次游戏的设计是在指导老师张的细心指导下完成的。在程序的设计和实现过程中,遇到许多问题,通过老师的细心指导,以及同学们的积极帮助和网上查询,才完成了这次毕业设计。 首先要感谢指导老师以及其他辛苦教导我们的老师,在老师们的无私教导和帮助 3030 之下,学到Java语言的许多相关知识,为这次毕业设计打下结实的基础,同时在毕业设计完成的过程中,多亏老师们的热情帮助和细心指导,才使得这次毕业设计顺利完成。 其次要感谢我的同学,在开发过程中遇到困难时,总会热心的伸出援手,积极的帮助我解决问题,加快毕业设计的完成速度。 最后向评审本论文,参加论文答辩的各位老师表示最衷心的感谢。 3131
本文档为【基于JavaGUI的俄罗斯方块的设计与实现论文】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_769254
暂无简介~
格式:doc
大小:355KB
软件:Word
页数:0
分类:工学
上传时间:2017-09-30
浏览量:22