直接看效果:
主要难点就在于执行上下左右的逻辑:
/*向上操作*/
public void pushUp() {
System.out.println("push up........");
for (int y = 0; y < 4; y++) {
for (int x = 1; x < 4; x++) {/*从第二行开始*/
int flag = 0;//判断标志
if (gameBoard[x][y] != 0) {
int value = gameBoard[x][y];
int X = x - 1;/*X为前一行*/
while ((X >= 0) && gameBoard[X][y] == 0) {
X--;
flag = 1;
}
if (X == -1) {/*前面所有行都为0,直接赋值给第一行*/
gameBoard[0][y] = value;
gameBoard[x][y] = 0;
} else if (gameBoard[X][y] != value) {/*flag为0,证明前一行不都为0,并且与该行值不相等,不做操作*/
if (flag == 1) {/*中间有1或2行空行,因此将该行的下一行赋值为value*/
gameBoard[X + 1][y] = value;
gameBoard[x][y] = 0;
}
} else if(gameBoard[X][y]==gameBoard[x][y]){
gameBoard[X][y] *= 2;
gameBoard[x][y] = 0;
score+=gameBoard[X][y];
}
}
}
}
}
/*向下操作*/
public void pushDown() {
System.out.println("push down........");
for (int y = 0; y < 4; y++) {
for (int x = 2; x > -1; x--) {/*第3行开始*/
int flag = 0;//判断标志
if (gameBoard[x][y] != 0) {
int value = gameBoard[x][y];
int X = x + 1;/*X为下一行*/
while ((X <= 3) && gameBoard[X][y] == 0) {
X++;
flag = 1;
}
if (X == 4) {/*第4行都为0,将value赋值第4行*/
gameBoard[3][y] = value;
gameBoard[x][y] = 0;
} else if (gameBoard[X][y] != value) {/*下一行不等于value,flag为0,不做操作*/
if (flag == 1) {
gameBoard[X - 1][y] = value;/*flag为一,中间有空行,让它上一行为value*/
gameBoard[x][y] = 0;
}
} else if(gameBoard[X][y]==gameBoard[x][y]){
gameBoard[X][y] *= 2;
gameBoard[x][y] = 0;
score+=gameBoard[X][y];
}
}
}
}
}
/*向右操作*/
public void pushRight() {
System.out.println("push right........");
for (int x = 0; x < 4; x++) {
for (int y = 2; y > -1; y--) {/*第3列开始*/
int flag = 0;//判断标志
if (gameBoard[x][y] != 0) {
int value = gameBoard[x][y];
int Y = y + 1;/*右边的一列*/
while ((Y <= 3) && gameBoard[x][Y] == 0) {
Y++;
flag = 1;
}
if (Y == 4) {/*最右一列为0*/
gameBoard[x][3] = value;
gameBoard[x][y] = 0;
} else if (gameBoard[x][Y] != value) {/*右边的列与该值不相等,flag为0,不操作*/
if (flag == 1) {/*flag为1,中有空列,让该列左边一列为该值*/
gameBoard[x][Y - 1] = value;
gameBoard[x][y] = 0;
}
} else if(gameBoard[x][Y]==gameBoard[x][y]){
gameBoard[x][Y] *= 2;
gameBoard[x][y] = 0;
score+=gameBoard[x][Y];
}
}
}
}
}
public void pushLeft() {
System.out.println("push left........");
for (int x = 0; x < 4; x++) {
for (int y = 1; y < 4; y++) {/*第2列开始*/
int flag = 0;//判断标志
if (gameBoard[x][y] != 0) {
int value = gameBoard[x][y];
int Y = y - 1;/*为左边一列*/
while ((Y >= 0) && gameBoard[x][Y] == 0) {
Y--;
flag = 1;
}
if (Y == -1) {
gameBoard[x][0] = value;
gameBoard[x][y] = 0;/*第一列为0*/
} else if (gameBoard[x][Y] != value) {/*与前一列不相等,flag为0,不操作*/
if (flag == 1) {/*flag=1,中间有空列,让它右边一列为该值*/
gameBoard[x][Y + 1] = value;
gameBoard[x][y] = 0;
}
} else if(gameBoard[x][Y]==gameBoard[x][y]){
gameBoard[x][Y] *= 2;
gameBoard[x][y] = 0;
score+=gameBoard[x][Y];
}
}
}
}
}
要源码的同学,评论区留言。
本文暂时没有评论,来添加一个吧(●'◡'●)