自己写的,有老师的帮助,放上部分代码
1 //向上 2 void DirUP() 3 { 4 for (int i = 0; i < 4; i++) 5 { 6 for (int j = 0; j < 4; j++) 7 { 8 //有数字,向下查找,合并数字 9 if (map[j][i] !=0) 10 { 11 for (int m = j + 1; m < 4; m++) 12 { 13 // 下一项和当前一样,相加 14 if (map[m][i] == map[j][i]){ 15 map[j][i] *= 2; 16 map[m][i] = 0; 17 break; 18 } 19 else if (map[m][i]!=0) 20 { 21 break; 22 } 23 } 24 } 25 //没有数字,向下查找,将数据往上提 26 else{ 27 for (int m = j ; m < 4; m++) 28 { 29 if (map[m][i] != 0) 30 { 31 map[j][i] = map[m][i]; 32 map[m][i] = 0; 33 j--; 34 break; 35 } 36 } 37 } 38 } 39 } 40 num();//随机出现数字 41 }
同学写的,看着更加简单,可能更难理解
1 //向上移动 2 void move_up() 3 { 4 for (int i = 0; i < 4; i++) //遍历每一列 0 1 2 3 5 { 6 for (int j = 1, k = 0; j < 4; j++) //遍历这一列的每一个格 7 { 8 if (map[j][i] > 0) //先找到一个有数的 9 { 10 if (map[j][i] == map[k][i]) //将同列每行与同列零行 进行比较 11 { 12 map[k][i] *= 2; 13 map[j][i] = 0; 14 ++k; 15 } 16 else if (map[k][i] == 0) 17 { 18 map[k][i] = map[j][i]; 19 map[j][i] = 0; 20 } 21 else 22 { 23 map[++k][i] = map[j][i]; 24 if (j != k) 25 { 26 map[j][i] = 0; 27 } 28 29 } 30 } 31 } 32 } 33 num();//随机出现数字 34 }