#include<stdio.h>
#include<Windows.h>
#include<time.h>
#include<conio.h>
#include<algorithm>
using namespace std;
namespace __2048
{
const int d[][2]={{0,1},{0,-1},{1,0},{-1,0}};
char map[4][4],in;
void init()
{
memset(map,-1,sizeof map);
}
int check()
{
int flag=0;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(map[i][j]==-1)
{
flag=1;
break;
}
}
}
return flag;
}
void grow()
{
srand(time(0));
int x,y;
do {
x=rand()%4; y=rand()%4;
} while(~map[x][y]);
map[x][y]=0;
}
void print()
{
system("cls");
puts("____________________");
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(~map[i][j]) printf("|%-4d",1<<map[i][j]);
else printf("| ");
}
puts("|");
if(i!=3) puts("");
}
puts("____________________");
}
void shift(char dir)
{
switch(dir)
{
case 's':
{
for(int j=0;j<4;j++)
{
for(int i=0;i<3;i++)
{
if(map[i+1][j]==-1)
{
swap(map[i][j],map[i+1][j]);
}
}
}
int flag=1;
while(flag)
{
flag=0;
for(int j=0;j<4;j++)
{
for(int i=2;i>=0;i--)
{
if(~map[i][j]&&map[i][j]==map[i+1][j])
{
flag=1;
map[i][j]=-1;
map[i+1][j]++;
}
}
}
}
for(int j=0;j<4;j++)
{
for(int i=0;i<3;i++)
{
if(map[i+1][j]==-1)
{
swap(map[i][j],map[i+1][j]);
}
}
}
break;
}
case 'w':
{
for(int j=0;j<4;j++)
{
for(int i=3;i>0;i--)
{
if(map[i-1][j]==-1)
{
swap(map[i][j],map[i-1][j]);
}
}
}
int flag=1;
while(flag)
{
flag=0;
for(int j=0;j<4;j++)
{
for(int i=1;i<=3;i++)
{
if(~map[i][j]&&map[i][j]==map[i-1][j])
{
flag=1;
map[i][j]=-1;
map[i-1][j]++;
}
}
}
}
for(int j=0;j<4;j++)
{
for(int i=3;i>0;i--)
{
if(map[i-1][j]==-1)
{
swap(map[i][j],map[i-1][j]);
}
}
}
break;
}
case 'd':
{
for(int i=0;i<4;i++)
{
for(int j=0;j<3;j++)
{
if(map[i][j+1]==-1)
{
swap(map[i][j],map[i][j+1]);
}
}
}
int flag=1;
while(flag)
{
flag=0;
for(int i=0;i<4;i++)
{
for(int j=2;j>=0;j--)
{
if(~map[i][j]&&map[i][j]==map[i][j+1])
{
flag=1;
map[i][j]=-1;
map[i][j+1]++;
}
}
}
}
for(int i=0;i<4;i++)
{
for(int j=0;j<3;j++)
{
if(map[i][j+1]==-1)
{
swap(map[i][j],map[i][j+1]);
}
}
}
break;
}
case 'a':
{
for(int i=0;i<4;i++)
{
for(int j=3;j>0;j--)
{
if(map[i][j-1]==-1)
{
swap(map[i][j],map[i][j-1]);
}
}
}
int flag=1;
while(flag)
{
flag=0;
for(int i=0;i<4;i++)
{
for(int j=1;j<=3;j++)
{
if(~map[i][j]&&map[i][j]==map[i][j-1])
{
flag=1;
map[i][j]=-1;
map[i][j-1]++;
}
}
}
}
for(int i=0;i<4;i++)
{
for(int j=3;j>0;j--)
{
if(map[i][j-1]==-1)
{
swap(map[i][j],map[i][j-1]);
}
}
}
break;
}
}
}
void go()
{
init();
while(check())
{
grow();
print();
shift(in=getch());
}
}
}
using namespace __2048;
int main()
{
go();
puts("GAME OVER");
}
假的2048
最新推荐文章于 2021-03-17 11:10:22 发布