2021.7.4
闲的蛋疼的暑假生活开始了,因为是毕业,所以没有作业,在家突发奇想的就rua出了这篇又长又臭的码来,
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<iostream>
#include<windows.h>
#define random(x) (rand()%x)
using namespace std;
int a[5][5];
long long ans=0;
void SetColorAndBackground(int ForgC, int BackC)
{
WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), wColor);
}
int fun(int x)
{
int y=0;
if(x==0)
return 0;
while(x!=1)
{
y++;
x/=2;
}
return y;
}
int print()
{
cout<<ans<<endl;
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
SetColorAndBackground(15,fun(a[i][j]));
printf("%3d",a[i][j]);
}
SetColorAndBackground(15,0);
cout<<endl;
}
}
bool check()
{
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
{
if(a[i][j]==0||a[i][j]==a[i-1][j]||a[i][j]==a[i+1][j]||a[i][j]==a[i][j-1]||a[i][j]==a[i][j+1])
return true;
}
return false;
}
int Left()
{
int b[5],k;
for(int i=1;i<=4;i++)
{
k=0;
for(int j=0;j<=4;j++)
b[j]=0;
for(int j=1;j<=4;j++)
if(a[i][j]!=0)
b[++k]=a[i][j];
for(int j=2;j<=k;j++)
{
if(b[j-1]==b[j])
{
b[j-1]+=b[j];
ans+=b[j-1];
for(int w=j+1;w<=k;w++)
b[w-1]=b[w];
b[k]=0;
k--;
}
}
for(int j=0;j<=4;j++)
a[i][j]=0;
for(int j=1;j<=4;j++)
a[i][j]=b[j];
}
}
int Right()
{
int b[5],k;
for(int i=1;i<=4;i++)
{
k=0;
for(int j=0;j<=4;j++)
b[j]=0;
for(int j=1;j<=4;j++)
if(a[i][j]!=0)
b[++k]=a[i][j];
for(int j=2;j<=k;j++)
{
if(b[j-1]==b[j])
{
b[j-1]+=b[j];
ans+=b[j-1];
for(int w=j+1;w<=k;w++)
b[w-1]=b[w];
b[k]=0;
k--;
}
}
for(int j=1;j<=4;j++)
a[i][j]=0;
for(int j=4,w=k;w>=1;j--,w--)
a[i][j]=b[w];
}
}
int Up()
{
int b[5],k,i;
for(int j=1;j<=4;j++)
{
k=0;
for(i=0;i<=4;i++)
b[i]=0;
for(i=1;i<=4;i++)
if(a[i][j]!=0)
b[++k]=a[i][j];
for(i=2;i<=k;i++)
{
if(b[i-1]==b[i])
{
b[i-1]+=b[i];
ans+=b[i-1];
for(int w=i+1;w<=k;w++)
b[w-1]=b[w];
b[k]=0;
k--;
}
}
for(i=1;i<=4;i++)
a[i][j]=b[i];
}
}
int Down()
{
int b[5],k,i,w;
for(int j=1;j<=4;j++)
{
k=0;
for(i=0;i<=4;i++)
b[i]=0;
for(i=1;i<=4;i++)
if(a[i][j]!=0)
b[++k]=a[i][j];
for(i=2;i<=k;i++)
{
if(b[i-1]==b[i])
{
b[i-1]+=b[i];
ans+=b[i-1];
for(w=i+1;w<=k;w++)
b[w-1]=b[w];
b[k]=0;
k--;
}
}
for(i=1;i<=4;i++)
a[i][j]=0;
for(i=4,w=k;i>=1,w>=1;i--,w--)
a[i][j]=b[w];
}
}
int f()
{
int w=0;
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
if(a[i][j]!=0)
w++;
return w;
}
int main()
{
srand( (unsigned)time( NULL ) );
int i,j,m,n,x,y,z,p;
for(i=1;i<=4;i++)
a[0][i]=-1,a[i][0]=-1;
while(check()==true)
{
p=0;
if(f()!=16)
{
do
{
x=random(5),y=random(5);
while(x==0)
x=random(4);
while(y==0)
y=random(4);
}
while(a[x][y]!=0);
do
{
z=random(101);
}
while(z==0);
if(z<=70)
a[x][y]=2;
else
a[x][y]=4;
system("cls");
print();
p=0;
if(check()==false)
break;
}
while(1)
{
//*********************************************
if( ::GetAsyncKeyState(VK_LEFT) & 0x8000 )
{
Left();
while(1)
{
if(::GetAsyncKeyState(VK_LEFT) & 0x8000);
else
{
p=1;
break;
}
}
}
if( ::GetAsyncKeyState(VK_RIGHT)& 0x8000 )
{
Right();
while(1)
{
if(::GetAsyncKeyState(VK_RIGHT) & 0x8000);
else
{
p=1;
break;
}
}
}
if( ::GetAsyncKeyState(VK_UP) & 0x8000 )
{
Up();
while(1)
{
if(::GetAsyncKeyState(VK_UP) & 0x8000);
else
{
p=1;
break;
}
}
}
if( ::GetAsyncKeyState(VK_DOWN) & 0x8000 )
{
Down();
while(1)
{
if(::GetAsyncKeyState(VK_DOWN) & 0x8000);
else
{
p=1;
break;
}
}
}
if(p==1)
break;
//*********************************************
}
}
}
有bug私信我,我改
|