编程练习——俄罗斯方块简单版(Java实现)
俄罗斯方块游戏基础版,我们可以分为四个小部分:1、随机方块。2、游戏背景(矩形方格)。3、游戏规则控制系统。4、以及游戏界面。
随机方块一共五种基本图形(基础图形如下图所示),也可以在上图的基础上增加更为复杂的图形。
在游戏中随机方块应该可以进行无次数的右旋转。
游戏背景是一个矩形方格,主要功能有两个:1、用于摆放随机方块,在操作游戏时,可以控制随机方块在背景方格中移动。当随机方块不再具有移动的条件时,随机方块固定在游戏背景方格中。2、当游戏背景方格满行时,可以消除整行,并让消除行上方的所有元素向下移动一行。
随机方块在游戏背景中什么时候停止移动并计入到背景中,在游戏规则控制系统中进行操作。
游戏规则控制系统是整个游戏的核心部分,它包含了三个基本部分:随机方块控制、背景控制、自动控制。
随机方块的控制它包含了随机方块的旋转控制、水平移动控制、向下移动控制。这三部分控制都是人工操作,并且有严格的操作约束。
· 旋转约束:随机方块在背景旋转时,出现两种情况时应当停止旋转。1、当随机方块在背景的左右边界时,旋转后部分可见内容溢出背景边界。2、当旋转时,与背景其它可见内容重合时,应当停止旋转。
· 水平移动约束:与旋转约束的条件是一样的。
· 向下移动约束:1、当移动到背景底部时,应当停止向下移动。2、当向下移动时与背景其它可见内容发生重叠时,应当停止移动。
向下移动除了可以人工操作外,还应该由系统自动操作。自动向下移动的频率可以设置为每秒一个单位。当向下移动约束被触发时,标志着当前随机方块操作的结束。
背景控制主是非人工操作,由系统自动操作完成。背景控制主要有三个操作:
· 生成新的随机方块:新的随机方块应该出现在背景矩形的顶端,并且是在固定的位置。如果新的随机方块产生后,与背景可见元素重合,说明背景中的方块没有下移的可能,游戏结束。
· 判断背景满行消除:随后执行背景满行消除的一系列操作。
· 背景更新:当随机方块无法下移时,应当更新当前背景。
· 游戏开始:游戏开始时,保证游戏背景中无可见元素。并产生新的随机方块。
游戏界面主要体现两个作用,第一个作用是显示界面,界面至少能够显示出三部分内容:1、背景以及背景中的可见元素。2、随机方块的移动变化轨迹。3、游戏的开始按钮、以及下一个随机方块图形。游戏界面至少包含下图中这些信息。
第二个作用是控制监听。为了接入人工操作、我们需要对整个窗体进行按键监听,根据不同的按键来控制随机方块。当按下光标键\”左\”或\”右\”,表示随机方块向左或右移动一个单位。当按下光标键\”下\”,表示向下移动一个单位。当按下光标键\”上\”,表示向右旋转一个单位。
在需求分析中整个游戏设计成三个部分,根据要求我们设计了五个类来完成需求的目标功能,类图如下所示:
功能实现类图
以上类中的主要成员变量和方法如下:
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
程序运行后,游戏视频如下:
视频加载中…
Java练手小项目,3个小时带你做出一个俄罗斯方块游戏
学完Java基础,一直想找一个项目实战,俄罗斯方块就是一个不错的实战项目,它原理实现比较简单。
话虽如此,我一开始还是毫无头绪,直到看到一个俄罗斯方块的视频才有了思路。俄罗斯方块还是比较适合新手练习的。
项目视频教程中会带着大家一步一步地实现这个俄罗斯方块游戏的各个功能,为了提高兴趣度,该项目也提供了图形界面。
使用到的知识点主要是JavaSE的知识,这个项目也是为了筑牢你所学的JavaSE基础,如果你也跟着一步一步完成这个项目案例,我相信你的JavaSE基本功、编码能力、分析问题解决问题的能力都会有一个大的提升;
- JDK8.0
- IntelliJ IDEA
小方块
游戏背景图片
•001.课程导读
•002.准备工作
•003.所使用素材
•004.编写小方块类
•005.编写四方格父类
•006.创建7个不同的形状
•007.编写俄罗斯方块主类
•008.初始化7个不同形状的位置
•009.随机生成四方格
•010.创建游戏场景
•011.绘制游戏背景
•012.绘制游戏
•013.绘制游戏主区域
•014.绘制正在下落的四方格
•015.绘制下一个将要下落的四方格
•016.绘制游戏得分
•017.绘制游戏状态
•018.判断方块是否出界
•019.判断方块是否重合
•020.按键一次四方格左移一次
•021.按键一次四方格右移一次
•022.四方格变形
•023.初始化7个形状相对位置
•024.旋转状态1
•025.旋转状态2
•026.旋转状态3
•027.顺时针旋转四方格
•028.判断游戏是否结束
•029.消行并积分
•030.判断四方格能否下落
•031.按键一次四方格下落一个
•032.瞬间下落
•033.编写逆时针旋转四方格方法
•034.创建顺时针旋转
•035.开启键盘监听事件
•036.根据按键做相应事情
•037.将俄罗斯方块窗口设置为焦点
•038.编写四方格自动下落
•039.将start方法添加到main方法中
•040.俄罗斯方块最终效果
俄罗斯方块游戏资料源码下载:
http://www.bjpowernode.com/?toutiao
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。