编程练习——俄罗斯方块简单版(Java实现)

1.目标需求分解俄罗斯方块游戏基础版,我们可以分为四个小部分:1、随机方块。2、游戏背景(矩形方格)。3、游戏规则控制系统。4、以及游戏界面。1

编程练习——俄罗斯方块简单版(Java实现)

1.目标需求分解

俄罗斯方块游戏基础版,我们可以分为四个小部分:1、随机方块。2、游戏背景(矩形方格)。3、游戏规则控制系统。4、以及游戏界面。

1.1 随机方块

随机方块一共五种基本图形(基础图形如下图所示),也可以在上图的基础上增加更为复杂的图形。

编程练习——俄罗斯方块简单版(Java实现)

在游戏中随机方块应该可以进行无次数的右旋转。

1.2 游戏背景

游戏背景是一个矩形方格,主要功能有两个:1、用于摆放随机方块,在操作游戏时,可以控制随机方块在背景方格中移动。当随机方块不再具有移动的条件时,随机方块固定在游戏背景方格中。2、当游戏背景方格满行时,可以消除整行,并让消除行上方的所有元素向下移动一行。

随机方块在游戏背景中什么时候停止移动并计入到背景中,在游戏规则控制系统中进行操作。

1.3 游戏规则控制系统

游戏规则控制系统是整个游戏的核心部分,它包含了三个基本部分:随机方块控制、背景控制、自动控制。

1.3.1 随机方块控制部分

随机方块的控制它包含了随机方块的旋转控制、水平移动控制、向下移动控制。这三部分控制都是人工操作,并且有严格的操作约束。

· 旋转约束:随机方块在背景旋转时,出现两种情况时应当停止旋转。1、当随机方块在背景的左右边界时,旋转后部分可见内容溢出背景边界。2、当旋转时,与背景其它可见内容重合时,应当停止旋转。

· 水平移动约束:与旋转约束的条件是一样的。

· 向下移动约束:1、当移动到背景底部时,应当停止向下移动。2、当向下移动时与背景其它可见内容发生重叠时,应当停止移动。

向下移动除了可以人工操作外,还应该由系统自动操作。自动向下移动的频率可以设置为每秒一个单位。当向下移动约束被触发时,标志着当前随机方块操作的结束。

1.3.2 背景控制

背景控制主是非人工操作,由系统自动操作完成。背景控制主要有三个操作:

· 生成新的随机方块:新的随机方块应该出现在背景矩形的顶端,并且是在固定的位置。如果新的随机方块产生后,与背景可见元素重合,说明背景中的方块没有下移的可能,游戏结束。

· 判断背景满行消除:随后执行背景满行消除的一系列操作。

· 背景更新:当随机方块无法下移时,应当更新当前背景。

· 游戏开始:游戏开始时,保证游戏背景中无可见元素。并产生新的随机方块。

1.4 游戏图形界面设计

游戏界面主要体现两个作用,第一个作用是显示界面,界面至少能够显示出三部分内容:1、背景以及背景中的可见元素。2、随机方块的移动变化轨迹。3、游戏的开始按钮、以及下一个随机方块图形。游戏界面至少包含下图中这些信息。

编程练习——俄罗斯方块简单版(Java实现)

第二个作用是控制监听。为了接入人工操作、我们需要对整个窗体进行按键监听,根据不同的按键来控制随机方块。当按下光标键”左”或”右”,表示随机方块向左或右移动一个单位。当按下光标键”下”,表示向下移动一个单位。当按下光标键”上”,表示向右旋转一个单位。

2. 程序设计

在需求分析中整个游戏设计成三个部分,根据要求我们设计了五个类来完成需求的目标功能,类图如下所示:

编程练习——俄罗斯方块简单版(Java实现)

功能实现类图

2.1 详细设计

以上类中的主要成员变量和方法如下:

1.Matrix类:矩阵,由整型二维数组实现。主要提供了功能有:矩阵的相加方法、旋转方法、矩阵元素设置、矩阵数据判断等方法。Matrix中的成员变量和方法较多,下面用两个表进行说明。

注意Matrix中的方法在游戏中没有被全部的使用到,这个类是一个单独的矩阵类。

2. TetrisBlock:随机方块,规则矩阵,是Matrix的子类。包含成员变量如下:

· private int type:表示方块的形状参数,默认为0。

· public static final int TYPE1:默认为0,表示该方块是随机方块图形二。

· public static final int TYPE2:默认为1,表示该方块是随机方块图形一。

· public static final int TYPE3:默认为2,表示该方块是随机方块图形三。

· public static final int TYPE4:默认为3,表示该方块是随机方块图形四。

· public static final int TYPE5:默认为4,表示该方块是随机方块图形五。

· private static Random rand:随机数类,用于随机生成方块。该变量声明并初始化

TetrisBlock方法如下:

· public TetrisBlock(int row,int column,int type):构造方法,需要设置行、列,以及方块的形状。

· public static TetrisBlock getRandomBlock():随机生成不同类型的方块对象。

· public Color getColor():由方块的类型决定颜色,返回颜色对象。

3. TetrisBase:游戏背景矩形框,用于存放随机方块元素了,是Matrix的子类。成员变量为两静态整型常量row、column分别表示矩阵的行和列数。默认值row为14,column为10。方法说明如下:

· public TetrisBase():构造方法,以row和column为参数调用父类构造方法。

· public Matrix add(TetrisBlock addBlock,int rowIndex,int columnIndex):覆盖了父类方法,在错位相加时,如果addBlock中的有效数据元素没有被加入到TetrisBase中,返回相加前的矩阵。

· public void clearRow():清除正行。当前矩阵的行中充满有效数据时,清除该行。并调用rowDown方法。

· private void rowDown(int row):矩阵下移,让row以上的矩阵元素下移一个单位。

4. Option:控制类,主要控制随机方块的移动、以及旋转。其成员变量如下:

· private static int x,y:表示随机方块TetrisBlock和TetrisBase错位相加时的偏移量,默认x=0,y=3。

· private static boolean OptionOver:表示当前随机方块操作完结状态,为false表示操作未完成,true表示已经完成。

Option提供的控制方法如下表所示:

还有一个无关方法printTetris(Matrix t),用于测试矩形背景和方块相加后的元素图形。

5. GameGui:游戏界面,JFrame子类。它包含了多个界面Swing元素,我们不一一列举。包含的其它成员变量如下:

· private TetrisBlock currGrap:当前方块。

· private TetrisBlock nextGrap:下一个方块。

· private TetrisBase te:游戏背景矩形。

· private KeyListener gameLi:按键监听对象。

GameGui包含的方法如下表所示:

具体实现代码可在gitee上进行下载:https://gitee.com/brewerJava/JavaLearn/tree/master/Tetris/src/edu

程序运行后,游戏视频如下:

视频加载中…

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/9924.html

(0)
上一篇 2023年 4月 22日 下午11:54
下一篇 2023年 4月 22日 下午11:54

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信