java程序设计俄罗斯方块_俄罗斯方块单人游戏JAVA程序设计

41528d3028836879cd698677c3999917.gif俄罗斯方块单人游戏JAVA程序设计

目 录1、设计目的 32、系统描述 33、分析与设计 43.1 模块的划分 .42.3 功能分析 .54、系统功能分析及实现过程 54,1 系统功能 64.2 实现过程. .64.3 系统主界面 85、结束语 11参考文献 12附录1、设计目的我们之所以选择开发俄罗斯方块游戏,无可争议, 《俄罗斯方块》是有史以来最伟大的游戏之一。 在曾经发布过的所有游戏中, 《俄罗斯方块》还被认为是仅有的一个能够真正吸引广泛人群的作品。谁能说清楚,迄今为止人们究竟花了多少万个小时在这个游戏上?也许这些时间本来可以被花在更具生产力的活动上。某些批评家也许会声称, 《俄罗斯方块》要比过去二十年间出现的任何东西都要浪费人们的时间。至于我们,则要欣然提名它为 GameSpot 评选出的历史上最伟大游戏之一。 为了怀念经典,也为了能够给大多的计算机用户在工作之余找到一个休闲、娱乐的一个方式,我们小组开始着手用 VB 语言开发一个经典的俄罗斯方块游戏。2、系统描述俄罗斯方块是一款适合大众的游戏软件,它适合不同年龄的人玩。本软件实现的基本功能如下: 游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况和下一个将要出现方块的提示。 游戏控制:玩家可以通过游戏控制功能来控制游戏开始,暂停,结束游戏,游戏难度的设置以及音效控制。玩家游戏信息存储及删除:玩家的得分在前五名时,将会记录在排行榜上,同时可为玩家清空排行榜。3、分析与设计3.1 功能分析3.1.1 模块的划分依据需求分析结果,俄罗斯方块游戏可以分为三个模块:游戏区、游戏控制区、数据操作区。系统模块结构如图:3.1.2 功能分析俄罗斯方块游戏根据游戏界面布局的不同,将系统划分为如下几个功能部分。(1) 游戏显示更新功能。游戏显示更新功能主要是更新显示游戏区域的方块显示,包括控制游戏方块的下落速度,下落方向以及形状改变,并且还需要判断当前游戏方块是否满足消除一行的条件。GameAreaPanel 类就是游戏显示更新的控制类,paint(Graphics g)方法主要负责游戏区域的实时重绘。(2) 游戏方块预览功能。在游戏过程中,当在游戏区域中出现一个游戏方块时,必须在游戏预览区域出现下一个游戏方块,这样有利于游戏者控制游戏的策划。由于在此游戏中存在 8 中不同的游戏方块,所以在游戏方块预览中就需要显示随机生成游戏方块。PreviewPanel 类是游戏预览控制类,在painting(Graphics g)方法中,将根据生成的随机数字显示不同的游戏方块。(3) 游戏方块控制功能。给各种游戏方块设置一个基类,主要包括 begin() (初始化显示)方法,down() (向下移动)方法,left() (向左移动)方法,right() (向右移动)方法,change () (变换角度)方法,downto() (一下到底)方法。在各个游戏子类中,需要具体实现这些方法。(4) 游戏速度分数更新功能。在游戏者进行游戏的过程中,需要按照异地昂的游戏规则给游戏规则给游戏者计算游戏分数,当游戏分数达到一定数量后,就需要给游戏者增加难度,即提高游戏中游戏方块的下落速度。3.2 功能设计3.2.1 方块的设计俄罗斯方块游戏中,具体的游戏方块图形的设计是比较重要的一个方面。因为俄罗斯方块游戏中主要的动作就是控制游戏方块的移动和翻转,以便于组成一行行连续的方块从而增加游的分数。由于主要的游戏动作都集中在这个游戏方块上,因此游戏方块的设计就显得格外重要了。为了增加程序的可扩展性,这里设计一个游戏方块的基类,各个具体的游戏方块都从这个基类开始继承。这样,当需要增加游戏方块时就不用重新设计新的类,只需要从这个基类集成出一个类就可以了。更具基类设计了 8 个派生游戏方块类,其结构如图:3.2.2 旋转方块的设计旋转方块的出现是随机的,而随着游戏级别的提升,每一关出现的旋转方块的数量也会不同,对于七种方块来说,它们在任何一段时间内出现的概率都是一致的,再者,旋转方块需要两个定时器,定时下落和定时旋转。旋转方块的这个性质要求它必须要两个线程才能控制,但是为了充分利用资源,我们可以利用方块控制线程去控制旋转方块定时下落,然后只需再创建一个线程控制它定时旋转即可。确定了两个线程共同控制旋转方块,就会出现一个线程协调工作的问题。如果一个新方块出现的时机正好也是旋转方块出现的时机,程序就会出现紊乱,所以必须保证,在同一时间,正常方块和旋转方块只能出现一个。因为两个线程需要共同控制旋转方块,所以不能用 wait()和 notify()这两个方法去协调线程,而应当利用其它条件去协调两个线程。首先,游戏开始后,旋转方块控制线程可以随机休眠一定时间(这个休眠时间应该是随着游戏级别的提升而缩短的) 。休眠时间结束后,循环检测正常方块是否已经落下,当检测到方块落下后,马上得到一个新方块,然后开启一个循环,在方块没有落下之前让它按一定的时间频率旋转,成为一个旋转方块。对于方块控制线程,在方块落下时应该休眠一定数量的时间,以让旋转方块控制线程有得到旋转方块的机会,如果超出这个休眠时间,旋转方块控制线程还没有得到新方块,则可以认为旋转方块控制线程还处在休眠中,方块控制线程得到一个新方块。休眠时间结束随机休眠一定时间检测现有方块是否已经落下是否能够消行方块是否已经落下是否能够消行休眠一定时间否是得到新方块休眠一定时间旋转方块否是游戏是否结束是否能够消行是否开始结束.3.2.3 方块的翻转与移动方块的翻转与移动比较容易实现,方块移动只需要改变方块的横坐标或纵坐标,然后重新绘制方块即可。方块翻转也只需要改变方块数据第二维turnstate 的值,然后重新绘制方块即可。但是,这里边也会出现一个问题,这何种时候,方块不能再翻转和移动?3.2.4 方块的移动很显然,当方块移动到地图的左右边界处,或者落下去后,不能再继续移动;另一种情况就是,当方块要移动的方向被其他方块挡住时,方块不能再移动。确定方块移动的规则后,接下来就是如何将这种规则用算法表示的问题了。比如,当方块移动的左边界处时,方块不能再继续往左移动了,这个时候,肯定有一个条件成立,那就是方块的横坐标必定是小于或者等于零的。如果方块的横坐标等于 0,方块就不能再移动,那么方块数组的第一列至少有一个值为 1,这种情况比较简单,但是,如果方块数组的第一列全为 0 时,也就是说,当方块数组有 1 的那列碰到边界时,方块才不能移动,这个时候,首次出现 1 的那列的横坐标为 0,而方块数组的横坐标肯定已经小于 0 了。3.2.5 满行消除JAVA 图形类中提供了一个方法,copyArea(int x, int y, int width, int height, int dx, int dy),这个方法的作用是将组建的某一区域复制到由 dx和 dy 指定的水平距离和垂直距离所在的区域。利用这个方法,可以消除满行。3.2.6 翻转越界纠正由上述判定表可以看出,只要方块翻转后所处的空间足够,方块就能够翻转,但是,如果方块翻转后所处的空间不足够,而在它的另一边却有足够的空间呢?比如,一个方块在它左边正好差一个格子的空间才能够翻转,但是它的右边恰好有一个格子的空间,这种情况,如果方块不能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值