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

下载本文档

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

文档简介

1、项目评审项目评审俄罗斯方块俄罗斯方块主讲人:雷凯主讲人:雷凯组员:沈唯唯,李有宁,田园组员:沈唯唯,李有宁,田园田亮,尹亮田亮,尹亮界面展示程序运行成功后,进入游戏界面。如左图所示。游戏暂停按下键盘按键“P”(pause)游戏进入停止状态,等待用户按下“C”(Continue)键继续游戏。退出游戏按下键盘按键“Q”(Quit)弹出系统提示框,选择是否要退出游戏。游戏结束当方框到达顶端时(Wall04!=null),判定游戏结束。按下“S”可重新初始化界面开始游戏具体实现Cell(格子类)Tetromino(四格方块类) 7个子类(T,I,O,S,Z,J,L)一个内部类(State):存放四个方

2、块旋转时的坐标状态。Tetris(俄罗斯方块类) extends Jpanel逻辑处理及方法的具体实现CellCell属性:row,col,Image方法:drop(); / 向下降落一个单位 leftMove(); / 向左移动一个单位 rightMove(); / 向右移动一个单位TetrominoCell cells = new Cell4; State states; /旋转状态Index; /旋转下标Protected class State ; /旋转状态类(内部类)7个子类7种方块rotateRight(); /向右旋转rotateLeft(); /向左旋转softDrop();

3、 /下落moveLeft(); /左移moveRight(); /右移RandomOne(); /随机生成一个四格方块Tetrispaint(Graphics g); /重写绘图方法paintWall(Graphics g); /绘制墙action(); /通过调用该方法 启动软件Quit(); /退出pauseAction(); /暂停continueAction(); /继续paintTetromino(Graphics g); /绘制四格方块paintNextOne(Graphics g); /绘制下一个方块paintScore(Graphics g); /绘制成绩paintLines(

4、Graphics g); /绘制已消除行数paintPause(Graphics g); /绘制暂/继续停提示softDropAction(); /下落控制方法canDrop(); /判断是否能够继续下落landToWall(); /着陆到墙destroyLines(); /销毁的行数fullCells(int row); /判断一行是否满了deleteLine(int row);/删除一行checkGameOver(); /检查游戏结束状态moveLeftAction(); /判断左移是否出界moveRightAction(); /判断右移是否出界rotateRightAction();/判

5、断旋转是否出界outOfBounds(); /检查是否出界coincide(); /判断是否重合hardDropAction(); /瞬间下降startAction(); /开始动作流程简单工厂模式实例化四格方块简单工厂模式实例化四格方块T,I,O,S,Z,J,L(T,I,O,S,Z,J,L(田亮田亮) ) 将将7 7个子类封装到类个子类封装到类TetrominoTetromino,在构造方法里初始化,在构造方法里初始化四格方块的初始位置四格方块的初始位置(row,col)(row,col)和相对位置和相对位置. .初始位置:cell0 = (0,4);cell1 = (0,3);cell2

6、= (0,5);cell3 = (1,3);以以“L 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);states0 states1 states2 states3旋转,左移,右移(沈唯唯)旋转,左移,右移(沈唯唯)private int Index = 10000; 表示旋转状态下标.设置为10000防止旋转次数过

7、多而使游戏无法正常进行.在Tetromino类中添加内部类State属性:row0,col0,row1,col1,row2,col2,row3,col3 以上8个属性表示4个方块的相对坐标.构造方法:public State(int row0)旋转rotateRight(); 下标Index自增rotateLeft(); 下标Index自减State s = statesindex%states.length; 当前状态s为四格方块旋转index%states.length次的状态.以cells0为旋转轴,根据初始化的相对坐标cells1.setRow(cells0. getRow() + s

8、.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();在mov

9、eLeft方法中遍历当前对象cells中所有cell对象循环调用cell.leftMove();moveRightAction(); /右移的原理同上下落下落( (李有宁李有宁) )softDropAction(); /一步一步下落if(canDrop()为true(检查当前方块是否能够继续下落),则调用tetromino.softDrop();在softDrop()中遍历cells对象调用cell.drop();hardDropAction(); /瞬间下降while(canDrop()为true(检查当前方块是否能够继续下落),则调用tetromino.softDrop();在softDr

10、op()中遍历cells对象调用cell.drop();否则调用方法:landToWall(); / 着陆到墙destroyLines(); / 销毁行数checkGameOver(); / 检查游戏是否结束landToWall(); /着陆到墙Cell cells = tetromino.cells;遍历当前四格方块对象将每一个格子对象赋值给墙wallcell.getRowcell.getCol = celldestroyLines(); /销毁行数遍历每行的格子,如果fullCells(row)(遍历当前行的各自是否是满的)为true,调用deleteLine(row)消除这行; line

11、s+;最后加成绩this.score += scoreTablelines;scoreTable为得分表判断方法,暂停、继续、退出判断方法,暂停、继续、退出( (田园田园) )checkGameOver(); /检查游戏是否结束如果wall04 != null成立,调用timer.cancle() 关闭计时器,游戏结束.outOfBounds(); /出界检查方法Cell cells = tetromino.cells;遍历当前四格方块对象的每个格子如果(cell.getCol=COLS | cell.getRow = ROWS)成立(方块是否出了长方形界面),返回true;coincide(

12、) /判断重合方法Cell cells = tetromino.cells;遍历当前四格方块对象的每个格子如果(cell.getCol = 0 & cell.getCol = 0 & cell.getRow ROWS& wallcell.getRowcell.getCol!=null)成立(在长方形界面内部检查是否撞到其他方块),返回true.pauseAction(); /暂停游戏timer.cancel(); /终止该计时器pause = true; /将暂停标记设置为truecontinueAction(); /继续游戏pause = false; /设置暂停标记为falsetimer

13、= new Timer(); /创建一个新的计时器对象timer.schedule(new TimerTask()public void run() softDropAction();repaint();, inteval, inteval);schedule(TimerTask task,long delay,long period)安排指定的任务从指定的延迟后开始进行重复的固定延迟执行Inteval为间隔时间800ms;绘图方法绘图方法( (尹亮尹亮) )paint(Graphics g); /重写绘图方法g.drawImage(background, 0, 0, null); /画背景g

14、.translate(15, 15); /将图形上下文的原点平移到当前坐标系中的点 (x, y) 绘制墙,四格方块,下一个方块,成绩,已消除行数,暂停/继续提示 如果游戏结束标记为true,绘制游戏结束的图片paintWall(Graphics g); /绘制墙 将长方形区域划分成20行,10列.遍历每个方块对象,若cell不为空g.drawImage(cell.getImage(), x-1, y-1, null); 图像大小x-1,y-1是图形看起来顺眼.paintTetromino(Graphics g); /绘制四格方块如果没有正在下落的方块就不绘制,否则遍历四格方块对象的四个小格子并

15、绘制.paintNextOne(Graphics g); /绘制下一个方块如果没有正在下落的方块,就不绘制,否则遍历随机生成的下一个四格方块的四个小格子并绘制.paintScore(Graphics g); /绘制成绩paintLines(Graphics g); /绘制已消除行数paintPause(Graphics g); /绘制暂停/继续提示以上3个方法均是先设置字体格式,颜色,位置再绘制.程序启动方法程序启动方法( (雷凯雷凯) )通过静态代码块将背景图片,7种方块图片和游戏结束图片加载进来,这会节省很多时间.staticClass cls = Tetris.class;backgro

16、und = ImageIO.read(cls.getResource(image);/可以读取图片文件到内存中的对象 该静态代码块需捕捉异常(IOException)action(); /启动软件调用startAction()开始动作流程.创建键盘按键监听对象new KeyAdapter()keyPressed(KeyEvent e);如果有按键按下 完成时候(pressed)就会执行VK_Q:quit(); /退出VK_S:startAction(); /重新开始游戏VK_C:continueAction(); /继续游戏VK_P:pauseAction(); /暂停游戏VK_DOWN:softDropAction(); /下落一格VK_UP:rotateRightAction(); /旋转VK_SPACE:hardDropAction(); /下落到底部VK_LEFT moveLeftAction(); /左移一格VK_RIGHT: moveRightAction();/右移一格startAction(); /开始动作流程pause = false; gameOver = false;sc

温馨提示

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

评论

0/150

提交评论