Java俄罗斯方块实现步骤.ppt_第1页
Java俄罗斯方块实现步骤.ppt_第2页
Java俄罗斯方块实现步骤.ppt_第3页
Java俄罗斯方块实现步骤.ppt_第4页
Java俄罗斯方块实现步骤.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

项目实战 俄罗斯方块,主讲:贾宗维,程序演示,游戏01_功能演示与说明 游戏02_面向对象设计 游戏03_使用API类组装游戏 游戏04_编写各个类主体框架 游戏05_编写Controler类实现事件监听 游戏06_编写类测试代码 游戏07_图形设计与创建 游戏08_图形移动与显示 游戏09_处理游戏边界问题 游戏10_障碍物生成与显示 游戏11_消除满行的障碍物 游戏12_增加游戏结束 游戏13_定时下落,编写各个类主体框架-Shape类,public class Shape /private ShapeListener listener; public void moveLeft() System.out.println(“shapes moveLeft“); public void moveRight() System.out.println(“shapes moveright“); public void moveDown() System.out.println(“shapes moveDown“); public void rotate() System.out.println(“shapes rotate“); public void drawMe() System.out.println(“shapes drawme“); ,private class ShapeDriver implements Runnable public void run() / TODO Auto-generated method stub while(true) moveDown(); /listener.shapeMoveDown(Shape.this); try Thread.sleep(1000); catch (InterruptedException e) / TODO Auto-generated catch block e.printStackTrace();,编写各个类主体框架-ShapeFactory类,public class ShapeFactory public Shape getShape(ShapeListener listener) System.out.println(“ShapeFactorys getShape“); Shape shape=new Shape(); return shape; ,编写各个类主体框架-Ground类,package cn.tetris.entities; public class Ground public void accept() System.out.println(“Grounds accept“); public void drawMe() System.out.println(“Grounds drawMe“); ,编写各个类主体框架-GamePanel类,public class GamePanel extends JPanel private Ground ground; private Shape shape; public void display(Ground ground,Shape shape) System.out.println(“GamePanels display“); this.ground=ground; this.shape=shape; this.repaint(); Override protected void paintComponent(Graphics arg0) / TODO Auto-generated method stub /重新显示 if (ground!=null ,编写各个类主体框架-Controller类,public class Controller extends KeyAdapter private Ground ground; private Shape shape; private ShapeFactory shapeFactory; private GamePanel gamePanel; public void keyPressed(KeyEvent e) switch(e.getKeyCode() case KeyEvent.VK_UP: shape.rotate(); break; case KeyEvent.VK_LEFT: shape.moveLeft(); break; case KeyEvent.VK_RIGHT: shape.moveRight(); break; case KeyEvent.VK_DOWN: shape.moveDown(); break; gamePanel.display(ground, shape); ,编写各个类主体框架-ShapeListener接口,public interface ShapeListener void shapeMoveDown(Shape shape); ,Shape类增加监听器对象及下落后调用,public class Shape private ShapeListener listener; public void moveLeft() System.out.println(“shapes moveLeft“); public void moveRight() System.out.println(“shapes moveright“); public void moveDown() System.out.println(“shapes moveDown“); public void rotate() System.out.println(“shapes rotate“); public void drawMe() System.out.println(“shapes drawme“); ,private class ShapeDriver implements Runnable public void run() / TODO Auto-generated method stub while(true) moveDown(); listener.shapeMoveDown(Shape.this); try Thread.sleep(1000); catch (InterruptedException e) / TODO Auto-generated catch block e.printStackTrace();,Shape类中增加注册监听器的方法,public void addShapeListener(ShapeListener l) if(l!=null) this.listener =l; ,Shape构造方法中启动下落线程,public Shape() new Thread(new ShapeDriver().start(); ,Controller类实现ShapeListener接口,public class Controller extends KeyAdapter implements ShapeListener public void shapeMoveDown(Shape shape) / TODO Auto-generated method stub gamePanel.display(ground, shape); ,生产图形时同时注册监听器,public class ShapeFactory public Shape getShape(ShapeListener listener) System.out.println(“ShapeFactorys getShape“); Shape shape=new Shape(); shape.addShapeListener(listener); return shape; ,GamePanel类设置大小,public GamePanel() this.setSize(300,300); ,Controller类中增加开始新游戏方法,public void newGame() shape=shapeFactory.getShape(this); ,Controller类中如何接收外部控制的对象,public Controller(ShapeFactory shapeFactory,Ground ground, GamePanel gamePanel) this.shapeFactory=shapeFactory; this.ground=ground; this.gamePanel=gamePanel; ,测试类Game,public class Game public static void main(String args) / TODO Auto-generated method stub ShapeFactory shapeFactory=new ShapeFactory(); Ground ground=new Ground(); GamePanel gamePanel=new GamePanel(); Controller controller=new Controller(shapeFactory,ground,gamePanel); JFrame frame=new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(gamePanel.getSize().width+10, gamePanel.getSize().height+35); frame.add(gamePanel); gamePanel.addKeyListener(controller); frame.setVisible(true); controller.newGame(); ,程序步骤,游戏01_功能演示与说明 游戏02_面向对象设计 游戏03_使用API类组装游戏 游戏04_编写各个类主体框架 游戏05_编写Controler类实现事件监听 游戏06_编写类测试代码 游戏07_图形设计与创建 游戏08_图形移动与显示 游戏09_处理游戏边界问题 游戏10_障碍物生成与显示 游戏11_消除满行的障碍物 游戏12_增加游戏结束 游戏13_定时下落,Shape类,增加图形的描述,/二维变量用于保存图形的所有状态 private int body; /用于保存图形当前的状态 private int status; /设置状态的方法 public void setBody(int body) this.body=body; /设置当前是第几种状态 public void setStatus(int status) this.status=status; ,ShapeFactory类增加生产各种图形,/三维数组用于表示一种图形的多种形状 private int shapes=new int 1,0,0,0, 1,1,1,0, 0,0,0,0, 0,0,0,0, 1,1,0,0, 1,0,0,0, 1,0,0,0, 0,0,0,0, 1,1,1,0, 0,0,1,0, 0,0,0,0, 0,0,0,0, 0,1,0,0, 0,1,0,0, 1,1,0,0, 0,0,0,0 ;,public Shape /生产一个随机数,用于表示图形的状态 int type=new Random().nextInt(shapes.length); /设置图形有几种状态 shape.setBody(shapestype); /设置默认状态 shape.setStatus(0); return shape; ,Shape类中增加图形的位置信息,/表示图形距离左侧的距离 private int left; /表示图形距离上边界的距离 private int top; public void moveLeft() left-; public void moveRight() left+; public void moveDown() top+; public void rotate() /显示下一个状态,但得保证状态值不超过4,所以需处理 status=(status+1)%body.length; ,Shape类中增加图形的绘制方法,public void drawMe(Graphics g) System.out.println(“shapes drawme“); g.setColor(Color.RED); /循环访问代表方正的数组 for(int x=0;x4;x+) for(int y=0;y4;y+) if(getFlagByPoint(x,y) g.fill3DRect(left+x)*Global.CELL_SIZE, (top+y)*Global.CELL_SIZE, Global.CELL_SIZE, Global.CELL_SIZE, true); /获取方正中标志是1还是0,1表示要绘图0表示不绘图 private boolean getFlagByPoint(int x,int y) return bodystatusy*4+x=1; ,游戏常量的存放Glaobal,public class Global /表示每个方格的像素值 public static final int CELL_SIZE=20; /表示图形面板有多少个格子宽和高 public static final int WIDTH=15; pu

温馨提示

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

评论

0/150

提交评论