#defineKey_Up 0x4800// 向上方向键
#defineKey_Down 0x5000// 向下方向键
#defineKey_Right 0x4d00// 向右方向键
#defineKey_Left 0x4b00// 向左方向键
intmap[4][4] = {0 };
intcheck[4] = {0}; //判断游戏是否结束,如果都不为0,游戏结束 int i, j;
////显示在屏幕上//void print
{
for
{
for
{
printf;
}
printf;
}
}
////向右移动//int moveRight {
intflag =0;//来标记是否整个map矩阵能否改变,以此判断整个游戏是否结束
//这个循环的目的是为了做某一行的加减,如某一行为[2 2 4 4],经过以下运算就会变为[0 4 0 8];for
{
for
{
intcell = map[i][j];
if
{
intk = j -1;
while
{
intnextcell = map[i][k];
if
{
if
{
flag =1;
map[i][j] += map[i][k];
map[i][k] =0;
}
k = -1;
break;
}
k--;
}
}
}
}
//上一步做的是数据加减,这一步对加减后的数据做数据处理
//例如某一行经过上一步的数据为【0 4 0 8】,将会变为【0 0 4 8】for
{
for
{
intcell = map[i][j];
if
{
intk = j -1;
while
{
intnextcell = map[i][k];
if
{
flag =1;//当前元素为0,说明能移动,改变flag的值map[i][j] = nextcell;
map[i][k] =0;
k = -1;
}
k--;
}
}
}
}
if
return0;
elsereturn4;//游戏结束 }
////向左移动//int moveLeft {
intflag=0;
for
{
for
{
intcell = map[i][j];//cell单词用的不太恰当,表示当前元素,你可以采用更有意义的命名if
{
intk = j +1;
while
{
intnextcell = map[i][k];
if
{
if
{
flag =1;//相邻两个元素相同,就说明能移动,所以改变flag的值map[i][j] += map[i][k];
map[i][k] =0;
}
k =4;
break;
}
k++;
}
}
}
}
//修改部分:for循环中的i或者j的循环条件for
{
for
{
intcell = map[i][j];
if
{
intk = j +1;
while
{
intnextcell = map[i][k];
if
{
flag =1;
map[i][j] = nextcell;
map[i][k] =0;
k =4;
}
k++;
}
}
}
}
if
return0;
elsereturn3;
}
////向下移动 //int moveDown {
intflag=0;
for
{
for
{
intcell = map[i][j];
if
{
intk = i -1;
while
{
intnextcell = map[k][j];
if
{
if
{
flag =1;
map[i][j] += map[k][j];
map[k][j] =0;
}
k =0;
break;
}
k--;
}
}
}
}
//修改部分:for循环中的i或者j的循环条件for
{
for
{
intcell = map[i][j];
if
{
intk = i -1;
while
{
intnextcell = map[k][j];
if
{
flag =1;
map[i][j] = nextcell;
map[k][j] =0;
k =0;
}
k--;
}
}
}
}
if
return0;
elsereturn2;
}
////向上移动//int moveUp {
intflag=0;
for
{
for
{
intcell = map[i][j];
if
{
intk = i +1;
while
{
intnextcell = map[k][j];
if
{
if
{
flag =1;
map[i][j] += map[k][j];
map[k][j] =0;
}
k =4;
break;
}
k++;
}
}
}
}
//修改部分:for循环中的i或者j的循环条件for
{
for
{
intcell = map[i][j];
if
{
intk = i +1;
while
{
intnextcell = map[k][j];
if
{
flag =1;
map[i][j] = nextcell;
map[k][j] =0;
k =4;
}
k++;
}
}
}
}
if
return0;
elsereturn1;
}
////随机生成在空格上生成2或者4,并且判断是否游戏结束 //intrandInteger//有缺陷,【0 0 0 0】{
for
{
for
{
if
{
map[i][j] = %2+1) *2;//return0;
}
}
}
return0;
}
int main
{
char key;
while
{
printf;
printf;
scanf;
switch
{
case'w':
{
randInteger;
moveUp;
printf;
print;
break;
}
case's':
{
randInteger;
moveDown;
printf;
print;
break;
}
case'a':
{
randInteger;
moveLeft;
printf;
print;
break;
}
case'd':
{
randInteger;
moveRight;
printf;
print;
break;
}
case'q':
return0;
}
}
return0;
}
“我是一名从事了10年开发的老程序员,最近我花了一些时间整理关于C语言、C++,自己有做的材料的整合,一个完整的学习C语言、C++的路线,学习材料和工具。免费送给大家。这里是编程爱好者的聚集地,欢迎初学和进阶中的小伙伴。希望你也能凭自己的努力,成为下一个优秀的程序员。
关注我的专栏带你遨游代码的世界!