




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java程序课程设计任 务 书俄罗斯方块游戏的开发1、主要内容:俄罗斯方块游戏具有广泛的游戏人群,因为它比较简单有趣,无论老少都比较适合。俄罗斯方块游戏的设计对于每一个Java语言设计者进行语言提高和进阶都是一个很好的锻炼机会。俄罗斯方块游戏的设计工作是非常复杂和重要的,它涉及面逛,牵涉面多,如果不好好考虑和设计,将难以成功开发出这个游戏。在这个游戏的设计中,将牵涉到图形界面的显示与更新,数据的收集与更新并且在这个游戏的开发中还会应用类的继承机制以及一些设计模式。因此,如何设计和开发好这个俄罗斯方块游戏,对于提高Java开发水平和系统的设计能力有极大的帮助。在设计开发过程中,开发者需要处理好各
2、个类之间的集成关系,还要处理各个类的相应的封装,并且还要协调好各个模块之间的逻辑依赖关系和数据通信关系。2、 具体要求(包括技术要求等):系统的功能设计要求:本课程设计将实现以下几种功能。1. 游戏界面主框架游戏界面主框架主要包括游戏图形区域界面,游戏速度的选择更新界面,游戏分数的显示更新界面,下一个图形方块的显示更新区域,开始游戏按钮,重新开始游戏按钮以及退出游戏按钮游戏界面主框架的主要结构如下图所示。2游戏图形区域界面的显示更新功能 游戏图形区域界面主要是一个图形显示更新区域,主要包括游戏方块显示更新,整行方块的删除和更新,进行中和游戏结束时的分数更新和游戏图形区域界面的清除。 在这个游戏
3、图形区域界面中,主要是一个表格,根据相应格子的设置标志来显示相应的图形图片,这样就实现了俄罗斯方块的实时显示。3游戏方块的设计 在俄罗斯方块游戏中,具体的游戏方块图形的设计是比较重要的一个方面。因为俄罗斯方块游戏中主要的动作就是控制游戏方块的移动和翻转,以便于组成一行行连续的方块从而增加游的分数。由于主要的游戏动作都集中在这个游戏方块上,因此游戏方块的设计就显得格外重要了。为了增加程序的可扩展性,这里设计一个游戏方块的基类,各个具体的游戏方块都从这个基类开始继承。这样,当需要增加游戏方块时就不用重新设计新的类,只需要从这个基类集成出一个类就可以了。更具基类设计了8个派生游戏方块类,其结构如图:
4、 系统功能设计分析 俄罗斯方块游戏根据游戏界面布局的不同,将系统划分为如下几个功能部分。(1) 游戏显示更新功能。游戏显示更新功能主要是更新显示游戏区域的方块显示,包括控制游戏方块的下落速度,下落方向以及形状改变,并且还需要判断当前游戏方块是否满足消除一行的条件。GameAreaPanel类就是游戏显示更新的控制类,paint(Graphics g)方法主要负责游戏区域的实时重绘。(2) 游戏方块预览功能。在游戏过程中,当在游戏区域中出现一个游戏方块时,必须在游戏预览区域出现下一个游戏方块,这样有利于游戏者控制游戏的策划。由于在此游戏中存在8中不同的游戏方块,所以在游戏方块预览中就需要显示随机
5、生成游戏方块。PreviewPanel类是游戏预览控制类,在painting(Graphics g)方法中,将根据生成的随机数字显示不同的游戏方块。(3) 游戏方块控制功能。给各种游戏方块设置一个基类,主要包括begin()(初始化显示)方法,down()(向下移动)方法,left()(向左移动)方法,right()(向右移动)方法,change()(变换角度)方法,downto()(一下到底)方法。在各个游戏子类中,需要具体实现这些方法。(4) 游戏速度分数更新功能。在游戏者进行游戏的过程中,需要按照异地昂的游戏规则给游戏规则给游戏者计算游戏分数,当游戏分数达到一定数量后,就需要给游戏者增加
6、难度,即提高游戏中游戏方块的下落速度。学习并掌握以下技术:Java等熟练使用以下开发工具:JCreator等实现系统上述的功能。3、 进度安排:12月28日 12月29日:课程设计选题,查找参考资料 12月29日 12月 30日:完成需求分析12月31日 1月2日: 完成系统设计和数据库设计1月3日 1月4日: 完成程序代码的编写1月5日 1月6日:系统测试与完善1月7日 1月8日:完成课程设计报告,准备答辩4、主要参考文献1 刘中兵.Java高手真经M.北京:电子工业出版社,2009.3:3-6662 陶亚楠 廖建.Java Web开发入行真功夫M.北京:电子工业出版社,2009.3:3-2
7、223黄晓东.Java 课程设计案列精编(第二版)M .中国水利水电出版社,2007.4:6-3334黄晓东.Java 课程设计案列精编(第一版)M .中国水利水电出版社,2004.5:6-2225 赵斌.SQL Server 2008应用开发案例解析M.北京:科学出版社,2009:8-1006 Kai Leung Yung,Wai Hung Ip,Ding-Wei Wang. Soft Computing Based Procurement Planning of Time-variable Demand in Manufacturing Systems J. International J
8、ournal of Automation and Computing. 2007, 4(1):80-877 Meline J.P.Van der Meulen,Miguel Revilla. The Effectiveness of Choice of Programming Language as a Diversity Seeking DecisionJ. Springer Berlin/Heidelberg. 2005, (3):199-209摘要在现今电子信息高速发展的时代,电子游戏已经深入人们的日常生活,成为老少皆宜的娱乐方式。但是游戏设计结合了日新月异的技术,在一个产品中整合了复杂
9、的设计、艺术、声音和软件,所以并不是人人皆知。直到今天,在中国从事游戏设计的人仍然很少,但是游戏行业的发展之快,远超如家电、汽车等传统行业,也正因为如此,游戏人才的教育、培养远落后于产业的发展。俄罗斯方块是个老幼皆宜的小游戏,它实现由四块正方形的色块组成,然后存储在一个数组的四个元素中,计算机随机产生不同七种类型的方块,根据计算机时钟控制它在一定的时间不停的产生,用户根据键盘的四个方向键控制翻转、向左、向右和向下操作,(控制键的实现是由键盘的方向键的事件处理实现)。然后程序根据这七种方块堆叠成各种不同的模型。论文描述了游戏的历史,开发此游戏的环境,游戏开发的意义。遵循软件工程的知识,从软件问题
10、定义开始,接着进行可行性研究、需求分析、概要设计、详细设计,最后对软件进行了测试,整个开发过程贯穿软件工程的知识体系。此次设计在Microsoft Windows XP系统下,以Java为开发语言,在eclipse开发平台上进行游戏的设计与实践。关键词:游戏设计;算法;数组;事件AbstractIn the era of high-speed development of electronic information, computer game has enter peoples daily life, become an amusement adapt to old and young.
11、But Game design is a combination of fast-moving technology, the complexity of integrating design、 art、audio and software into a single production, so this technology isnt known by everyone. up-to-date, there are few people work at game design all the same, whereas, the development of game industry m
12、ore faster than traditional industry as home appliances and automobile, by the reason of this situation, the education and training of person with ability of game design drop behind the development of game industry.The Russian square piece is a get-away drama with all proper old young , it carry out
13、 to be constitute by four pieces of colors of exact square piece, then save in one four chemical elements of the piece set, random creation dissimilarity of calculator seven the square piece of the category type, control it according to the calculator clock in certain time continuously creation, the
14、 customer is inside out according to four directions key control of the keyboard, to left, rightwards and get down the operation,.( the realization of the control key is to be carry out by the event handling of the direction key of the keyboard)Then the procedure pileds according to these seven kind
15、s of square pieces various different model.The thesis has described the game history , has developed this game environment, development significance of game. Knowledge abiding by a software engineering, definition begins from software problem , proceed to carry out feasibility study , need analysis
16、, essentials design , detailed design, the at last has carried out a testing on the software , entire exploitation process has run through the software engineering knowledge hierarchy.The computer game design and practice are designed on eclipse developing platform with Java developing instrument, u
17、nder Microsoft Windows XP system this time.Key Words:Game design;calculate way;several;eve目 录摘要VIABSTRACTVII目 录I第1章 引言11.1 背景11.2 课程设计内容11.3 任务分工2第2章 俄罗斯方块概述42.1 游戏的历史4从头谈起4图形硬件的革命42.2游戏的意义与内涵5游戏的组成要素52.3俄罗斯方块游戏5第3章 可行性研究63.1 设计目的63.2 可行性研究前提63.3 可行性分析73.4 结论7第4章 俄罗斯方块游戏的设计84.1游戏功能需求84.2 运行环境及系统性能的需
18、求94.3 详细设计9第5章 系统的具体实现205.1界面设计20用户登陆界面图205.1.2 系统主界面265.2程序设计及调试运行315.2.1 测试的意义及注意事项31测试的步骤325.2.3 测试结果33第6章 结束语33致谢34参考文献35附录 源代码36第1章 引言1.1 背景俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。 俄罗斯方块曾经造成的轰动与造成的经济价值可以说是游戏史上的
19、一件大事,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。俄罗斯方块上手极其简单,但是要熟练地掌握其中的操作与摆放技巧,难度却不低。作为家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上任何一款游戏都无法相比的。但是,谁知道这么优秀的娱乐工具,出自哪位神人之手呢?顾名思义,俄罗斯方块自然是俄罗斯人发明的。这位伟人叫做阿列克谢帕基特诺夫。俄罗斯方块原名是俄语(英语是Tetris),这个名字来源于希腊语tetra,意思是“四”,而游戏的作者最喜欢网球(tennis)。于是,他把两个词tetra和tennis合而为一,命名为Tetris,这也就是俄
20、罗斯方块名字的由来啦。1.2 课程设计内容1.游戏界面主框架游戏界面主框架主要包括游戏图形区域界面,游戏速度的选择更新界面,游戏分数的显示更新界面,下一个图形方块的显示更新区域,开始游戏按钮,重新开始游戏按钮以及退出游戏按钮2游戏图形区域界面的显示更新功能 游戏图形区域界面主要是一个图形显示更新区域,主要包括游戏方块显示更新,整行方块的删除和更新,进行中和游戏结束时的分数更新和游戏图形区域界面的清除。 在这个游戏图形区域界面中,主要是一个表格,根据相应格子的设置标志来显示相应的图形图片,这样就实现了俄罗斯方块的实时显示。3游戏方块的设计 在俄罗斯方块游戏中,具体的游戏方块图形的设计是比较重要的
21、一个方面。因为俄罗斯方块游戏中主要的动作就是控制游戏方块的移动和翻转,以便于组成一行行连续的方块从而增加游的分数。由于主要的游戏动作都集中在这个游戏方块上,因此游戏方块的设计就显得格外重要了。为了增加程序的可扩展性,这里设计一个游戏方块的基类,各个具体的游戏方块都从这个基类开始继承。这样,当需要增加游戏方块时就不用重新设计新的类,只需要从这个基类集成出一个类就可以了。4.系统功能设计分析 俄罗斯方块游戏根据游戏界面布局的不同,将系统划分为如下几个功能部分。(1) 游戏显示更新功能。游戏显示更新功能主要是更新显示游戏区域的方块显示,包括控制游戏方块的下落速度,下落方向以及形状改变,并且还需要判断
22、当前游戏方块是否满足消除一行的条件。GameAreaPanel类就是游戏显示更新的控制类,paint(Graphics g)方法主要负责游戏区域的实时重绘。(2) 游戏方块预览功能。在游戏过程中,当在游戏区域中出现一个游戏方块时,必须在游戏预览区域出现下一个游戏方块,这样有利于游戏者控制游戏的策划。由于在此游戏中存在8中不同的游戏方块,所以在游戏方块预览中就需要显示随机生成游戏方块。PreviewPanel类是游戏预览控制类,在painting(Graphics g)方法中,将根据生成的随机数字显示不同的游戏方块。(3) 游戏方块控制功能。给各种游戏方块设置一个基类,主要包括begin()(初
23、始化显示)方法,down()(向下移动)方法,left()(向左移动)方法,right()(向右移动)方法,change()(变换角度)方法,downto()(一下到底)方法。在各个游戏子类中,需要具体实现这些方法。(4) 游戏速度分数更新功能。在游戏者进行游戏的过程中,需要按照异地昂的游戏规则给游戏规则给游戏者计算游戏分数,当游戏分数达到一定数量后,就需要给游戏者增加难度,即提高游戏中游戏方块的下落速度。 1.3 任务分工第2章 俄罗斯方块概述2.1 游戏的历史游戏是人类生活的重要组成部分,从第一个电子游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件水平的提高,游戏开发新技术层出不穷
24、,经典游戏比比皆是。从头谈起真正的电子游戏机产生于20世纪70年代。1971年,麻省理工学院的学生Nolan Bushnell设计了世界上的第一个业务用游戏机(俗名街机),叫做电脑空间。这台游戏机用一台黑白电视机作为显示屏,用一个控制柄作为操纵器,不过由于市场因素这款游戏以失败告终。但是最后他在电子游戏的发展上取得了非凡的成就。上面介绍的是专用机游戏的历史,而最早的电脑游戏可以追溯到1972年,一个叫Crowther的工程师用当时最流行的主机DEC公司的PDP10编写一段简单的FORTRAN程序。在这个程序里,Crowther设计了一张地图,地图上不规则的分布着陷阱,游戏者必须寻找路径避开陷阱
25、。这个程序被公认为是最早的电脑游戏程序。1989年,BroderBund公司的设计师乔丹.麦克纳根据阿拉伯民族的古老传说一千零一夜在Apple平台上制作了一部动作冒险相结合的电脑游戏波斯王子。这个游戏获得了第一作,它代表了当时电脑技术的最高水平。1986年,任天堂公司发售了一款真正的游戏巨作超级马里奥。20世纪80年代IBM PC兼容机的出现打破了Apple公司的垄断地位。到了20世纪90年代,游戏业才真正成熟起来,成为了一种产业。由于PC机价格非常低而且硬件速度越来越快,游戏逐渐成为人们生活中不可缺少的一部分。游戏产业也逐渐发展成熟。图形硬件的革命图形硬件的飞速发展是近些年来的事情,部分原因
26、是来自工业方面的压力,例如在军事和医疗方面对于实时图形的需求很强烈,而交互娱乐产业也极大的推动了图形硬件的发展。技术上的因素同样也推动着图形硬件的发展,许多图形算法可以很容易地表达为并行方式,这样硬件执行的效率变得很高。摩乐定律也起了作用,越来越多的晶体管可以集成到一块单独的芯片上。在所谓的GPU(图形处理器)概念出现以前,特殊的图形硬件只出现在诸如SGI和E&S系统里面,这些硬件价格太昂贵,不过这些公司提供了第一代基于硬件的顶点变换和纹理映射的解决方案。2.2游戏的意义与内涵游戏这个名称一直就存在于每个人的日常生活中,如猜拳游戏、猜谜游戏、大地游戏、球类游戏等,林林总总,不胜枚举,甚至于有些
27、流行歌曲把人生也比喻为游戏,好比“一场游戏一场梦” 。因此,游戏对于现代人的成长历程,绝对是一个不可或缺的重要角色。2.2.1游戏的组成要素“游戏”,最简单的定义,就是一种供人们娱乐休闲的快乐元素。从更专业的角度形容, “游戏”是具有特定行为模式、规则条件、身心娱乐及输赢的一种行为表现。这种行为表现具备以下4个要素。行为模式:“游戏”最简单的要素就是游戏有特定的流程模式,这种流程模式贯穿于整个游戏的行为,用户必须依照它的模式流程来执行。倘若一种游戏没有了特定的行为模式,那么就没有执行的行为;在没有执行的行为之后,这个游戏也玩不下去了。举个例子来说,如果猜拳游戏没有了剪刀、石头、布等行为模式,那
28、么这还能叫做“猜拳游戏” 吗?所以不管游戏的流程有多么复杂还是多么简单,一定要有特定的行为模式。条件规则:当游戏有了一定的行为模式后,接着就必须制定出一系列的条件规则。简单来说,这些游戏的条件规则就是大家必须去遵守的游戏行为守则,只要是大家一致以为的游戏行为,在游戏中,玩家就必须遵守它,如果不遵守这种游戏行为,那么就失去了公平性。如同一种简单的球赛,打球的英文解释可以用PLAY GAME来加以说明,按照英文字面上的解释,它就是执行游戏的行为,而球赛必须有一定的条件规则,并且参与者都要必须去遵守它,不能遵守它就叫作“犯规”。所以不管是什么游戏,它都会具备一组规则条件,在游戏进行的时候才会有足够的
29、公平性。娱乐身心:一种游戏所带来的娱乐性,关键就在于为玩家所带来的刺激感,这也是游戏的精华所在。简单来说,不管是很多人玩的游戏,还是一个人玩的单机游戏,游戏本身就会存在它的娱乐和刺激性,使得玩家们想要去玩它。输赢:其实针对游戏而言,输赢是所有游戏的最终目的。一个没有输赢的游戏,也就没有了它存在的意义,如同我们常常接触到的猜拳游戏,说穿了最终目的就是为了分出胜负而己。一般而言,游戏又可以分为动态和静态两种形态。动态的游戏必须配合肢体动作,如猜拳游戏;而静态游戏则是较偏向思考的行为,如同纸上游戏。然而不管是动态或是静态游戏,只要具备上述4项组成要素,都可以将它称为“游戏”。2.3俄罗斯方块游戏俄罗
30、斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人Alex Pajitnov制作的,它看似简单但却变化无穷,令人上瘾。但是经过时代的变迁,当初简单却变化无穷的俄罗斯方块游戏如今却已失去了它的市场,究其原因,主要是因为游戏硬件以及技术的革新使得优秀的游戏接二连三地推出,而俄罗斯方块游戏作为一款形式、内容过于简单的游戏势必经受不住时间的冲击的。现在作者将改写这个固定的游戏模式,通过增加一系列的新功能,开发出一种全新的俄罗斯方块游戏,使游戏用户重新燃起对俄罗斯方块游戏的热爱。第3章 可行性研究 3.1 设计目
31、的综合运用在校期间所学理论知识和技能,设计开发俄罗斯方块,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,提高工程实践能力,为将来实际工作打下坚实的基础。3.2 可行性研究前提基本需求:系统开发的总体任务是实现游戏的可操作性、美观性、及时性,及适当的功能扩展。主要开发目标:采用结构化设计方法,开发出一个可操作性、美观性、及时性的游戏,并通过此次软件开发过程全面提高自身的综合素质。可行性研究所采用的方法和步骤:通过研究分析俄罗斯方块所具备的能力及实现的方法、确定主体结构。利用现阶段我所能达到的能力,以最简洁、最容易的办法,边开发边测试边修改,实现一个有一定可玩性的游戏软件
32、。评价尺度:本游戏尽量追求游戏操作的合理性及正确性,但是仍不排除会出现一些偶然性的错误;同时游戏也尽量追求界面的美观性及功能的丰富性,但是基于时间的关系,可能会有极少数的拓展功能不能实现。3.3 可行性分析管理可行性: 本游戏设计的目的只在于提高自身实践水平,并不对外发布,因此完全具有管理可行性。经济可行性:由于本游戏的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台电脑便可,所以不用考虑到经济问题。技术可行性:可用与本游戏的编程语言有VB,VC,Java,Delphi等,考虑到用于编写程序的困难度,和对语言的了解程
33、度,选择JAVA作为编程语言。需要对图形界面设计、事件处理、多媒体、网络编程等有一定了解。社会可行性:本游戏的开发作为毕业课程设计以巩固先前所学的知识,以个人为单位,仅供个人平常娱乐所用,无须考虑有可能造成的社会影响,不用考虑到法律、版权等的社会因素,所以在这方面是完全可行的。3.4 结论综上所述,本游戏软件的技术成熟、完备。各方面均无重大问题,因此本游戏软件可开始着手编写第4章 俄罗斯方块游戏的设计这一章是俄罗斯方块游戏的设计,从系统需求分析开始,介绍开发环境和用到的开发工具,系统主要的功能设计,系统的数据流程图。4.1游戏功能需求4.1.1游戏界面需求良好的用户界面设计。本游戏主要有三个界
34、面,一是用于主游戏区的游戏画布,用来显示游戏时运动和落下去的方块,二是用于控制游戏的各种控件以及显现游戏信息的一些组件,这是一个面板,三是进行网络对战时用以显示对方游戏信息的面板。4.1.2游戏控制需求方块下落时,可通过键盘方向键(上、下、左、右键)对该方块进行向上(变形),向下(加速)、向左、向右移动。4.1.3图形显示需求随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域,若填满一条便消掉,记分,当达到一定的分数时,过关,一共设置十关,每关方块下落的速度不同,游戏中方块碰到顶部则游戏结束。4.1.4音乐播放需求本游戏,具备播放背景音乐效果。4.2
35、 运行环境及系统性能的需求本游戏对运行环境及系统性能的需求如表3.2所示:表4.2 游戏对运行环境及系统性能需求分析表操作系统Windows98/me/2000/XP/2003内存容量64MB显卡要求8M声卡要求支持DirectX 8.0 声卡交互工具键盘/鼠标CPU奔腾133以上光驱8倍速以上硬盘空间400MB显示器VGA以上显示器开发及运行软件JDK1.5以上版本q 4.3 详细设计3.3.1音效播放控制模块设计本游戏的音效播放采用剪辑及多线程的方式实现。音频播放需要用到JAVA中的sound包。首先,利用AudioSystem这个音频工厂的getAudioInputstream()方法从
36、音频文件中取得一个音频输入流,其次,从这个音频输入流创建一个Clip,然后打开这个Clip。这样,当需要时,就可以利用Clip中的start()方法播放这个剪辑,重复播放,可以用setFramePosition(0)这个方法将剪辑的位置重新置为0。音效剪辑的播放控制流程图如图3.3所示:开始满足音效播放条件Notify音效播放线程,游戏线程进入wait状态播放音效Notify游戏线程,音效播放线程进入wait状态结束图4.3 音效播放流程图4.3.2背景音乐播放控制模块设计同音效的播放,背景音乐的播放也应当采用剪辑的形式,以方便音乐的循环多次播放,同样,背景音乐播放也要单独的线程进行控制。前面
37、概要设计提出了一个问题。因为背景音乐采用单独线程播放,当用户选择暂停背景音乐播放时,背景音乐播放线程如果以进入wait状态来暂停的话,则当用户取消暂停时必须还需要一个线程来唤醒它,额外增加一个线程的话,不免浪费系统资源,而且也会增加编写的难度。从另一个角度来说,背景音乐极可能在玩家的整个游戏过程中都处在播放状态,当暂停时,玩家也随时会取消暂停,因此,可以让背景音乐线程从游戏开始后就一直处在执行状态,如果用户暂停播放,可以让线程转去循环处理检测用户是否取消暂停,当检测到用户取消暂停时,继续播放音乐。背景音乐播放控制的算法流程如图3.4所示:开始否背景音乐播放控制线程是否接受到恢复信息是否处在暂停
38、状态是否是播放背景音乐接受到暂停信息暂停播放结束图4.4 背景音乐播放控制流程图4.3.3旋转方块的设计旋转方块的出现是随机的,而随着游戏级别的提升,每一关出现的旋转方块的数量也会不同,对于七种方块来说,它们在任何一段时间内出现的概率都是一致的,再者,旋转方块需要两个定时器,定时下落和定时旋转。旋转方块的这个性质要求它必须要两个线程才能控制,但是为了充分利用资源,我们可以利用方块控制线程去控制旋转方块定时下落,然后只需再创建一个线程控制它定时旋转即可。确定了两个线程共同控制旋转方块,就会出现一个线程协调工作的问题。如果一个新方块出现的时机正好也是旋转方块出现的时机,程序就会出现紊乱,所以必须保
39、证,在同一时间,正常方块和旋转方块只能出现一个。因为两个线程需要共同控制旋转方块,所以不能用wait()和notify()这两个方法去协调线程,而应当利用其它条件去协调两个线程。首先,游戏开始后,旋转方块控制线程可以随机休眠一定时间(这个休眠时间应该是随着游戏级别的提升而缩短的)。休眠时间结束后,循环检测正常方块是否已经落下,当检测到方块落下后,马上得到一个新方块,然后开启一个循环,在方块没有落下之前让它按一定的时间频率旋转,成为一个旋转方块。对于方块控制线程,在方块落下时应该休眠一定数量的时间,以让旋转方块控制线程有得到旋转方块的机会,如果超出这个休眠时间,旋转方块控制线程还没有得到新方块,
40、则可以认为旋转方块控制线程还处在休眠中,方块控制线程得到一个新方块。相应的算法流程如图4.6和图4.7所示:休眠时间结束随机休眠一定时间检测现有方块是否已经落下是否能够消行方块是否已经落下是否能够消行休眠一定时间否是得到新方块休眠一定时间旋转方块否是游戏是否结束是否能够消行是否开始结束图4.6 旋转方块控制线程工作图4.3.3方块的翻转与移动方块的翻转与移动比较容易实现,方块移动只需要改变方块的横坐标或纵坐标,然后重新绘制方块即可。方块翻转也只需要改变方块数据第二维turnstate的值,然后重新绘制方块即可。但是,这里边也会出现一个问题,这何种时候,方块不能再翻转和移动?4.3.4方块的移动
41、很显然,当方块移动到地图的左右边界处,或者落下去后,不能再继续移动;另一种情况就是,当方块要移动的方向被其他方块挡住时,方块不能再移动。确定方块移动的规则后,接下来就是如何将这种规则用算法表示的问题了。比如,当方块移动的左边界处时,方块不能再继续往左移动了,这个时候,肯定有一个条件成立,那就是方块的横坐标必定是小于或者等于零的。如果方块的横坐标等于0,方块就不能再移动,那么方块数组的第一列至少有一个值为1,这种情况比较简单,但是,如果方块数组的第一列全为0时,也就是说,当方块数组有1的那列碰到边界时,方块才不能移动,这个时候,首次出现1的那列的横坐标为0,而方块数组的横坐标肯定已经小于0了。假
42、定我们以x记录方块数组的横坐标,以j记录方块不能移动时,方块数组中首次出现1的那列,当方块不能移动时,x+j的值必定是等于0的。同理,当方块到达右边界不能移动时,我们可以从方块数组的右边开始检测,记录下首先出现1的那列的值,这个时候,x+j一定是等于14的。当方块落下后,方块同样不能再移动。这又分为两种情况,一种是要坠下的地方还没有方块,这个时候,只要可以记录下方块数组中最后出现1的那一行,假定那是第i行,这样,只要y+i等于24,就可以认定方块已经落到游戏地图的底部,不能再继续下落。当要方块下边或者左右有方块时,可以确定下边有方块的那一格在游戏地图中的纵坐标是横坐标或纵坐标是x+j+1或者y
43、+i+1,假定那一格的纵坐标坐标或者横坐标为y或x,那么游戏地图数组中x+j+1y或者xy+i+1这个元素的值必定是2。综合以上几种情况,我们可以列出方块移动条件判定表,如表5.1所示:表 4.1 方块移动条件判定表12345678条件是否有阻隔TTTTTTTFx+j=0|gameareay+ix+j+1=2TFTTTFTx+j=14|gameareay+ix+j-1=2FTFTFTTy+i=24|gameareay+i+1x+j=2FFFFTTT动作左移动右移动下移动4.3.4方块的翻转大多数的俄罗斯方块游戏的翻转判定条件都比较简单,即方块处在边界处时就不能再翻转,因为这种时候翻转会发生数组
44、越界错误。试想一下,当方块移动到边界处,甚至还没有到边界处时,就不能再翻转了,无疑会给操作带来大大地不方便性。方块翻转的另一个问题就是,当方块下落过程中,左右两边都有方块,周围的空间不能再容许它翻转,往往很多游戏没有注意到这一点,这就导致,方块翻转之后把原来存在的方块给挤掉了,这个问题本质上也是翻转越界。为了解决以上问题,游戏设计中应该增加一个对于方块能否翻转的判定以及翻转越界纠正功能。1方块翻转判定如上所述,在两种情况下一种是方块落下去固定住以后,第二种是周围的空间不允许它进行翻转。第一种情况好办,只要参考方块落下去后不能够再移动的判定即可。对于第二种情况,在每次方块翻转前,必须首先计算出方
45、块周围的空间,如果空间允许则翻转,否则,不能翻转。这里面又出现一个棘手的问题,因为七种方块是不规则的,每种方块要求的翻转空间都是不一样的,甚至是在它的不同翻转状态下,所要求的翻转空间也是不一样的,首先想到的自然就是为每一种方块,方块的每一种状态都写一个判定条件,然后根据当前的blocktype和turnstate值,选择哪种判定条件进行判定,但是这样做未免过于麻烦。根据观察,不难发现,七种形态的方块,长条形的方块如果以横条的形态下落,则只有能够下落,就能翻转,如果以竖条的形态下落,那么它翻转后所处的位置必须要有4x1个格子的空间才能够翻转;对于田字形的方块,只有能够继续下坠,就一定能够翻转,所
46、以田子型的方块只要没有落下,就一直能够翻转;而其它五种形态的方块,又有一个共同点,就是它们都有两种翻转状态横向占三个格子的空间,竖直方向占两个空间,另外两种翻转状态横向占两个格子的空间,竖直方向占三个格子空间,如果他们是以横向占三个格子的状态下落,那么只要能下落,就一定能够翻转,如果是以横向两个格子的状态下落,那么在翻转后,周围必须要有3x2个格子的空间。所以,方块翻转的判定,要分三种情况。第一种情况是方块落下去后不能翻转;第二种情况是对竖直状态出现的长条形的方块进行翻转判定;第三种情况是对除长条形和田字形之外的其它五种以横向占两个格子的状态出现的方块进行翻转判定。何种情况下方块能够翻转的问题
47、解决了,接下来,我们就应该解决方块翻转后所处的位置的问题了,因为只有事先知道方块翻转后所处的位置,才能够对那个位置的空间范围进行判定,判定它是否能够容纳方块。可以确定的是,无论方块怎么翻转,都处在方块数组中,也就是说方块必定是在游戏地图中某一4x4个格子的空间范围内。方块数组在游戏地图中的坐标是确定的,不确定的是方块翻转后到底处在方块数组的哪个位置,为了解决这个问题,我们可以限定方块在方块数组中的存储原则是靠左、靠上,这样,无论翻转怎么翻转,方块数组中第一行和第一列都是有方块的,这样也就确定了方块在方块数组中的位置,也就可以得知方块翻转后在游戏地图中的位置了。假定方块数组的横纵坐标是x和y,那
48、么,这个位置就是,长条形的方块翻转后所处的那一行是游戏地图的第y行,所占的列是第x到x+3列,长条形和田字形以外的五种方块翻转后的所占的行数是游戏地图的第y和第y+1行,所占的列是第x到x+2列。所以,如果以上空间有空格子,方块就能够翻转。据此,我们可以列出方块翻转的条件判定表,如表4.2所示:表4.2 方块翻转条件判定表12345678所有条件落下TFFFFFFF田字形方块T 长条形方块1x4形态TT4x1形态T其它五种方块2x3形态TT3x2形态T第y行, x、x+3列空TF第y、y+1行x、x+2列空TF所有动作翻转不能翻转2翻转越界纠正由上述判定表可以看出,只要方块翻转后所处的空间足够
49、,方块就能够翻转,但是,如果方块翻转后所处的空间不足够,而在它的另一边却有足够的空间呢?比如,一个方块在它左边正好差一个格子的空间才能够翻转,但是它的右边恰好有一个格子的空间,这种情况,如果方块不能够翻转,就不方便用户操作,如果能够翻转,就会发生越界,将已经存在的方块挤占掉。要想实现翻转又不发生越界,那么,就应该在方块翻转后把它往右边移动一个格子,然后再绘制方块,这样,方块就不会挤占掉其它已经固定住的方块了。同样,方块在边界处时,翻转后不仅可能翻出地图外,还可能发生数组越界,当然,只需要将地图数组定义得大一些,就能够避免数组越界错误,对于方块越界,如果在它的另一边有足够空间,那么,就应该把方块
50、往另一个方向移动适当的单位,纠正方块越界错误。结合上述判定表,可以列出方块翻转-越界纠正判定表,如表4.3所示:3.3.5满行消除JAVA图形类中提供了一个方法,copyArea(int x, int y, int width, int height, int dx, int dy),这个方法的作用是将组建的某一区域复制到由dx和dy指定的水平距离和垂直距离所在的区域。利用这个方法,可以消除满行。那么,当方块落下去后,如何判断有行需要消除呢?如概要设计中所述,游戏地图中有方块的区域可以用2表示,当方块落下去后,判断某一行是否全部为2,如果全为2,即表示这一行已满,需要消除,这个时候,就可以利用
51、copyArea这个方法将这一行消去了。消去一行后,要继续向下检测,如果下一行是满行,消除,否则再往下检测,一直将落下的方块所占的行数全部检测完为止。假定,以竖直状态落下一个长条形的方块,很显然,方块一共占据了四行。这时候,应该从长条形的方块占据的第一行开始检测,不管期间是否有消行,都必须将长条形的方块所占据的四行全部检测完为止。并且记录下消去的行数,方块消行完成后,增加相应积分。但是,这里面又会遇到一个问题,因为并不是所有方块所占的行数都一样,方块落下后到底该检测多少行呢?考虑到方块落下后最多占据四行,以及计算机运算的高速性,可以设定每一次方块落下后都往下检测四行。方块消行的流程图如图4.1
52、3所示:方块落下是否有消行否检测第一行检测第二行消去该行是是否有消行消去该行检测第三行是否有消行检测第四行消去该行否是消去该行是否有消行否是统计所消行数,增加相应积分结束开始图4.13 方块消行流程图所有条件落下TFFFFFFFFFF田字形方块T 长条形方块1x4形态TTTT4x1形态T其它五种方块2x3形态TTTT3x2形态第y行, x、x+3列空TFFF第y、y+1行x、x+2列空TFFF另一边有足够空间TFTF所有动作翻转不能翻转翻转越界纠正表4.3 方块翻转-越界纠正判定表方块翻转处理的流程图如图4.12所示:接收到翻转信息方块是否落下不能翻转否是翻转后是否有足够空间不能翻转否是翻转后是否越界否直接翻转翻转越界纠正是结束结束图4.12 方块翻转处理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 交通拥堵对企业出行的影响分析
- 创意广告与品牌塑造
- 2025-2030中国VR体感设备行业市场发展趋势与前景展望战略研究报告
- 煤气制造租赁合同
- 中介房产委托出售协议书范例
- 二零二五版担保人签定免责协议书
- 创新型企业如何运用知识产权推动发展
- 工程入股合作协议书十
- 2024-2030年中国健康医疗大数据行业发展运行现状及投资战略规划报告
- 企业培训师的角色与技能
- 形势与政策(2025春)超星尔雅学习通答案满分章节测试
- 国企集团公司各岗位廉洁风险点防控表格(廉政)范本
- ISO28000:2022供应链安全管理体系
- 2024年浪潮入职测评题和答案
- 《艺术学概论考研》课件艺术本体论-模仿论
- 南站二期标识设计变更003精神堡垒施工图
- 电厂防腐涂装培训ppt课件
- 履带-轮式爬楼梯电动轮椅设计【带图纸】
- 设计费投标报价表
- 全矿井风量测定及风表操作
- 中国历朝历代地图大全
评论
0/150
提交评论