Java课设--俄罗斯方块Tetris
Java程序设计课程作业报告
作业:俄罗斯方块游戏
姓名 |
赵璐媛 |
学号 |
|||
程序得分 90% |
作业报告 得分10% |
实验总分 100% |
|||
作业目的: |
|||||
|
|||||
作业结果(学生填写): |
|||||
类之间的关系图 (注:折线箭头仅代表后者为前者的一个实例,弯箭头为继承,双向箭头为相关。) GameFrame GameView Unit Main WatchView DoubleGameFrame UnitKey CommunicateView 各个类说明 (注:红色的为类名,黄色的为该类中比较重要的实例对象。)
main方法里弹出选择提示,选择单人模式则进入singleGame函数,创建GameFrame类进行游戏(详见第2条); 选择双人模式则进入doubleGame函数,创建DoubleGameFrame类(继承自GameFrame类)进行游戏(详见第3条)。
继承自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在游戏结束时弹出提示信息。
继承自GameFrame类,在此基础上又新增一个主部件CommuicateView(详见第6条); 1.构造方法使用给定的ip和发送及接受端口建立网络通信,设置布局,建立四个线程sendThread、acceptThread、sendDataThread、acceptDataThread通过输出输入流及ImageIO分别发送、接受战况视图,通过输入输出流发送、接受战况数据(对方是否消去多重行数); 2.方法creatView通过截屏创建己方战况视图并返回; 3.重写父类的方法updateData、resetGame、restartGame、pauseGame、stopGame,取消了开始暂停功能,新增winGame方法,赢得游戏则进入winGame弹出提示信息,否则进入stopGame弹出提示信息。
继承自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分别完成界面的重置、停止所有方块移动。
继承自JPanel类,此类中包含数据游戏得分score、游戏关卡level,可观察当前游戏得分、关卡、下一个方块,可通过开始和暂停按钮开始或暂停游戏,出现在框架的中间; 1.构造方法设置布局; 2.方法resetData在新一轮游戏开始时重置数据; 3.方法addStartListener和addPauseListener分别为开始和暂停按钮添加监听器; 4.方法updateData更新面板上的分数、关卡、下一个方块的信息; 5.方法getLevel为外部传递当前关卡(主要用于设置方块下落速度)。
继承自JPanel类,此类实时显示对方的游戏战况,只在双人模式中有,出现在框架最右边; 1.构造方法设置布局; 2.方法setImage更新数据域对方战况img,并调用提供的重绘方法repaint; 3.重写方法paint,设置绘图区域与放缩,被repaint方法调用。
此类中包含一个点location描述方块的位置,以及一个int数组key来描述方块的种类及形状(详见第8条); 1.两种构造方法,一种是在指定位置生成一个随机形状的Unit,另一种是用提供的key在指定位置生成指定形状的Unit; 2.方法getShape返回此Unit的形状绘制在坐标系中的坐标点数组(WatchView使用); 3.方法getChangedUnit返回此Unit经过变形或位移产生的新Unit; 4.方法getPaintLocation返回此Unit的绘制在坐标系中的坐标点数组(GameView使用)。
此类中list包含了所有方块形状绘制在坐标系中的点的数组; 1.方法getRandomKey产生一个随机的key值返回,key值对应着某个方块的形状; 2.方法getNextKey返回给定key值的方块经变形后对应的key值; 3.方法getShapeByKey解读给定key值对应的方块的形状,以Point数组的形式返回形状。
示例:A的设置(B的IP,B接受端口,A接受端口) B的设置(A的IP,A接受端口,B接受端口)
|
|||||
评语(总分优秀和不及格的报告必须有评语): |
|||||
评阅日期:2015年4月30日 |
Java课设--俄罗斯方块Tetris的更多相关文章
- JAVA课设---五子棋
1.团队博客链接 JAVA课设-五子棋-团队博客 2.个人负责模块: ①对鼠标事件的处理 , 此模块需处理五子棋的放置问题.颜色转换问题.以及当五子连线时弹出窗口显示结果. ②对MainFrame中主 ...
- JAVA课设个人博客--多源数据教学管理系统
JAVA课设个人博客--多源数据教学管理系统 1.团队课程设计博客链接 https://www.cnblogs.com/hq9-/p/10278470.html 2. 个人负责模块或任务说明 主要模块 ...
- java课设数据库打包报错
最近在交java课设时把东西打包给老师遇到许多奇葩问题, 首先是数据库复制时提示: 这是数据库与SQL server服务没有分离(我用的是SQLserver暂时,对于其他的,我以后会继续尝试)可以进行 ...
- 2018-2019学年第一学期Java课设--魔塔
目录 Magic-Towers 一.团队名称.团队成员介绍.任务分配 团队名称:MoTa 团队成员介绍 任务分配 二.项目简介 三.项目采用技术 四.项目亮点 主界面显示主要信息功能 游戏动画 五.项 ...
- JAVA课设——中药古籍《太平圣惠方》数据处理与分析系统
一.配置JAVA环境 本次课设是在Windows 10(64bit)平台上实现的,所以首先得配置下JAVA环境. 步骤一:先下载一个JDK(1.7)安装包,安装好JDK: 步骤二:JDK环境配置(由于 ...
- Java课设(学生信息管理系统)
1.团队课程设计博客链接 http://www.cnblogs.com/Min21/p/7064093.html 2.个人负责模板或任务说明 设计登陆界面和学生信息界面的设计,学生信息的显示.退出等功 ...
- java课设 五子棋代码编写(团队)
1. 团队课程设计博客链接 http://www.cnblogs.com/yzb123/p/7063424.html 2.个人责模块或任务说明 1.主函数编写,设置图形界面 2,设置功能按钮 3.使用 ...
- JAVA课设 学生基本信息管理 团队博客
1.成员 邹其元 网络1512 201521123060 杨钧宇 网络1512 201521123062 2.项目Git地址 团队项目码云地址 //添加截图 3. 项目git提交记录截图(要体现出每个 ...
- java课设
1.代码截图: 2.设计思路 建立GUI界面,系统产生一个随机数(对用户不可见),然后用户输入猜测数,系统根据用户每次输入的数据给出评语(偏大,偏小,猜测成功).当用户最终猜测成功后,就把当次的随机数 ...
随机推荐
- 利用dbutils工具实现数据的增删查改操作(dbutis入门)
一.前期准备 1.安装数据库(如:mysql5.5) 2.安装Eclipse(如:3.4) 3.下载数据库驱动包 4.下载dbutis工具包 5.在Eclipse创建名为 dbutils 的工程并在工 ...
- BPM与OA的区别及联系
BPM与OA的区别及联系 近年来,在企业管理信息系统一些名词反复被提及,然而外行人对于这些名词则是一头雾水,网上的解释又鱼龙混杂,没有绝对权威的文献可供参考,因此也就让我们对这些名词的认识越来越模糊. ...
- Apache崩掉:为进程配置合适的线程数
放假以来,服务器Apache二次崩掉了,不能再拖了,找bug解决: 崩掉的具体状况是,服务器出现弹框显示:Apache停止工作: 顺手关掉这个可恶的小弹框,世界就清静了,服务器正常运行: 具体问题: ...
- 【性能测试工具】- Http_Load
优点:参数少:缺点:url.txt文件要求较高,不如siege方便 http_load是ACME实验室开发的,这个工具以并发方式运行,用以测试web服务器的吞吐量与负载.它不同于其它压力测试工具的是, ...
- .NET定位CPU使用率过高问题
摘要: 当一个.net应用在生产环境CPU突然居高不下,如何快速准确的定位问题所在,并且对实时业务影响最小化?如何不抓Dump也不用live debug就可以知道你的应用在做什么?如何确认你的应用是由 ...
- Pycharm快捷键的使用
1.编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性)Ctrl + Alt + Space 快速导入任意类Ctrl + Shift + Enter 语句完成Ctrl + ...
- 如何在GitHub上生成ssh公钥并用NetBeans克隆项目
一.生成ssh公钥. 1.首先判断本机是否创建了公有密钥: $ ls ~/.ssh 这个命令用于检查是否已经存在 id_rsa.pub 或 id_dsa.pub 文件,如果文件已经存在,下面步骤可省略 ...
- lumen的自定义依赖注入
比如我现在有个token认证系统,目前我用mysql的token表实现,将来有可能会改成redis,怎么实现未来的无缝连接呢. 先定义一个合约文件app/Contracts/TokenHandler. ...
- Windows环境下Mysql如何快速导入或恢复表为innodb的数据
注: 一.这个是对Innodb的数据恢复.MyISAM不需要这么麻烦,只要数据文件存在直接复制过去就可以. 二.该方法只适用于 1:想要恢复或者导入表的ibd文件和frm文件 2:你不仅需有ibd和f ...
- [js高手之路]使用原型对象(prototype)需要注意的地方
我们先来一个简单的构造函数+原型对象的小程序 function CreateObj( uName, uAge ) { this.userName = uName; this.userAge = uAg ...