【实训项目】基于Java的小游戏:俄罗斯方块

1.导入项目源代码。

2.修改项目编码为GBK

3.设置项目的SDK环境配置

4.设置编译器的版本为1.8

5.添加JavaX组件包依赖。

1.运行程序,打开项目代码,运行后初始界面如图所示。

2.用户开始新游戏,用户运行程序后,选择右上角“游戏”选项卡,可选择开始游戏和设置游戏的难度,点击开局选项后,游戏开始运行。

3.游戏音乐加载,用户开始游戏后,会自动开启语音提示,告诉用户游戏已经开始。在游戏结束后,也会有语音提示用户游戏已经结束。

4.难度选择,点击右上角游戏可选择不同的难度,选择的难度不同,方块形状不相同。除了预设的三个难度外,还提供了用户自主调整速度的滑块选项。点击自定义后,将会弹出滑块提供用户修改方块的下落速度。在弹出的选项中,还提供了一些基本的设置例如背景颜色,方块是否上涨,背景音乐开关。

5.方块上涨,在游戏开始时,用户可以在自定义中设置方块是否上涨,若设置方块是否上涨后,游戏下方将会有随机方块上涨。增加游戏难度。

6.方块颜色,用户在游戏选项卡中,可以改方块的颜色,根据自己的喜好调整自己喜欢的颜色。

7.版本信息,在帮助选项卡中,可以查看该游戏的版本状态和开发作者信息。

1.开始游戏代码主要部分如下图所示,开局代码逻辑负责初始化游戏状态,并开始游戏循环。首先会初始化游戏画面创建GameCanvas对象,设置游戏区域大小、颜色等参数。创建PreView对象,用于预览下一个俄罗斯方块。设置游戏分数、等级、游戏是否结束等参数为初始值。创建 Block 对象,随机选择一个俄罗斯方块的形状和初始位置,并将其添加到游戏画面中。创建Timer对象和MyTask对象,设置计时器,每隔一定时间执行一次run方法。创建play线程,用于控制游戏循环。play线程中,首先检查当前俄罗斯方块是否已经停止下落,如果停止,则生成新的俄罗斯方块。然后判断游戏是否结束,如果游戏未结束,则继续游戏循环。

2. .难度选择实现,游戏难度选择通过 Zidingyi 类实现,用户可以在自定义设置界面选择不同的难度等级,从而改变游戏中方块的种类和下落速度。当用户选择不同的方块形状种类时,MenuActionListener 类会根据用户的选择设置 Block 类中的 addl 属性。addl 属性决定了方块形状的种类和数量,数值越大,方块种类越多,难度越高。当用户滑动滑动条时,jsl 对象会更新其值,newspeed 变量会根据滑动条的值计算方块的下降速度。newspeed 变量越小,计时器执行间隔越短,方块下降速度越快。当用户点击“确定”按钮时,Zidingyi 类会根据用户的设置更新游戏参数,包括方块形状、下落速度、自动上涨、游戏声音和背景图片等。Constant.step 变量会根据用户选择的下落速度更新,从而改变方块的下降速度。游戏界面会根据用户的设置更新等级显示和背景图片。

3. 方块自动上涨功能使得方块在游戏过程中自动向上移动,直到遇到障碍物停止idingyi 类中包含一个复选框 jc1,用于控制方块是否自动上涨。当用户勾选复选框时,MyFrame 类中的 high 变量会设置为 true,表示开启方块自动上涨功能。在 MyTask 类的 run 方法中,如果 high 变量为 true,则执行方块上涨的逻辑。run 方法中,会调用 block.earse 方法清除方块当前位置的图像,然后更新方块的位置,并重新绘制方块。

4.结束游戏。游戏结束的判断逻辑主要发生在 play 线程中,每当生成新的俄罗斯方块时,都会进行一次游戏结束的判断。创建新的俄罗斯方块后,首先调用 block.isMoveAble 方法判断方块是否可以下落到初始位置。isMoveAble 方法会检查目标位置是否超出游戏区域边界,以及目标位置是否已经有其他方块占用。如果新方块的初始位置已经被其他方块占用,则表示游戏区域已经被填满,无法再生成新的方块,游戏结束。

6.键盘控制代码实现。键盘控制是俄罗斯方块游戏的重要交互方式,用户可以通过键盘操作控制方块的移动、旋转和加速下落等。MyFrame 类中重写了 addKeyListener 方法,添加了一个 MyListener 类对象作为键盘监听器。MyListener 类继承自 KeyAdapter,重写了 keyPressed 方法,用于处理键盘按键事件。支持的按键操作包括:

上键 (VK_UP): 旋转方块。

下键 (VK_DOWN): 下移方块。

左键 (VK_LEFT): 左移方块。

右键 (VK_RIGHT): 右移方块。

空格键 (VK_SPACE): 加速下落方块。

P 键 (VK_P): 暂停游戏。

C 键 (VK_C): 继续游戏(从暂停状态恢复)

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

编程练习——俄罗斯方块简单版(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

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

视频加载中…

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。