1.分析游戏,通过抽象思想给游戏抽象出三大类
(1)Cell类:游戏中最简单的一个小方块
(2)Tetromino类:四个小方块的组合,七个方块类型的父类(T,O,L,J,I,Z,S,)
(3)Tetris类:主类,行为类,包含游戏内的行为以及判断逻辑
2.依据各大类的内容,对类进行补充
(1)Cell类:
属性:row(行号 ) col(列号) image(对应图片)
行为:向左/右/下移动(对应单个方块的row,col的增减)
提供Javabean相关的规范
(2)Tetromino类:
属性:数组表示的四格方块cell
行为:向左/右/下移动(仅以向左移动为例):
public void moveLeft(){
for (int i = 0; i < cells.length; i++) {
Cell cell = cells[i];
cell.left();
}
}
提供randomone方法:在屏幕上随机生成一个四格方块,来自于已定义的7个类
public static Tetromino randomOne(){
Tetromino t = null ;
int num = (int)(Math.random()*7);
switch(num){
case 0:t=new T();break;
case 1:t=new O();break;
case 2:t=new L();break;
case 3:t=new J();break;
case 4:t=new I();break;
case 5:t=new Z();break;
case 6:t=new S();break;
}
return t;
}
(3)Tetris类:
属性::正在下落的方块
private Tetromino currentOne = Tetromino.randomOne();
属性:即将下落的方块
private Tetromino nextOne = Tetromino.randomOne();
属性:墙 20行10列的方格
private Cell[][] wall= new Cell[20][10];
在游戏过程中需要小方块在背景上下落,并做出对应的嵌入,变化等,因此我嫩需要背景是是一块可被嵌入窗口的面板Panel,因此,重写JPanel中的paint()方法,绘制背景,坐标。以及游戏中的方块
public void paint(Graphics g){
//图片
g.drawImage(background, 0, 0, null);
//平移坐标轴
g.translate(15, 15);
//绘制墙
paintWall(g);
//绘制正在下落的4格方块
paintCurrentOne(g);
//绘制下一个将要绘制的4格方块
paintNextOne(g);
}
绘制一个在背景上的墙,在游戏过程中,四格方块的嵌入,消失就在上面进行
墙需要有确定的长和宽(10*20)在游戏过程中,四格方块就在词基础上平移,变形
public void paintWall(Graphics a){
for (int i = 0; i <20; i++) {
for (int j = 0; j < 10; j++) {
int x= j*CELL_SIZE;
int y= i*CELL_SIZE;
if(wall[i][j]==null){
a.drawRect(x, y, CELL_SIZE, CELL_SIZE);
}else{
a.drawImage(Cell.getImage(), x, y,null);
}
}
}
}
在有了游戏界面后,开始游戏中的方块元素的编绘工作。分为两种:
(1)正在下落的方块(CurrentOne)
public void paintCurrentOne(Graphics a){
//Cell类型的数组指向 4方格整体的对象currentOne的cells数组
Cell[] cells = currentOne.cells;
for (Cell c : cells) {
int x = c.getCol()*CELL_SIZE;
int y = c.getRow()*CELL_SIZE;
a.drawImage(c.getImage(), x, y, null);
}
}
(2)将要下落的方块(NextOne)
public void paintNextOne(Graphics g) {
//获取Next对象的4个小方格
Cell[] cells = nextOne.cells;
for (Cell c : cells){
//获取每一个元素的行列号
int row = c.getRow();
int col = c.getCol();
int x = col*CELL_SIZE+260;
int y = row*CELL_SIZE+26;
g.drawImage(c.getImage(), x, y, null);
}
}
未完待续。。。。