1,分析游戏界面,通过游戏界面,抽象出来几种类型
2,定义类型
Cell:
公共特征:行号,列号,图片
共同行为:向左,向右,向下移动,提供JavaBean相关的规范
Tetromino类型,其七种组合的父类
共同特征,cells——四格方块(用数组表示)-——权限修饰词protect
共同行为:向左,向右,向下移动,提供JavaBean相关规范
添加randomOne()用来随机生成一个四格方块
根据父类,定义出来七种子类:T ,Z,O,I,L,J,S
给属性附具体元素
主类Tetris------extends JPanel
提供静态属性,加载静态资源
1,面板会自动调用绘制方法paint(Graphics g)
2,重写paint方法,绘制图片背景,
, 3,绘制网格和嵌入墙中的方块paintWall(Graphics g)提供属性wall ----是一个Cell类型的二维数组,20行,10列,属性Cell_SIZE-----一个方法的宽度
4,提供属性,
CurrentOne----正在下降的四方格
5,提供绘制正在下落的方块的方法
PaintCurrentOne(Graphics g)
6,在重写的paint方法中调用
1)在paint方法中平移坐标轴到相应的位置
2)调用paintWall()方法,且完成里面的功能
3)画下一个下落的四方格到右上角相应的位置,paintNextOne()
7,写一个start方法,用JPanel的对象调用此方法,在此方法中实现游戏的主要逻辑
1)先用while(true)死循环中加入下落的方法来实现四方格的下落,每下落一次都要重新画,通过调用repaint()方法来实现,repaint()方法也是JPanel中的,且repaint()会自己调用paint()方法
2)加入键盘监听事件,用键盘来控制四方格的移送
3)KeyListener l=new KeyAdapter() {}匿名内部类中 //开启键盘监听事件,且是键盘按下去所调用
int code=e.getKeyCode()获取down键,left键,Right键的编号
通过switch()case调用相应的方法来实现移动(其中KeyEvent.VK_DOWN是常量值==down键的编号, KeyEvent.VK_LEFT==left键的编号,KeyEvent.VK_RIGHT==Right键的编号)
4)再外类中写softDropAction()方法来实现down键控制下落
在其中会调用canDrop()方法,来判断是否能继续下落
若能下落currentOne调用Tetromino指向的子类中的softDrop()方法来实现下落
5)在外类中写moveLeft()方法来实现left键控制左移
先执行一次左移currentOne.moveLeft(),currentOne调用Tetromino指向的子类中的moveLeft()方法来实现;
再调用noMove()和coincide()方法,来判断是否需要右移来抵消多左移的一次
因为noMove()代表是否出最左边的线,coincide()代表是否与已有的方块重合,若返回true则通过currentOne.moveRight()来抵消
5)在外类中写moveRight()方法来实现left键控制左移
实现和外类中的moveLeft()类似
6)注意:在moveLeft()和moveRight()方法的判断条件是noMove与coincide或的关系,一定要把noMove()写在 coincide()的前面,这样可以防止在coincide()方法中出现数组下标越界的异常
备注:javaBean规范,就是程序员在定义类时,默认遵守的一种规范
如:(1)添加两个构造器
(2)属性一般都是私有化
(3) 提供共有的get/set方法
(4)重写toString方法,用来描述属性的信息
(5)重写equals方法和hasCode方法