![俄罗斯方块Java编写精髓_第1页](http://file4.renrendoc.com/view/13315f912c5b6ed86496d92ebcfddff1/13315f912c5b6ed86496d92ebcfddff11.gif)
![俄罗斯方块Java编写精髓_第2页](http://file4.renrendoc.com/view/13315f912c5b6ed86496d92ebcfddff1/13315f912c5b6ed86496d92ebcfddff12.gif)
![俄罗斯方块Java编写精髓_第3页](http://file4.renrendoc.com/view/13315f912c5b6ed86496d92ebcfddff1/13315f912c5b6ed86496d92ebcfddff13.gif)
![俄罗斯方块Java编写精髓_第4页](http://file4.renrendoc.com/view/13315f912c5b6ed86496d92ebcfddff1/13315f912c5b6ed86496d92ebcfddff14.gif)
![俄罗斯方块Java编写精髓_第5页](http://file4.renrendoc.com/view/13315f912c5b6ed86496d92ebcfddff1/13315f912c5b6ed86496d92ebcfddff15.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
俄罗斯方块组员:沈唯唯,李有宁,田园田亮,尹亮2021/5/91界面展示程序运行成功后,进入游戏界面。如左图所示。2021/5/92游戏暂停按下键盘按键“P”(pause)游戏进入停止状态,等待用户按下“C”(Continue)键继续游戏。2021/5/93退出游戏按下键盘按键“Q”(Quit)弹出系统提示框,选择是否要退出游戏。2021/5/94游戏结束当方框到达顶端时(Wall[0][4]!=null),判定游戏结束。按下“S”可重新初始化界面开始游戏2021/5/95具体实现 Cell(格子类) Tetromino(四格方块类) 7个子类(T,I,O,S,Z,J,L)
一个内部类(State):
存放四个方块旋转时的坐标状态。 Tetris(俄罗斯方块类)extendsJpanel
逻辑处理及方法的具体实现2021/5/96Cell属性:row,col,Image方法:drop();//向下降落一个单位leftMove();//向左移动一个单位rightMove();//向右移动一个单位2021/5/97TetrominoCell[]cells=newCell[4];State[]states;//旋转状态Index;//旋转下标ProtectedclassState{};//旋转状态类(内部类)7个子类7种方块rotateRight();//向右旋转rotateLeft();//向左旋转softDrop();//下落moveLeft();//左移moveRight();//右移RandomOne();//随机生成一个四格方块2021/5/98Tetrispaint(Graphicsg);//重写绘图方法paintWall(Graphicsg);//绘制墙action();//通过调用该方法
启动软件Quit();//退出pauseAction();//暂停continueAction();//继续paintTetromino(Graphicsg);//绘制四格方块paintNextOne(Graphicsg);//绘制下一个方块paintScore(Graphicsg);//绘制成绩paintLines(Graphicsg);//绘制已消除行数paintPause(Graphicsg);//绘制暂/继续停提示2021/5/99softDropAction();//下落控制方法canDrop();//判断是否能够继续下落landToWall();//着陆到墙destroyLines();//销毁的行数fullCells(introw);//判断一行是否满了deleteLine(introw);//删除一行checkGameOver();//检查游戏结束状态moveLeftAction();//判断左移是否出界moveRightAction();//判断右移是否出界rotateRightAction();//判断旋转是否出界outOfBounds();//检查是否出界coincide();//判断是否重合hardDropAction();//瞬间下降startAction();//开始动作流程2021/5/910简单工厂模式实例化四格方块T,I,O,S,Z,J,L(田亮)将7个子类封装到类Tetromino,在构造方法里初始化四格方块的初始位置(row,col)和相对位置.初始位置:cell[0]=(0,4);cell[1]=(0,3);cell[2]=(0,5);cell[3]=(1,3);以“L”型四格方块为例:2021/5/911以编号为“0”的格子为旋转轴,计算其他格子的相对坐标:states[0]=(0,0,0,-1,0,1,1,-1);states[1]=(0,0,-1,0,1,0,-1,-1);states[2]=(0,0,0,1,0,-1,-1,1);states[3]=(0,0,1,0,-1,0,1,1);states[0]states[1]states[2]states[3]2021/5/912旋转,左移,右移(沈唯唯)privateintIndex=10000;表示旋转状态下标.设置为10000防止旋转次数过多而使游戏无法正常进行.在Tetromino类中添加内部类State属性:row0,col0,row1,col1,row2,col2,row3,col3以上8个属性表示4个方块的相对坐标.构造方法:publicState(introw0…){…}2021/5/913旋转 rotateRight();下标Index自增 rotateLeft();下标Index自减 States=states[index%states.length];当前状态s为四格方块旋转[index%states.length]次的状态.
以cells[0]为旋转轴,根据初始化的相对坐标 cells[1].setRow(cells[0].getRow()+s.row1); cells[1].setCol(cells[0].getCol()+s.col1); cells[2].setRow(cells[0].getRow()+s.row2); cells[2].setCol(cells[0].getCol()+s.col2); cells[3].setRow(cells[0].getRow()+s.row3); cells[3].setCol(cells[0].getCol()+s.col3);2021/5/914左移、右移moveLeftAction();//左移
先调用tetromino.moveLeft();
如果出界,或者重合再调用tetromino.moveRight();
在moveLeft方法中遍历当前对象cells中所有cell对象
循环调用cell.leftMove();moveRightAction();//右移的原理同上2021/5/915下落(李有宁)softDropAction();//一步一步下落
if(canDrop())为true(检查当前方块是否能够继续下落),则调用tetromino.softDrop();在softDrop()中遍历cells对象调用cell.drop();hardDropAction();//瞬间下降
while(canDrop())为true(检查当前方块是否能够继续下落),则调用tetromino.softDrop();在softDrop()中遍历cells对象调用cell.drop();
否则调用方法: landToWall();//着陆到墙 destroyLines();//销毁行数 checkGameOver();//检查游戏是否结束2021/5/916landToWall();//着陆到墙 Cell[]cells=tetromino.cells;
遍历当前四格方块对象将每一个格子对象赋值给墙 wall[cell.getRow][cell.getCol]=celldestroyLines();//销毁行数
遍历每行的格子,如果fullCells(row)(遍历当前行的各自是否是满的)为true,调用deleteLine(row)消除这行;lines++;
最后加成绩this.score+=scoreTable[lines]; scoreTable[]为得分表2021/5/917判断方法,暂停、继续、退出(田园)checkGameOver();//检查游戏是否结束
如果wall[0][4]!=null成立,调用timer.cancle()关闭计时器,游戏结束.outOfBounds();//出界检查方法 Cell[]cells=tetromino.cells;
遍历当前四格方块对象的每个格子
如果(cell.getCol<0||cell.getCol>=COLS||cell.getRow<0||cell.getRow>=ROWS)成立(方块是否出了长方形界面),返回true;2021/5/918coincide()//判断重合方法 Cell[]cells=tetromino.cells;
遍历当前四格方块对象的每个格子
如果(cell.getCol>=0&&cell.getCol<COLS&&cell.getRow>=0&&cell.getRow<ROWS&&wall[cell.getRow][cell.getCol]!=null)成立(在长方形界面内部检查是否撞到其他方块),返回true.pauseAction();//暂停游戏 timer.cancel();//终止该计时器 pause=true;//将暂停标记设置为true2021/5/919continueAction();//继续游戏 pause=false;//设置暂停标记为false timer=newTimer();//创建一个新的计时器对象 timer.schedule(newTimerTask(){ publicvoidrun(){ softDropAction(); repaint(); } },inteval,inteval); schedule(TimerTask
task,long
delay,long
period)
安排指定的任务从指定的延迟后开始进行重复的固定延迟执行 Inteval为间隔时间800ms;2021/5/920绘图方法(尹亮)paint(Graphicsg);//重写绘图方法 g.drawImage(background,0,0,null);//画背景 g.translate(15,15);//将图形上下文的原点平移到当前坐标系中的点(x,
y)
绘制墙,四格方块,下一个方块,成绩,已消除行数,暂停/继续提示
如果游戏结束标记为true,绘制游戏结束的图片paintWall(Graphicsg);//绘制墙
将长方形区域划分成20行,10列.遍历每个方块对象,若cell不为空g.drawImage(cell.getImage(),x-1,y-1,null);
图像大小x-1,y-1是图形看起来顺眼.2021/5/921paintTetromino(Graphicsg);//绘制四格方块
如果没有正在下落的方块就不绘制,否则遍历四格方块对象的四个小格子并绘制.paintNextOne(Graphicsg);//绘制下一个方块
如果没有正在下落的方块,就不绘制,否则遍历随机生成的下一个四格方块的四个小格子并绘制.paintScore(Graphicsg);//绘制成绩paintLines(Graphicsg);//绘制已消除行数paintPause(Graphicsg);//绘制暂停/继续提示
以上3个方法均是先设置字体格式,颜色,位置再绘制.2021/5/922程序启动方法(雷凯)通过静态代码块将背景图片,7种方块图片和游戏结束图片加载进来,这会节省很多时间. static{ Classcls=Tetris.class; background= ImageIO.read(cls.getResource(image)); //可以读取图片文件到内存中的对象 …… }
该静态代码块需捕捉异常(IOException)2021/5/923action();//启动软件
调用startAction()开始动作流程.
创建键盘按键监听对象newKeyAdapter(){ keyPressed(KeyEvente);
};
如果有按键按下完成时候(pressed)就会执行 VK_Q:quit();//退出 VK_S:startAction();//重新开始游戏 VK_C:contin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国纳米级碳酸钙行业供需态势、竞争格局及投资前景分析报告(智研咨询)
- 《计算机网络基础与应用(第三版)》 课件 项目七 互联网的接入
- 初中数学综合实践活动课案例
- 消化内科危重症用药课件
- 儿童诺如病毒患者护理查房
- 《Ysg外科感染》课件
- (高清版)DB37∕T 3007-2017 金针菇菌渣蔬菜(茄果类·辣椒)集约化育苗技术规程
- 《胸痛中心的概念》课件
- 《项目的选择》课件
- 《黄芪冬虫夏草》课件
- 2025年买卖个人房屋合同(4篇)
- 武汉2025年湖北武汉理工大学管理人员招聘笔试历年参考题库附带答案详解
- 使用错误评估报告(可用性工程)模版
- 高中英语新课程标准解读课件
- 幼儿园中班语言《拼小人》课件
- 文化差异与跨文化交际课件(完整版)
- 臭和味检测原始记录表
- 变压器检修风险分析及管控措施
- 劳务派遣公司介绍ppt课件(PPT 35页)
- 纪检监察机关派驻机构工作规则PPT
- 护士长绩效考核评分细则表
评论
0/150
提交评论