前言:基于别人的作品上进行分析
1、划分对象
(1)小方块:Cell对象
(2)4个小方块组成的图形:Tetromino对象
(3)游戏面板:TetrisPanel对象
2、分析对象中应包含的属性和方法
(1)Cell类
private int row;//当前方块所在的行;方块的高度是行高,方块的宽度是列宽
private int col;//当前方块所在的列
private Image image;//当前方块的贴图
moveRight();//右移一步
moveLeft();//左移一步
moveDown();//下移一步
(2)Tetromino类
public Cell[] cells = new Cell[4]; //每一个图形对象都是由4个方块对象组成
public State[] states;//状态数组存放图形的旋转状态,比如T形状图形,有4种状态
randomTetromino();//随机生成图形的方法
softDrop();//图形下移一步的方法
moveRight();//图形右移一步的方法
moveLeft();//图形左移一步的方法
rotateRight();//图形向右旋转一步的方法
rotateLeft(); //若向右旋转超出了面板强,则可以用该方法及时矫正
对该类的其它设计:
State类可以作为Tetromino类的内部类:int row0,col0,row1,col1,row2,col2,row3,col3;//每一种状态由8个参数确定,对应每个
方块在面板中的横纵坐标
随机生成的图形一共有七种,因此Tetromino类可以有七个子类分别对应这七种图形,子类的构造方法要设计好自己的cells和
states数组。
(3)TetrisPanel类
private Tetromino tetromino; //正在下落图形
private Tetromino nextOne; //下一个下落图形
public static final int ROWS = 20;//面板的行数
public static final int COLS = 10; //面板的列数
private Cell[][] wall = new Cell[ROWS][COLS]; //面板墙
private int lines; //消掉的行数
private int score;//分数
public static final int CELL_SIZE = 26;//表示方块是宽高都为26像素的正方块
private static Image background;//面板的背景图片
public static Image I;//每一种图形都有一张背景图填充它
public static Image J;
public static Image L;
public static Image S;
public static Image Z;
public static Image O;
public static Image T;
绘制面板涉及的方法:
ImageIO.read(url); //读取磁盘上的图片到内存,存放到各个变量中
paint(Graphics g); //绘制面板的方法
g.drawImage(background, 0, 0, null);//将背景图添加到面板中
g.translate(15, 15);//平移绘图坐标系,使(0,0)坐标在面板墙的左上角
paintTetromino(g);//绘制正在下落的方块
paintWall(g);//绘制面板墙
paintNextOne(g);//绘制下一个要下落的方块
paintScore(g);//绘制分数
图形下落过程涉及的方法:
softDropAction();//图形自动下落过程
tetrominoCanDrop();//检查当前的图形能否继续下落
tetrominoLandToWall();//让当前图形着陆
destroyLines();//是否删除一行,计算得分的方法
fullCells(int row); //判断一行是否满了
deleteRow(int row); //删除给出行,即让上一行取代给出行
checkGameOver();//检查游戏是否结束的方法
控制图形的方法:
moveRightAction(); //图形向右移动的过程,右键
moveLeftAction(); //图形向左移动的过程,左键