项目实战 --俄罗斯方块.ppt

上传人:涵*** 文档编号:97202016 上传时间:2024-04-30 格式:PPT 页数:25 大小:81KB
返回 下载 相关 举报
项目实战 --俄罗斯方块.ppt_第1页
第1页 / 共25页
项目实战 --俄罗斯方块.ppt_第2页
第2页 / 共25页
点击查看更多>>
资源描述

《项目实战 --俄罗斯方块.ppt》由会员分享,可在线阅读,更多相关《项目实战 --俄罗斯方块.ppt(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、JAVAJAVA程序设计程序设计项目实训演练项目实训演练!项目实战项目实战俄罗斯方块俄罗斯方块主主讲:贾宗维讲:贾宗维程序演示程序演示游戏游戏01_功能演示与说明功能演示与说明游戏游戏02_面向对象设计面向对象设计游戏游戏03_使用使用API类组装游戏类组装游戏游戏游戏04_编写各个类主体框架编写各个类主体框架游戏游戏05_编写编写Controler类实现事件监听类实现事件监听游戏游戏06_编写类测试代码编写类测试代码游戏游戏07_图形设计与创建图形设计与创建游戏游戏08_图形移动与显示图形移动与显示游戏游戏09_处理游戏边界问题处理游戏边界问题游戏游戏10_障碍物生成与显示障碍物生成与显示游

2、戏游戏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 m

3、oveDown);public void rotate()System.out.println(shapes rotate);public void drawMe()System.out.println(shapes drawme);private class ShapeDriver implements Runnablepublic void run()/TODO Auto-generated method stubwhile(true)moveDown();/listener.shapeMoveDown(Shape.this);try Thread.sleep(1000);catch(In

4、terruptedException e)/TODO Auto-generated catch blocke.printStackTrace();编写各个类主体框架编写各个类主体框架-ShapeFactory类类public class ShapeFactory public Shape getShape(ShapeListener listener)System.out.println(ShapeFactorys getShape);Shape shape=new Shape();return shape;编写各个类主体框架编写各个类主体框架-Ground类类package cn.tetri

5、s.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)Sys

6、tem.out.println(GamePanels display);this.ground=ground;this.shape=shape;this.repaint();Overrideprotected void paintComponent(Graphics arg0)/TODO Auto-generated method stub/重新显示if(ground!=null&shape!=null)ground.drawMe();shape.drawMe();编写各个类主体框架编写各个类主体框架-Controller类类public class Controller extends Ke

7、yAdapter 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

8、;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

9、(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 Runnablepublic void

10、 run()/TODO Auto-generated method stubwhile(true)moveDown();listener.shapeMoveDown(Shape.this);try Thread.sleep(1000);catch(InterruptedException e)/TODO Auto-generated catch blocke.printStackTrace();Shape类中增加注册监听器的方法public void addShapeListener(ShapeListener l)if(l!=null)this.listener=l;Shape构造方法中启动

11、下落线程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 stubgamePanel.display(ground,shape);生产图形时同时注册监听器public class ShapeFactory publ

12、ic 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);Contr

13、oller类中如何接收外部控制的对象类中如何接收外部控制的对象public Controller(ShapeFactory shapeFactory,Ground ground,GamePanel gamePanel)this.shapeFactory=shapeFactory;this.ground=ground;this.gamePanel=gamePanel;测试类Gamepublic class Game public static void main(String args)/TODO Auto-generated method stub ShapeFactory shapeFact

14、ory=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().heig

15、ht+35);frame.add(gamePanel);gamePanel.addKeyListener(controller);frame.setVisible(true);controller.newGame();程程序步骤序步骤游戏游戏01_功能演示与说明功能演示与说明游戏游戏02_面向对象设计面向对象设计游戏游戏03_使用使用API类组装游戏类组装游戏游戏游戏04_编写各个类主体框架编写各个类主体框架游戏游戏05_编写编写Controler类实现事件监听类实现事件监听游戏游戏06_编写类测试代码编写类测试代码游戏游戏07_图形设计与创建图形设计与创建游戏游戏08_图形移动与显示图形移动

16、与显示游戏游戏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=stat

17、us;ShapeFactory类增加生产各种图形/三维数组用于表示一种图形的多种形状private int shapes=new int1,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(sh

18、apestype);/设置默认状态 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类中增加图形的绘制

19、方法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 boo

20、lean getFlagByPoint(int x,int y)return bodystatusy*4+x=1;游戏常量的存放Glaobalpublic class Global /表示每个方格的像素值public static final int CELL_SIZE=20;/表示图形面板有多少个格子宽和高public static final int WIDTH=15;public static final int HEIGHT=15;测试游戏,下落方块出现拖影在GamePanel类的paintComponent方法中增加如下代码:在填充一个与背景同色的区域g.setColor(new C

21、olor(0 xcfcfcf);g.fillRect(0,0,Global.CELL_SIZE*Global.WIDTH,Global.CELL_SIZE*Global.HEIGHT);/填充一个灰色显示区域,避免图形拖影修改此处的同时还需修改Shape的drawme方法中设置图形的颜色,以及给frame也注册监听器。图形如何避免移出边界public boolean isMoveable(Shape shape,int action)/得到图像当前的位置信息 int left=shape.getLeft();int top=shape.getTop();/根据图形的动作,得出图形最新的位置信息 switch(action)case Shape.LEFT:left-;break;case Shape.RIGHT:left+;break;case Shape.DOWN:top+;break;/依次取出图形中的每一个点,判断是否超出显示区域 for(int x=0;x4;x+)for(int y=0;y=Global.HEIGHT|left+x=Global.WIDTH)return false;return true;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文献 > 事务文书

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁