设计思路:
用0,1,2,3表示事件向左,右,上,下;然后是判断游戏结束标志:
- 游戏出现2048时,赢得游戏而退出;
- 游戏画板满了,并且左右上下移动都不能再合并任何元素时,那么游戏已经进入了死胡同不可能再有解,所以判断输了而结束游戏;
游戏实现:
用二维数组来储存游戏画板;
1.每次捕捉事件前,先将每个元素向指定的方向移动,
将他们之间空白的元素去掉,
2.然后按照他们时间的方向的的反方向去没两个相邻的元素比较,如果相同就相加复制给前一个元素,后一个元素置零(表示空白);
3.重复1;
下面是代码,有注释,大家可以看看,欢迎拍砖;
代码工程已发布在https://github.com/BrightenYim/2048inJava
欢迎大家拍砖:
package brighten.demo;
/*
* @author BrightenYim 2015.4.12
* @mailto brightenyim@qq.com
*/
import java.util.Random;
import java.util.Scanner;
public class Game2048 {
public final static int n=4;
int[][] array = new int[n][n];
void initial(){
//初始化这个数组 开始时初始化
for(int p = 0;p < 4;p++)//默认 0?是否需要初始化
for(int q =0;q < 4;q++){
array[p][q] = 0;
}
Random random = new Random();
int j =random.nextInt(4);
int k = random.nextInt(4);
array[j][k] = 2;
}
void again(){
//合并事件后 随机生成2
Random random = new Random();
while(true){
int j = random.nextInt(4);
int k = random.nextInt(4);
if(array[j][k] == 0){
array[j][k] = 2;break;
}
else {
continue;
}
}
}
void display(){
//显示数组
for(int i = 0;i < 4;i++)
for(int j = 0;j < 4 ;j++){
if(j==3){
System.out.println(array[i][j]);
}
else {
System.out.printf("%d ",array[i][j]);
}
}
}
/*void swap(int i, int j){//交换 //cau