#include<stdio.h>
#include <stdlib.h>
int a[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
int flag=0;
void right();
void left();
void up();
void down();
void printmyarry();
void keyPressEvent(char i); //自己写的
void rightKeyPress(char i);
void leftKeyPress();
void upKeyPress();
void downKeyPress();
void createOne();
void printMenu();
void main()
{
char quit='1';
createOne();
printmyarry();
printMenu();
while(quit!='q'||quit!='Q')
{
scanf("%c",&quit);
if(quit=='8'||quit=='4'||quit=='6'||quit=='2')
{
keyPressEvent(quit);
printf("移动之后\n");
createOne();
else if(quit=='q'||quit=='Q')
break;
else if(quit=='h')
{
printMenu();
//scanf("%c",&quit);
}
}
}
void printMenu()
{
printf("******请输入按钮对应数字******\n");
printf("*************8************\n");
printf("****************************\n");
printf("*****4****************6******\n");
printf("*************2*****************\n");
printf("***********h for help***********\n");
}
void keyPressEvent(char i)//自己写的
{
switch(i)
{
case '8':upKeyPress();break;
case '2':downKeyPress();break;
case '4':leftKeyPress();break;
case '6':leftKeyPress();break;
default:break;
}
}
void right()
{
int i,j,m;
for(i=0;i<4;i++)//shu
for(j=0;j<3;j++)//heng
{
for(m=0;m<3-j;m++)
{
if(a[i][m]!=0&&a[i][m+1]==0)
{
a[i][m+1]=a[i][m];
a[i][m]=0;
}
}
}
/* for(i=0;i<4;i++)//shu
for(j=0;j<3;j++)//heng
{
for(m=0;m<3-j;m++)
if(a[i][j]!=0&&a[i][j+1]!=0&&a[i][j]==a[i][j+1])
{
a[i][j+1]=2*a[i][j];
a[i][j]=0;
}
}*/
}
void left()
{
int i,j,m;
for(i=0;i<4;i++)//shu
for(j=3;j>0;j--)//heng
for(m=3;m>3-j;m--)
{
if(a[i][m]!=0&&a[i][m-1]==0)
{
a[i][m-1]=a[i][m];
a[i][m]=0;
}
}
}
void up()
{
int i,j,m;
for(i=0;i<4;i++)//heng
for(j=3;j>0;j--)//shu
{
for(m=3;m>3-j;m--)
{
if(a[m][i]!=0&&a[m-1][i]==0)
{
a[m-1][i]=a[m][i];
a[m][i]=0;
}
}
}
}
void down()
{
int i,j,m;
for(i=0;i<4;i++)//heng
for(j=0;j<3;j++)//shu
{
for(m=0;m<3-j;m++)
{
if(a[m][i]!=0&&a[m+1][i]==0)
{
a[m+1][i]=a[m][i];
a[m][i]=0;
}
}
}
}
void printmyarry()
{
printf("%d,%d,%d,%d\n",a[0][0],a[0][1],a[0][2],a[0][3]);
printf("%d,%d,%d,%d\n",a[1][0],a[1][1],a[1][2],a[1][3]);
printf("%d,%d,%d,%d\n",a[2][0],a[2][1],a[2][2],a[2][3]);
printf("%d,%d,%d,%d\n\n",a[3][0],a[3][1],a[3][2],a[3][3]);
}
void rightKeyPress()
{
right();
int i,j,m;
for(i=0;i<4;i++)//heng
for(j=0;j<3;j++)//shu
{
for(m=0;m<3-j;m++)
{
if(a[m][i]==a[m+1][i])
{
a[m+1][i]=a[m][i]*2;
a[m][i]=0;
}
}
}
}
void leftKeyPress()
{
left();
int i,j,m;
for(i=0;i<4;i++)//shu
for(j=3;j>0;j--)//heng
for(m=3;m>3-j;m--)
{
if(a[i][m]==a[i][m-1])
{
a[i][m-1]=a[i][m]*2;
a[i][m]=0;
}
}
}
void upKeyPress()
{
up();
int i,j,m;
for(i=0;i<4;i++)//heng
for(j=3;j>0;j--)//shu
{
for(m=3;m>3-j;m--)
{
if(a[m][i]==a[m-1][i])
{
a[m-1][i]=a[m][i]*2;
a[m][i]=0;
}
}
}
}
void downKeyPress()
{
down();
int i,j,m;
for(i=0;i<4;i++)//heng
for(j=0;j<3;j++)//shu
{
for(m=0;m<3-j;m++)
{
if(a[m][i]==a[m+1][i])
{
a[m+1][i]=a[m][i]*2;
a[m][i]=0;
}
}
}
}
void createOne()
{
int i=0,j=0;
i=rand()%4;
j=rand()%4;
if(a[i][j]==0)
{
a[i][j]=2;
flag++;
}
else
{
if(flag<16)
#include <stdlib.h>
int a[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
int flag=0;
void right();
void left();
void up();
void down();
void printmyarry();
void keyPressEvent(char i); //自己写的
void rightKeyPress(char i);
void leftKeyPress();
void upKeyPress();
void downKeyPress();
void createOne();
void printMenu();
void main()
{
char quit='1';
createOne();
printmyarry();
printMenu();
while(quit!='q'||quit!='Q')
{
scanf("%c",&quit);
if(quit=='8'||quit=='4'||quit=='6'||quit=='2')
{
keyPressEvent(quit);
printf("移动之后\n");
createOne();
printmyarry();
if(flag>=16){printf("gameOver!");return ;}
else if(quit=='q'||quit=='Q')
break;
else if(quit=='h')
{
printMenu();
//scanf("%c",&quit);
}
}
}
void printMenu()
{
printf("******请输入按钮对应数字******\n");
printf("*************8************\n");
printf("****************************\n");
printf("*****4****************6******\n");
printf("*************2*****************\n");
printf("***********h for help***********\n");
}
void keyPressEvent(char i)//自己写的
{
switch(i)
{
case '8':upKeyPress();break;
case '2':downKeyPress();break;
case '4':leftKeyPress();break;
case '6':leftKeyPress();break;
default:break;
}
}
void right()
{
int i,j,m;
for(i=0;i<4;i++)//shu
for(j=0;j<3;j++)//heng
{
for(m=0;m<3-j;m++)
{
if(a[i][m]!=0&&a[i][m+1]==0)
{
a[i][m+1]=a[i][m];
a[i][m]=0;
}
}
}
/* for(i=0;i<4;i++)//shu
for(j=0;j<3;j++)//heng
{
for(m=0;m<3-j;m++)
if(a[i][j]!=0&&a[i][j+1]!=0&&a[i][j]==a[i][j+1])
{
a[i][j+1]=2*a[i][j];
a[i][j]=0;
}
}*/
}
void left()
{
int i,j,m;
for(i=0;i<4;i++)//shu
for(j=3;j>0;j--)//heng
for(m=3;m>3-j;m--)
{
if(a[i][m]!=0&&a[i][m-1]==0)
{
a[i][m-1]=a[i][m];
a[i][m]=0;
}
}
}
void up()
{
int i,j,m;
for(i=0;i<4;i++)//heng
for(j=3;j>0;j--)//shu
{
for(m=3;m>3-j;m--)
{
if(a[m][i]!=0&&a[m-1][i]==0)
{
a[m-1][i]=a[m][i];
a[m][i]=0;
}
}
}
}
void down()
{
int i,j,m;
for(i=0;i<4;i++)//heng
for(j=0;j<3;j++)//shu
{
for(m=0;m<3-j;m++)
{
if(a[m][i]!=0&&a[m+1][i]==0)
{
a[m+1][i]=a[m][i];
a[m][i]=0;
}
}
}
}
void printmyarry()
{
printf("%d,%d,%d,%d\n",a[0][0],a[0][1],a[0][2],a[0][3]);
printf("%d,%d,%d,%d\n",a[1][0],a[1][1],a[1][2],a[1][3]);
printf("%d,%d,%d,%d\n",a[2][0],a[2][1],a[2][2],a[2][3]);
printf("%d,%d,%d,%d\n\n",a[3][0],a[3][1],a[3][2],a[3][3]);
}
void rightKeyPress()
{
right();
int i,j,m;
for(i=0;i<4;i++)//heng
for(j=0;j<3;j++)//shu
{
for(m=0;m<3-j;m++)
{
if(a[m][i]==a[m+1][i])
{
a[m+1][i]=a[m][i]*2;
a[m][i]=0;
}
}
}
}
void leftKeyPress()
{
left();
int i,j,m;
for(i=0;i<4;i++)//shu
for(j=3;j>0;j--)//heng
for(m=3;m>3-j;m--)
{
if(a[i][m]==a[i][m-1])
{
a[i][m-1]=a[i][m]*2;
a[i][m]=0;
}
}
}
void upKeyPress()
{
up();
int i,j,m;
for(i=0;i<4;i++)//heng
for(j=3;j>0;j--)//shu
{
for(m=3;m>3-j;m--)
{
if(a[m][i]==a[m-1][i])
{
a[m-1][i]=a[m][i]*2;
a[m][i]=0;
}
}
}
}
void downKeyPress()
{
down();
int i,j,m;
for(i=0;i<4;i++)//heng
for(j=0;j<3;j++)//shu
{
for(m=0;m<3-j;m++)
{
if(a[m][i]==a[m+1][i])
{
a[m+1][i]=a[m][i]*2;
a[m][i]=0;
}
}
}
}
void createOne()
{
int i=0,j=0;
i=rand()%4;
j=rand()%4;
if(a[i][j]==0)
{
a[i][j]=2;
flag++;
}
else
{
if(flag<16)
createOne();
}