Java程序设计课程作业报告

作业:俄罗斯方块游戏

姓名

赵璐媛

学号

程序得分

90%

作业报告

得分10%

实验总分

100%

作业目的:

  • 掌握基本的图形程序设计方法

  • 掌握Java事件处理程序编写方法

  • 掌握编写基于TCP或UDP协议的网络通讯程序

  • 掌握Java的流、文件、多线程等编程技术

作业结果(学生填写):

    • 程序设计思路(300字以上,可附流程图或类图)

类之间的关系图

(注:折线箭头仅代表后者为前者的一个实例,弯箭头为继承,双向箭头为相关。)

GameFrame

GameView

Unit

Main

WatchView

DoubleGameFrame

UnitKey

CommunicateView

各个类说明

(注:红色的为类名,黄色的为该类中比较重要的实例对象。)

  1. 程序入口:Main

main方法里弹出选择提示,选择单人模式则进入singleGame函数,创建GameFrame类进行游戏(详见第2条)

选择双人模式则进入doubleGame函数,创建DoubleGameFrame类(继承自GameFrame类)进行游戏(详见第3条)

  1. 单人模式框架类:GameFrame

继承自JFrame类,包含两个主体部件GameView和WatchView(详见第4条和第5条)

1.构造方法设置布局,为WatchView的对象watch的JButton添加鼠标监听器控制游戏开始和暂停,添加键盘监听器调用GameView的对象game的方法控制方块,以及计时器timer调用game中的方法控制方块下落和游戏的开始暂停;

2.方法updateData在方块落致底部时由timer调用,令game和watch更新游戏数据(如消去行,提取一个新的下落方块,增加得分,通过关卡,改变timer的延时加快方块下落速度等),返回值为消去的行数;

3.方法resetGame在每次开始新游戏之前对数据进行重置;

4.方法restartGame在暂停时恢复游戏,否则开始新游戏;

5.方法pauseGame暂停游戏;

6.方法stopGame在游戏结束时弹出提示信息。

  1. 双人模式网络通信框架类:DoubleGameFrame

继承自GameFrame类,在此基础上又新增一个主部件CommuicateView(详见第6条)

1.构造方法使用给定的ip和发送及接受端口建立网络通信,设置布局,建立四个线程sendThread、acceptThread、sendDataThread、acceptDataThread通过输出输入流及ImageIO分别发送、接受战况视图,通过输入输出流发送、接受战况数据(对方是否消去多重行数);

2.方法creatView通过截屏创建己方战况视图并返回;

3.重写父类的方法updateData、resetGame、restartGame、pauseGame、stopGame,取消了开始暂停功能,新增winGame方法,赢得游戏则进入winGame弹出提示信息,否则进入stopGame弹出提示信息。

  1. 游戏视图类:GameView

继承自JPanel类,通过此类操纵并显示游戏中的方块,出现在框架的最左边;

1.构造方法设置格式布局,以绿色背景的JLabel数组box填充,nextUnit列表存储后续的Unit方块(详见第7条),movingUnit是正在移动的Unit方块;

2.方法romoveRow消去可消去的行并返回消去数量、addRow增加指定行数;

3.方法creatNextUnit向nextUnit中添加后续的方块Unit;

4.方法getNextUnit从nextUnit中取出并试着绘制新方块movingUnit,若无法绘制,返回false,说明方块已落至顶部、游戏结束;

5.方法moveUnit根据给定的指令变换或移动正在活动的方块movingUnit,在方块落至底部的时候返回false;

6.方法paintUnit被getNextUnit和moveUnit所调用,通过改变JLabel的透明属性显现方块,试着在给定位置重新绘制正在移动的movingUnit,若超出边界或与已有方块重合则不绘制,返回false;

7.方法resetGame和endGame分别完成界面的重置、停止所有方块移动。

  1. 数据视图类:WatchView

继承自JPanel类,此类中包含数据游戏得分score、游戏关卡level,可观察当前游戏得分、关卡、下一个方块,可通过开始和暂停按钮开始或暂停游戏,出现在框架的中间;

1.构造方法设置布局;

2.方法resetData在新一轮游戏开始时重置数据;

3.方法addStartListener和addPauseListener分别为开始和暂停按钮添加监听器;

4.方法updateData更新面板上的分数、关卡、下一个方块的信息;

5.方法getLevel为外部传递当前关卡(主要用于设置方块下落速度)。

  1. 通信视图类:CommunicateView

继承自JPanel类,此类实时显示对方的游戏战况,只在双人模式中有,出现在框架最右边;

1.构造方法设置布局;

2.方法setImage更新数据域对方战况img,并调用提供的重绘方法repaint;

3.重写方法paint,设置绘图区域与放缩,被repaint方法调用。

  1. 方块类:Unit

此类中包含一个点location描述方块的位置,以及一个int数组key来描述方块的种类及形状(详见第8条)

1.两种构造方法,一种是在指定位置生成一个随机形状的Unit,另一种是用提供的key在指定位置生成指定形状的Unit;

2.方法getShape返回此Unit的形状绘制在坐标系中的坐标点数组(WatchView使用);

3.方法getChangedUnit返回此Unit经过变形或位移产生的新Unit;

4.方法getPaintLocation返回此Unit的绘制在坐标系中的坐标点数组(GameView使用)。

  1. 方块键值类:UnitKey

此类中list包含了所有方块形状绘制在坐标系中的点的数组;

1.方法getRandomKey产生一个随机的key值返回,key值对应着某个方块的形状;

2.方法getNextKey返回给定key值的方块经变形后对应的key值;

3.方法getShapeByKey解读给定key值对应的方块的形状,以Point数组的形式返回形状。

    • 程序使用说明(文字说明,并附界面抓图)

      1. 若要进行双人模式,可改变Main类中doubleGame的IP地址和端口号(设定的两端口号之差需大于1)。按(对方IP,对方接受端口,己方接受端口)的顺序设置。

示例:A的设置(B的IP,B接受端口,A接受端口)

B的设置(A的IP,A接受端口,B接受端口)

      1. 直接运行程序,选择游戏模式。

      1. 单人模式下可选暂停、开始,在非暂停时候点开始则直接开始新游戏。点击开始后通过方向键左右上下控制方块移动、变形、加速。右侧可看到下一个方块以及当前分数、关卡,每过1000分升一级,下落速度加快三分之一。游戏结束时提示最终得分,点开始开启新游戏。

      1. 双人模式下Main中提前设置好后就可以直接开始游戏,此时开始暂停功能已禁用,在单人模式基础上增加了观察对方战况的区域(有可能因为对方屏幕视图读写异常而花屏或卡着,暂不知道怎么处理这种情况)。若一次消去多行,对方便会涨一行。直至一方输掉游戏,游戏结束,分别提示双方是输是赢。

评语(总分优秀和不及格的报告必须有评语):

评阅日期:2015年4月30日

Java课设--俄罗斯方块Tetris的更多相关文章

  1. JAVA课设---五子棋

    1.团队博客链接 JAVA课设-五子棋-团队博客 2.个人负责模块: ①对鼠标事件的处理 , 此模块需处理五子棋的放置问题.颜色转换问题.以及当五子连线时弹出窗口显示结果. ②对MainFrame中主 ...

  2. JAVA课设个人博客--多源数据教学管理系统

    JAVA课设个人博客--多源数据教学管理系统 1.团队课程设计博客链接 https://www.cnblogs.com/hq9-/p/10278470.html 2. 个人负责模块或任务说明 主要模块 ...

  3. java课设数据库打包报错

    最近在交java课设时把东西打包给老师遇到许多奇葩问题, 首先是数据库复制时提示: 这是数据库与SQL server服务没有分离(我用的是SQLserver暂时,对于其他的,我以后会继续尝试)可以进行 ...

  4. 2018-2019学年第一学期Java课设--魔塔

    目录 Magic-Towers 一.团队名称.团队成员介绍.任务分配 团队名称:MoTa 团队成员介绍 任务分配 二.项目简介 三.项目采用技术 四.项目亮点 主界面显示主要信息功能 游戏动画 五.项 ...

  5. JAVA课设——中药古籍《太平圣惠方》数据处理与分析系统

    一.配置JAVA环境 本次课设是在Windows 10(64bit)平台上实现的,所以首先得配置下JAVA环境. 步骤一:先下载一个JDK(1.7)安装包,安装好JDK: 步骤二:JDK环境配置(由于 ...

  6. Java课设(学生信息管理系统)

    1.团队课程设计博客链接 http://www.cnblogs.com/Min21/p/7064093.html 2.个人负责模板或任务说明 设计登陆界面和学生信息界面的设计,学生信息的显示.退出等功 ...

  7. java课设 五子棋代码编写(团队)

    1. 团队课程设计博客链接 http://www.cnblogs.com/yzb123/p/7063424.html 2.个人责模块或任务说明 1.主函数编写,设置图形界面 2,设置功能按钮 3.使用 ...

  8. JAVA课设 学生基本信息管理 团队博客

    1.成员 邹其元 网络1512 201521123060 杨钧宇 网络1512 201521123062 2.项目Git地址 团队项目码云地址 //添加截图 3. 项目git提交记录截图(要体现出每个 ...

  9. java课设

    1.代码截图: 2.设计思路 建立GUI界面,系统产生一个随机数(对用户不可见),然后用户输入猜测数,系统根据用户每次输入的数据给出评语(偏大,偏小,猜测成功).当用户最终猜测成功后,就把当次的随机数 ...

随机推荐

  1. 实例甜点 Unreal Engine 4迷你教程(6)之三个重要基础操作SpawnActor、TArray的Add和Remove

    本小节的教程需要完成前置教程:建议阅读<实例甜点 Unreal Engine 4迷你教程(5)>,因为5里面提到了本节的工程,不过也可以在不看5的前提下直接阅读本教程. 第一步:Empty ...

  2. eclipse导入lombok后打不开(如果你的lombok不是最新的,那就来下载最新的)

    如果你的不是最新的,去这里下载最新版的,先点击左上角的Download红方块,然后再点击下图中的位置 https://projectlombok.org/ 下载完后把eclipse关掉,双击下载的ja ...

  3. QueueAPI记录

    队列是一种数据结构.它有两个基本操作:在队列尾部加人一个元素,和从队列头部移除一个元素就是说,队列以一种先进先出的方式管理数据,如果你试图向一个 已经满了的阻塞队列中添加一个元素或者是从一个空的阻塞队 ...

  4. 【物联网云端对接-3】通过MQTT协议与微软Azure IoT Hub进行云端通信

    在上一篇文章<通过MQTT协议与阿里云物联网套件进行云端通信>中,我们介绍了通过MQTT对接阿里云的物联网套件.其实同样的代码,稍加调整也可以对接到微软Azure IoT hub上,不过需 ...

  5. Python 正确重载运算符

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Helvetica } 有些事情让我不安,比如运算符重载.我决定不支持运算符重载,这完全是个人 ...

  6. 利用pyinotify监控文件内容,像tailf命令但比它更强

    Linux的tail/tailf命令使用了内核提供的inotify功能,下面的Python例子也使用inotify实现比tail/tailf更强的监控文件功能. watchfile.py #!/usr ...

  7. 【Win10】zip安装MySQL

    1. mysqld初始化时my.ini的第二个默认位置是%windir%/my.ini rem 1.查看此变量对应的目录,在此目录下编辑 my.ini,mysqld会自动找到 echo %WINDIR ...

  8. APUE 3 -- 信号(signal)<I> :概念

    信号可以理解成一种软件中断.他提供了一种异步处理事件的方式.每个信号都有一个与之对应的信号名,这些信号名都带有SIG前缀,如:SIGABRT,SIGALARM.头文件signal.h 中定义了所有的信 ...

  9. (转载)公开的海量数据集 Public Research-Quality Datasets

    转载自:http://rensanning.iteye.com/blog/1601663 海量数据数据集 海量数据(又称大数据)已经成为各大互联网企业面临的最大问题,如何处理海量数据,提供更好的解决方 ...

  10. 最长单词(一星级题目) 本来是很简单的,其实就是加个flag

    随机了一个题目: 给一个词典,找出其中所有最长的单词. 这道题对于初学者还是很有用的,毕竟用的逻辑是比较复杂的 样例 在词典 { "dog", "google" ...