2048小游戏还是很简单的 这个是我做的
首先分析
- 游戏的操作只有上下左右的滑动
- 每次滑动的结果是
- 1.数字向该方向滑动,
- 2.相同的并且相邻的数字相加,
- 3.数字相加有一定的顺序,方向上靠前的数字先与相邻的数字相加,数字每次滑动只进行一次相加,比如 向左滑 2,2,2,2滑动之后是4,4而不是2,4,2或者8
- 数字之间的计算只在滑动所在的一行或者一列。
- 滑动之后随机在没有数字的地方出现2或者4
- 如果在某个方向上没办法移动并且没有数字相加就不会出现数字
- 所有数字无法移动之后结束游戏或者出现2048这个数字
实现方式,不管上下左右其实结果都是一样的,而且每一行的计算也是一样的,只要实现了一行的计算就可以实现所有的计算。
这里使用了linkedList作为一行数据结构,将一行的数据按顺序放入list,空格使用0来填入
void OneLineCount(){
//去掉所有的空格‘0’
for (int p = 0; p < mnumberlist.size();) {
if (mnumberlist.get(p) == 0) {
mnumberlist.remove(p);
}else {
p++;
}
}
//将相邻的数字作比较相等就去掉两个数字并在前一个数字添加他们的两倍,然后k++跳到下一个数字,当k位置是最后一个数字时就退出因为最后一个没有后面的数字了
for (int k = 0; k < mnumberlist.size()-1; k++){
if (mnumberlist.get(k).equals(mnumberlist.get(k+1))){
Integer a = new Integer(mnumberlist.get(k)*2);
mnumberlist.remove(k);
mnumberlist.add(k,a);
mnumberlist.remove(k+1);
}
}
}
我使用int[4][4]二维数组表示整个表格,在滑动之后就按滑动方向的顺序将每一行添加到LinkedList里面下面是向左滑时的代码
void leftSroll(){
for (int i = 0; i < 4 ;i++){
for (int j = 0; j < 4;j++){
//将一行填入list,每种滑动顺序都不一样
mnumberlist.add(j,tablet[i][j]);
}
OneLineCount();//一行的计算
for (int c = 0 ; c<4;c++){
//将list中的数据填会二维数组,没有数字就填0
if (c < mnumberlist.size())
tablet[i][c] = mnumberlist.get(c);
else
tablet[i][c] = 0;
}
mnumberlist.clear();//清掉list准备下一行
}
}
向右滑,和向下,向上
void rightSroll(){
for(int i = 0; i < 4; i++){
int k = 0;//向右滑是从右到左添加数字,但是list计算是从左到右因此填入顺序要相反,同下
for (int j = 3; j > -1; j--) {
mnumberlist.add(k,tablet[i][j]);
k++;
}
oneLineCount();
int d = 0;
for (int c = 3 ; c > -1; c--){
if (d < mnumberlist.size())
tablet[i][c] = mnumberlist.get(d);
else
tablet[i][c] = 0;
d++;
}
mnumberlist.clear();
}
}
void print(){
for (