#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
int map[6][6];
int trans[5];
int move_judge;
char line_indentation[]="\t\t\t\t\t ";
char list_indentation[]="\n\n\n\n\n\n\n\n";
char line_spacing[]="\n\n";
void Creat()
{
int block_x,block_y;
srand(time(0));
do{
block_x=rand()%4+1;
block_y=rand()%4+1;
}while(map[block_x][block_y]!=0);
map[block_x][block_y]=(rand()%4+1)/4+1;
return;
}
void Combine_stack(int test)
{
int head=1;
int void_judge=0;
int stack[5]={233};
for(int i=1;i<=4;i++)
{
if(trans[i]!=0)
{
stack[head]=trans[i];
if(stack[head-1]!=0)
{
if(stack[head-1]==stack[head])
{
move_judge=1;
stack[head-1]++;
stack[head]=0;
head++;
continue;
}
else
{
if(void_judge)
move_judge=1;
head++;
continue;
}
}
else
{
stack[head-1]=trans[i];
continue;
}
}
else
void_judge=1;
}
if(!test)
for(int k=1;k<=4;k++)
trans[k]=stack[k];
}
int Move(char dir,int test)
{
move_judge=0;
switch(dir)
{
case 'w':
for(int j=1;j<=4;j++)
{
for(int i=1;i<=4;i++)
trans[i]=map[i][j];
Combine_stack(test);
for(int i=1;i<=4;i++)
map[i][j]=trans[i];
}
break;
case 's':
for(int j=1;j<=4;j++)
{
for(int i=4;i>=1;i--)
trans[5-i]=map[i][j];
Combine_stack(test);
for(int i=4;i>=1;i--)
map[i][j]=trans[5-i];
}
break;
case 'a':
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
trans[j]=map[i][j];
Combine_stack(test);
for(int j=1;j<=4;j++)
map[i][j]=trans[j];
}
break;
case 'd':
for(int i=1;i<=4;i++)
{
for(int j=4;j>=1;j--)
trans[5-j]=map[i][j];
Combine_stack(test);
for(int j=4;j>=1;j--)
map[i][j]=trans[5-j];
}
break;
}
return move_judge;
}
int Judge()
{
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
{
if(map[i][j]==11)
return 0;
if(map[i][j]==0)
return 1;
}
return 0;
}
void Print()
{
printf(list_indentation);
for(int i=0;i<=5;i++)
{
printf(line_indentation);
for(int j=0;j<=5;j++)
{
switch(map[i][j])
{
case -1: printf(" # ");break;
case 0: printf(" ");break;
case 1: printf(" 2 ");break;
case 2: printf(" 4 ");break;
case 3: printf(" 8 ");break;
case 4: printf(" 16 ");break;
case 5: printf(" 32 ");break;
case 6: printf(" 64 ");break;
case 7: printf(" 128 ");break;
case 8: printf(" 256 ");break;
case 9: printf(" 512 ");break;
case 10: printf("1024 ");break;
case 11: printf("2048 ");break;
}
}
printf(line_spacing);
}
return;
}
int main()
{
for(int i=0;i<=5;i++)
{
map[i][0]=map[i][5]=-1;
if(i==0||i==5)
for(int j=1;j<=4;j++)
map[i][j]=-1;
}
Creat();Creat();
system("cls");
Print();
char key;
int judge;
while(1)
{
key=getch();
switch(key)
{
case 'W': case 'w': judge=Move('w',0);break;
case 'S': case 's': judge=Move('s',0);break;
case 'A': case 'a': judge=Move('a',0);break;
case 'D': case 'd': judge=Move('d',0);break;
default: continue;
}
if(judge)
Creat();
system("cls");
Print();
if(!Judge())
{
if(Move('w',1)||Move('s',1)||Move('a',1)||Move('d',1))
continue;
printf(line_indentation);
printf("Game Over\n");
printf(line_indentation);
printf("Press any key to exit\n");
return 1;
}
}
}
2048
最新推荐文章于 2025-07-07 20:39:42 发布