一点一点写出来的程序,想跟大家分享一下自己的心得,可能有错误,还请多多包涵~
Cell类:
public class Cell
定义了本游戏最基本的元素:小方块(cell)的基本参数:行,列,小方块图片:
private int row;//行数
private int col;//列数
private BufferedImage image;//图片
提供无参有参构造器:
public Cell() {}
public Cell(int row, int col, BufferedImage image) {
super();
this.row = row;
this.col = col;
this.image = image;
}
提供get/set方法:
public int getRow() {
return row;
}
public void setRow(int row) {
this.row = row;
}
public int getCol() {
return col;
}
public void setCol(int col) {
this.col = col;
}
public BufferedImage getImage() {
return image;
}
public void setImage(BufferedImage image) {
this.image = image;
}
定义了本游戏最基本的行为:左移一格;右移一格;下落一格.
public void left() {
col--;//向左移动,列数减1
}
public void right() {
col++;//向右移动,列数加1
}
public void drop() {
row++;//向下移动,行数+1
}
Tetromino类,提供方块的各种行为方法:
public class Tetromino{
我们将一个四个方块视为一个数组:
protected Cell[] cells = new Cell[4];
将一个四个方块的四种状态也定义为数组:
protected State[] states;
添加一个作为旋转计数器的量:
private int count = 100000;//数值多少都可以
定义cell的各种行为:下落;左移;右移;旋转:
public void moveLeft() {//向左移动
for(int i=0;i<cells.length;i++) {//for循环遍历整个"方块组"的四格方块
Cell cell = cells[i];//四格方块都要移动
cell.left();
}
}
public void moveRight() {//向右移动
for(Cell c:cells) {//此处使用增强for循环也可以
c.right();
}
}
public void softDrop() {//下落
for(Cell c:cells) {
c.drop();
}
}
以及旋转的方法
public void rotateRight() {//向右旋转
//旋转有一次,计算器增长1
count++;//100001
State s = states[count%states.length];
Cell c = cells[0];
int row = c.getRow();
int col = c.getCol();
cells[1].setRow(row+s.row1);
cells[1].setCol(col+s.col1);
cells[2].setRow(row+s.row2);
cells[2].setCol(col+s.col2);
cells[3].setRow(row+s.row3);
cells[3].setCol(col+s.col3);
}
public void rotateLeft() {//向左旋转方法有什么用呢?稍后就会就知道了.
count--;//100001
State s = states[count%states.length];
Cell c = cells[0];
int row = c.getRow();
int col = c.getCol();
cells[1].setRow(row+s.row1);
cells[1].setCol(col+s.col1);
cells[2].setRow(row+s.row2);
cells[2].setCol(col+s.col2);
cells[3].setRow(row+s.row3);
cells[3].setCol(col+s.col3);
}
以及随机生成七种方块中的一种的方法randomOne()
public static Tetromino randomOne() {
//随机生成方块,七种方块形状分别为O,T,I,J,L,S,Z
Tetromino t = null;
int num = (int)(Math.random()*7);
switch(num) {
case 0:t = new O();break;
case 1:t = new T();break;
case 2:t = new I();break;
case 3:t = new J();break;
case 4:t = new L();break;
case 5:t = new S();break;
case 6:t = new Z();break;
}
return t;
}
然后定义内部类state:
public class State{
此类用来描述方块旋转的四种状态,首先定义八个整型变量,用来描述四个方块的位置.0,1,2,3分别代表四个方块,我们旋转的时候以方块0为轴,其余三个方块向右旋转:
int row0,col0,row1,col1,row2,col2,row3,col3;
然后提供无参有参构造器:
public State() {}
public State(int row0, int col0, int row1, int col1, int row2, int col2, int row3, int col3) {
super();
this.row0 = row0;
this.col0 = col0;
this.row1 =