俄罗斯方块Java编写精髓.ppt_第1页
俄罗斯方块Java编写精髓.ppt_第2页
俄罗斯方块Java编写精髓.ppt_第3页
俄罗斯方块Java编写精髓.ppt_第4页
俄罗斯方块Java编写精髓.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目评审,俄罗斯方块,主讲人:雷凯组员:沈唯唯,李有宁,田园田亮,尹亮,界面展示,程序运行成功后,进入游戏界面。如左图所示。,游戏暂停,按下键盘按键“P”(pause)游戏进入停止状态,等待用户按下“C”(Continue)键继续游戏。,退出游戏,按下键盘按键“Q”(Quit)弹出系统提示框,选择是否要退出游戏。,游戏结束,当方框到达顶端时(Wall04!=null),判定游戏结束。按下“S”可重新初始化界面开始游戏,具体实现,Cell(格子类)Tetromino(四格方块类)7个子类(T,I,O,S,Z,J,L)一个内部类(State):存放四个方块旋转时的坐标状态。Tetris(俄罗斯方块类)extendsJpanel逻辑处理及方法的具体实现,Cell,属性:row,col,Image方法:drop();/向下降落一个单位leftMove();/向左移动一个单位rightMove();/向右移动一个单位,Tetromino,Cellcells=newCell4;Statestates;/旋转状态Index;/旋转下标ProtectedclassState;/旋转状态类(内部类)7个子类7种方块rotateRight();/向右旋转rotateLeft();/向左旋转softDrop();/下落moveLeft();/左移moveRight();/右移RandomOne();/随机生成一个四格方块,Tetris,paint(Graphicsg);/重写绘图方法paintWall(Graphicsg);/绘制墙action();/通过调用该方法启动软件Quit();/退出pauseAction();/暂停continueAction();/继续paintTetromino(Graphicsg);/绘制四格方块paintNextOne(Graphicsg);/绘制下一个方块paintScore(Graphicsg);/绘制成绩paintLines(Graphicsg);/绘制已消除行数paintPause(Graphicsg);/绘制暂/继续停提示,softDropAction();/下落控制方法canDrop();/判断是否能够继续下落landToWall();/着陆到墙destroyLines();/销毁的行数fullCells(introw);/判断一行是否满了deleteLine(introw);/删除一行checkGameOver();/检查游戏结束状态moveLeftAction();/判断左移是否出界moveRightAction();/判断右移是否出界rotateRightAction();/判断旋转是否出界outOfBounds();/检查是否出界coincide();/判断是否重合hardDropAction();/瞬间下降startAction();/开始动作流程,简单工厂模式实例化四格方块T,I,O,S,Z,J,L(田亮),将7个子类封装到类Tetromino,在构造方法里初始化四格方块的初始位置(row,col)和相对位置.,初始位置:cell0=(0,4);cell1=(0,3);cell2=(0,5);cell3=(1,3);,以“L”型四格方块为例:,以编号为“0”的格子为旋转轴,计算其他格子的相对坐标:states0=(0,0,0,-1,0,1,1,-1);states1=(0,0,-1,0,1,0,-1,-1);states2=(0,0,0,1,0,-1,-1,1);states3=(0,0,1,0,-1,0,1,1);,states0states1states2states3,旋转,左移,右移(沈唯唯),privateintIndex=10000;表示旋转状态下标.设置为10000防止旋转次数过多而使游戏无法正常进行.在Tetromino类中添加内部类State属性:row0,col0,row1,col1,row2,col2,row3,col3以上8个属性表示4个方块的相对坐标.构造方法:publicState(introw0),旋转,rotateRight();下标Index自增rotateLeft();下标Index自减States=statesindex%states.length;当前状态s为四格方块旋转index%states.length次的状态.以cells0为旋转轴,根据初始化的相对坐标cells1.setRow(cells0.getRow()+s.row1);cells1.setCol(cells0.getCol()+s.col1);cells2.setRow(cells0.getRow()+s.row2);cells2.setCol(cells0.getCol()+s.col2);cells3.setRow(cells0.getRow()+s.row3);cells3.setCol(cells0.getCol()+s.col3);,左移、右移,moveLeftAction();/左移先调用tetromino.moveLeft();如果出界,或者重合再调用tetromino.moveRight();在moveLeft方法中遍历当前对象cells中所有cell对象循环调用cell.leftMove();moveRightAction();/右移的原理同上,下落(李有宁),softDropAction();/一步一步下落if(canDrop()为true(检查当前方块是否能够继续下落),则调用tetromino.softDrop();在softDrop()中遍历cells对象调用cell.drop();hardDropAction();/瞬间下降while(canDrop()为true(检查当前方块是否能够继续下落),则调用tetromino.softDrop();在softDrop()中遍历cells对象调用cell.drop();否则调用方法:landToWall();/着陆到墙destroyLines();/销毁行数checkGameOver();/检查游戏是否结束,landToWall();/着陆到墙Cellcells=tetromino.cells;遍历当前四格方块对象将每一个格子对象赋值给墙wallcell.getRowcell.getCol=celldestroyLines();/销毁行数遍历每行的格子,如果fullCells(row)(遍历当前行的各自是否是满的)为true,调用deleteLine(row)消除这行;lines+;最后加成绩this.score+=scoreTablelines;scoreTable为得分表,判断方法,暂停、继续、退出(田园),checkGameOver();/检查游戏是否结束如果wall04!=null成立,调用timer.cancle()关闭计时器,游戏结束.outOfBounds();/出界检查方法Cellcells=tetromino.cells;遍历当前四格方块对象的每个格子如果(cell.getCol=COLS|cell.getRow=ROWS)成立(方块是否出了长方形界面),返回true;,coincide()/判断重合方法Cellcells=tetromino.cells;遍历当前四格方块对象的每个格子如果(cell.getCol=0/将暂停标记设置为true,continueAction();/继续游戏pause=false;/设置暂停标记为falsetimer=newTimer();/创建一个新的计时器对象timer.schedule(newTimerTask()publicvoidrun()softDropAction();repaint();,inteval,inteval);schedule(TimerTasktask,longdelay,longperiod)安排指定的任务从指定的延迟后开始进行重复的固定延迟执行Inteval为间隔时间800ms;,绘图方法(尹亮),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是图形看起来顺眼.,paintTetromino(Graphicsg);/绘制四格方块如果没有正在下落的方块就不绘制,否则遍历四格方块对象的四个小格子并绘制.paintNextOne(Graphicsg);/绘制下一个方块如果没有正在下落的方块,就不绘制,否则遍历随机生成的下一个四格方块的四个小格子并绘制.paintScore(Graphicsg);/绘制成绩paintLines(Graphicsg);/绘制已消除行数paintPause(Graphicsg);/绘制暂停/继续提示以上3个方法均是先设置字体格式,颜色,位置再绘制.,程序启动方法(雷凯),通过静态代码块将背景图片,7种方块图片和游戏结束图片加载进来,这会节省很多时间.staticClasscls=Tetris.class;background=ImageIO.read(cls.getResource(image);/可以读取图片文件到内存中的对象该静态代码块需捕捉异常(IOException),action();/启动软件调用startAction()开始动作流程.创建键盘按键监听对象newKeyAdapter()keyPressed(KeyEvente);如果有按键按下完成时候(pressed)就会执行VK_Q:quit();/退出VK_S:startAction();/重新开始游戏VK_C:continueAction();/继续游戏VK_P:pauseAction();/暂停游戏VK_DOWN:softDropAction();/下落一格VK_UP:rotateRightAction();/旋转VK_SPACE:hardDropAction();/下落到底部VK_LEFTmoveLeftAction();/左移一格VK_RIGHT:moveRightAction();/右移一格,startAction();/开始动作流程pause=false;gameOver=false;score=0;lines

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论