2048小游戏
Hukaidi8566 · · 个人记录
在队长的帮助下,写了一个2048小游戏(附破解版)
按 w a s d 操作:
#include<cstdio>
#include<time.h>
#include<conio.h>
#include<algorithm>
using namespace std;
const int nn=4;
const int n_n=nn*nn;
unsigned int seed;
int a[nn][nn];
int ax;
int b[nn][nn];
int m;
void work();
void print();
void Putnum();
int Doplay();
void solve1(int);
void solve2(int);
int givnum();
bool checkok();
int main()
{
seed=(unsigned)time(NULL);
srand(seed);
b[0][0]=1;
Putnum();
Putnum();
while(1) work();
return 0;
}
void work()
{
print();
int d=Doplay();
solve1(d);
solve2(d);
solve1(d);
if(ax>=n_n) exit(0);
system("cls");
Putnum();
return;
}
void print()
{
printf("Mark %d\n\n",m);
for(int i=0;i<nn;i++)
{
for(int j=0;j<nn;j++)
{
b[i][j]=a[i][j];
if(a[i][j]) printf("%4d ",a[i][j]);else printf(" . ");
//printf("%4d ",a[i][j]);
}
printf("\n\n");
}
return;
}
void Putnum()
{
if(!checkok()) return;
int x,y,v;
//scanf("%d%d%d",&x,&y,&v);
x=rand()%nn,y=rand()%nn,v=rand()%2;v<<=1;v+=2;//
while(a[x][y]!=0){x=rand()%nn,y=rand()%nn,v=rand()%2;v<<=1;v+=2;}//
printf("Add %d %d %d\n",x,y,v);//
a[x][y]=v;
ax++;
return;
}
int Doplay()
{
int d;
//d=findpl();
d=givnum();
return d;
}
void solve1(int d)
{
for(int qwe=0;qwe<nn;qwe++)
{
for(int i=0;i<nn;i++)
{
for(int j=0;j<nn;j++)
{
if(d==1)
{
if(i!=0&&a[i-1][j]==0)
{
a[i-1][j]=a[i][j];
a[i][j]=0;
}
}
else if(d==2)
{
if(i+1<nn&&a[i+1][j]==0)
{
a[i+1][j]=a[i][j];
a[i][j]=0;
}
}
else if(d==3)
{
if(j!=0&&a[i][j-1]==0)
{
a[i][j-1]=a[i][j];
a[i][j]=0;
}
}
else if(d==4)
{
if(j+1<nn&&a[i][j+1]==0)
{
a[i][j+1]=a[i][j];
a[i][j]=0;
}
}
}
}
}
return;
}
void solve2(int d)
{
if(d==1)
{
for(int i=0;i+1<nn;i++)
{
for(int j=0;j<nn;j++)
{
if(a[i][j]==a[i+1][j]&&a[i][j]!=0)
{
a[i][j]<<=1,a[i+1][j]=0,ax--;
m+=a[i][j];
}
}
}
}
else if(d==2)
{
for(int i=nn-1;i>0;i--)
{
for(int j=0;j<nn;j++)
{
if(a[i][j]==a[i-1][j]&&a[i][j]!=0)
{
a[i][j]<<=1,a[i-1][j]=0,ax--;
m+=a[i][j];
}
}
}
}
else if(d==3)
{
for(int i=0;i<nn;i++)
{
for(int j=0;j+1<nn;j++)
{
if(a[i][j]==a[i][j+1]&&a[i][j]!=0)
{
a[i][j]<<=1,a[i][j+1]=0,ax--;
m+=a[i][j];
}
}
}
}
else if(d==4)
{
for(int i=0;i<nn;i++)
{
for(int j=nn-1;j>0;j--)
{
if(a[i][j]==a[i][j-1]&&a[i][j]!=0)
{
a[i][j]<<=1,a[i][j-1]=0,ax--;
m+=a[i][j];
}
}
}
}
return;
}
int givnum()
{
char c=_getch();
if(c=='w') return 1;
if(c=='a') return 3;
if(c=='s') return 2;
if(c=='d') return 4;
}
bool checkok()
{
for(int i=0;i<nn;i++)
{
for(int j=0;j<nn;j++)
{
if(b[i][j]!=a[i][j]) return 1;
}
}
return 0;
}
破解版:(已公开)