1.目标需求分解

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

1.1 随机方块

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

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

1.2 游戏背景

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

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

1.3 游戏规则控制系统

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

1.3.1 随机方块控制部分

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

旋转约束:随机方块在背景旋转时,出现两种情况时应当停止旋转。1、当随机方块在背景的左右边界时,旋转后部分可见内容溢出背景边界。2、当旋转时,与背景其它可见内容重合时,应当停止旋转。水平移动约束:与旋转约束的条件是一样的。向下移动约束:1、当移动到背景底部时,应当停止向下移动。2、当向下移动时与背景其它可见内容发生重叠时,应当停止移动。向下移动除了可以人工操作外,还应该由系统自动操作。自动向下移动的频率可以设置为每秒一个单位。当向下移动约束被触发时,标志着当前随机方块操作的结束。

1.3.2 背景控制

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

生成新的随机方块:新的随机方块应该出现在背景矩形的顶端,并且是在固定的位置。如果新的随机方块产生后,与背景可见元素重合,说明背景中的方块没有下移的可能,游戏结束。判断背景满行消除:随后执行背景满行消除的一系列操作。背景更新:当随机方块无法下移时,应当更新当前背景。游戏开始:游戏开始时,保证游戏背景中无可见元素。并产生新的随机方块。1.4 游戏图形界面设计

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

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

2. 需求设计

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

功能实现类图

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。

俄罗斯方块java_编程练习——俄罗斯方块简单版(Java实现)相关推荐

  1. 我的世界中国版怎么更改java_我的世界中国版Java 不删档测试问题指引

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一.Q:为什么我安装完启动器后,点击快捷方式启动一直没有反应? A:请检查您的电脑安装的.NET Framework版本是否适用于您当前windows系统 ...

  2. 中国版我的世界弹出java_我的世界中国版JAVA不删档测试问题指引

    Q:为什么我安装完启动器后,点击快捷方式启动一直没有反应? A:请检查您的电脑安装的.NET Framework版本是否适用于您当前windows系统版本,如不相符,请卸载当前.NET版本,并安装对应 ...

  3. 我的世界中国版配置java_我的世界中国版Java 不删档测试问题指引

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一.Q:为什么我安装完启动器后,点击快捷方式启动一直没有反应? A:请检查您的电脑安装的.NET Framework版本是否适用于您当前windows系统 ...

  4. Java编程思想第四版——第十五天

    2012-04-23 121-131/913 Java编程思想第四版--第十五天 5.5.3 终结条件 通常不能指望finalize(),必须创建其他的"清理"方法,并明确的调用它 ...

  5. 一些简单的java编程题(2) ————古典问题(兔子问题)

    版权声明: 本文为博主原创文章,未经博主允许不得转载. /* (程序头部注释开始) 版权声明:保留个人权利. 如程序有不当之处,敬请指正.* 文件名称: <一些简单的java编程题(2) --- ...

  6. Java编程思想第四版学习总结

    Java编程思想第四版学习总结 文章目录 Java编程思想第四版学习总结 第 1 章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 实现方案的隐藏 1.4 方案的重复使用 1.5 继承:重 ...

  7. 一些简单的java编程题(1) ————求10000以内的完数

    版权声明:本文为博主原创文章,未经博主允许不得转载. /* (程序头部注释开始) 版权声明:保留个人权利. 如程序有不当之处,敬请指正.* 文件名称: <一些简单的java编程题(1) ---- ...

  8. Java网络编程(第四版)

    网站 更多书籍点击进入>> CiCi岛 下载 电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 电子书下载(皮皮云盘-点击"普通下载" ...

  9. Java面向对象编程(第2版)_学习记录

    <Java面向对象编程(第2版)> 孙卫琴 编著 文章目录 一.介绍 (一)平台与开发环境 (二)一些知识 (三)数组 二.类的生命周期 (一)类的加载 1. 加载 2. 连接 3. 初始 ...

最新文章

  1. LSOF 安装与使用(功能强大)
  2. MySQL 和 Innobackup 不定期卡住的秘密
  3. php的工厂设计模式,PHP中的工厂设计模式是什么?
  4. 开源 多进程 框架 c++_linux fork多进程并发服务器模型之C/C++代码实战
  5. [css] 给一个图片设置透明有哪些方式呢?
  6. 超级终端软件测试工程师,超级终端是否可用来测试 RS485?
  7. 安装ceston8出现timeout_瓦罗兰特Valorant:显示逾时怎么办 瓦罗兰特time out解决
  8. 【CentOS 7架构8】,域名跳转#171221
  9. ASCII、Unicode、GBK和UTF-8字符编码的区别联系[转]
  10. mysql cmake ncursor_在移植的过程中主要会用到boost库、cmake工具以及wt库的编译。...
  11. java登陆密码加密怎么做,Java如何实现密码加密
  12. 全球与中国手持式凿岩机市场供需情况分析及十四五趋势预测报告2022-2027年版
  13. 美团外卖小哥竟开发阿里云盘,抢先首发
  14. 安卓模拟ibeacon_【首发】联接真实与虚拟世界:Estimote Beacons Developer Kit 低功耗蓝牙开发套件...
  15. go语言快速入门:流程控制(7)
  16. SSL/TLS协议详解(三)——证书颁发机构
  17. 如何在网页版163邮箱中添加别的邮箱
  18. 零基础小白学python之【贝壳房价爬取】(一)
  19. *《Qt5+安装包制作(Qt Installer Framework)》二
  20. 【X波段雷达衰减订正方法】

热门文章

  1. 解决3ds Max在高分辨率屏幕下显示字体偏小的问题
  2. 北京市法官去年人均结案357件 居内地首位
  3. ChatGPT离自我意识还有多远
  4. 普萘洛尔行业调研报告 - 市场现状分析与发展前景预测
  5. 互联网最坏的时代可能真的来了
  6. excel打开之后很小
  7. Springboot 实现 PC端 微信扫码登录
  8. GIT使用—创建一个版本库
  9. 测试开发是什么?什么是测试开发工程师?软件测试开发详谈
  10. 浙江万里学院计算机与科学技术,浙江万里学院计算机与信息学院介绍