Java课设--俄罗斯方块Tetris

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日

时间: 2017-09-06
Tags: 布局, 数组, java, unit

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

java类的问题-java课设:考试自动排位系统

问题描述 java课设:考试自动排位系统 做一个考试自动排位系统,不需要数据库,用户输入考试班级及名单,用户设定考试教室格局,自动排位,要求前后左右都不是本班同学,最后生成图形化座位表,大神帮帮忙! 解决方案 这网上应该有,你自己问一下度娘,无非也就是判断一下,然后输出就好 解决方案二: http://download.csdn.net/download/ilovejava2008/892259 解决方案三: 百度上有很多类似的,搜一下

课设问题,电脑传图片到手机

问题描述 课设问题,电脑传图片到手机 用java做个后台运行的程序,一直监视报警文件(或数据库),若有新记录,则读取然后发送到远程连接的客户端上. 想知道到底这个怎么实现,没有完整思路.这个实现,意思是监视是否有新的图片,如果有,就想办法发送到手机端进行显示. 电脑到手机 图片的传送,尝试用了http,不清楚怎么主动让电脑端把图片发送到手机端.本人比较小白.求个思路.本人新来没几天,C币都下载资源了,没有C币给各位大神..真心求个完整思路

计算机网络课设之基于UDP协议的简易聊天机器人

前言:2017年6月份计算机网络的课设任务,在同学的帮助和自学下基本搞懂了,基于UDP协议的基本聊天的实现方法.实现起来很简单,原理也很简单,主要是由于老师必须要求使用C语言来写,所以特别麻烦,而且C语言的socket编程我基本没有接触过,顶多对java网络编程有一点涉猎.下面我将自己所学的知识做了一个总结,希望可以对想要去接触socket(网络)编程的同学有一个帮助,当然想要学好网络编程肯定是离不开几本书的支撑的,这篇文章主要通过一个机器人聊天的案例帮大家入下门. 注意:想要成功运行的前提条件

结构-c++ 写旅馆的课设时遇到 的问题

问题描述 c++ 写旅馆的课设时遇到 的问题 老师的提示: 旅馆近期房间安排可用结构型二维数组(预分配表)表示 近一周的预分配情况. 我用的room[x].month[n][2]和room[x].day[n][2]代表房间x被预订的 信息(month[i][0]代表第i份预订的入住月份) 如果后面又来了个人 要预订这个已经被预订了的房间 怎么判断这个房间是否还能被预订呢(感觉好复杂= = 如果觉得很弱智求轻喷) 解决方案 加一个判空标记flag(BOOLEAN型),如果有人居住就给flag赋值1

数据结构课设,急求代码注释

问题描述 数据结构课设,急求代码注释 #include "stdlib.h" #include "stdio.h" #include "time.h" #define STACK_INIT_SIZE 10 typedef struct { int x; //当前位置的横坐标 int y; //当前位置的纵坐标 char type; //当前位置的属性:墙壁或通道(0/1) bool isfoot; //判断当位置是否已走过, true代表已走过

程序-c语言课设 超长整数处理

问题描述 c语言课设 超长整数处理 解决方案 decimal大数据类型 解决方案二: 楼主 要求是几天内交?

微机课设——交通信号灯自动控制模拟指示系统

一个很水的课设,发出来给学弟学妹们参考参考 采用MFC完成,VS2008环境下编译运行正常. 对于数码管用单独线程维护刷新,由于刷新延时小于1ms,用的是while作为延时,所以不能用release模式,只能debug 系统有 自动模式,手动模式,夜间模式,路人模式(行人控制,可参考http://wenwen.soso.com/z/q184953098.htm) 23:00和5:00会自动进入和退出夜间模式 路人模式由一个单脉冲控制 软件结果图: 硬件结果图:(图中为第一版,无k0-k3及单脉冲

c++-在做一个暴力破解密文的课设,如何快速地匹配文件中的单词?

问题描述 在做一个暴力破解密文的课设,如何快速地匹配文件中的单词? 最近在做一个课程设计,是关于暴力破解密文的.文件中大约有9000个单词,每个单词 占一行,如何快速地去匹配单词呢? 解决方案 先字典序排序.然后二分查找,这是我的想法,当然我觉得也可以用更高级的字符串匹配算法

c++-MFC的C++的课设,帮忙编一下呗,我编了三天都没有思路

问题描述 MFC的C++的课设,帮忙编一下呗,我编了三天都没有思路 3) 在这里采用C++语言实现一个简单的n×n矩阵类,类中包括一些简单的运算等操作具体要求如下:1使用构造函数完成方阵的初始化赋值(动态内存分配):2使用析构函数完成矩阵动态内存的释放:3使用函数实现两个矩阵的和:4使用函数实现两个矩阵的差:5使用函数实现两个矩阵的积:6使用函数实现矩阵的转置:7使用函数求矩阵中的最大值:8使用函数求矩阵中的最小值:9编写一个主函数测试上述功能. 解决方案 你先用控制台实现好了,完后把字符串显示