#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
int d_t[4][4]={
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
}/*地图*/,d_t_a[4][4]={
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
}/*地图*/,z_g,s_j_x/*随机数是否生成判断*/,s_j_s/*随机数*/,s_y_k_w=16/*剩余空位*/,z_d_x/*最大往哪个方向移动的位置x*/,z_d_y/*最大往哪个方向移动的位置y*/;
bool s_c_c_g=false/*生成随机数是否完成*/;
char n;
using namespace std;
void s_j_s_s_c()//生成随机数
{
for(;s_c_c_g==false;)
{
for(int i=0;i<4;i++)
{
for(int y=0;y<4;y++)
{
if(d_t[i][y]==0)
{
s_j_x=rand()%s_y_k_w+1;
if(s_j_x==1)
{
s_j_s=rand()%2+1;
if(s_j_s==2)d_t[i][y]=4;
else d_t[i][y]=2;
s_y_k_w--;
s_c_c_g=true;
break;
}
}
}
if(s_c_c_g==true)break;
}
}
s_c_c_g=false;
}
void y_s(int x)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
}
void h_z()//绘制界面
{
for(int i=0;i<4;i++)
{
for(int y=0;y<4;y++)
{
if(d_t[i][y]==0)
{
y_s(1);
cout<<"00";
}else if(d_t[i][y]==2)
{
y_s(2);
cout<<"01";
}else if(d_t[i][y]==4)
{
y_s(3);
cout<<"02";
}else if(d_t[i][y]==8)
{
y_s(4);
cout<<"03";
}else if(d_t[i][y]==16)
{
y_s(5);
cout<<"04";
}else if(d_t[i][y]==32)
{
y_s(6);
cout<<"05";
}else if(d_t[i][y]==64)
{
y_s(7);
cout<<"06";
}else if(d_t[i][y]==128)
{
y_s(8);
cout<<"07";
}else if(d_t[i][y]==256)
{
y_s(9);
cout<<"08";
}else if(d_t[i][y]==512)
{
y_s(10);
cout<<"09";
}else if(d_t[i][y]==1024)
{
y_s(11);
cout<<"10";
}else if(d_t[i][y]==2048)
{
y_s(12);
cout<<"11";
}else if(d_t[i][y]==4096)
{
y_s(13);
cout<<"12";
}else if(d_t[i][y]==8192)
{
y_s(14);
cout<<"13";
}else if(d_t[i][y]==16384)
{
y_s(15);
cout<<"14";
}
}
printf("\n");
}
y_s(7);
cout<<"当前最高分:";
if(z_g==0)
{
cout<<"00";
}else if(z_g==2)
{
cout<<"01";
}else if(z_g==4)
{
cout<<"02";
}else if(z_g==8)
{
cout<<"03";
}else if(z_g==16)
{
cout<<"04";
}else if(z_g==32)
{
cout<<"05";
}else if(z_g==64)
{
cout<<"06";
}else if(z_g==128)
{
cout<<"07";
}else if(z_g==256)
{
cout<<"08";
}else if(z_g==512)
{
cout<<"09";
}else if(z_g==1024)
{
cout<<"10";
}else if(z_g==2048)
{
cout<<"11";
}else if(z_g==4096)
{
cout<<"12";
}else if(z_g==8192)
{
cout<<"13";
}else if(z_g==16384)
{
cout<<"14";
}
}
void game()//游戏开始
{
s_j_s_s_c();
s_j_s_s_c();
for(;;)
{
for(int i=0;i<4;i++)
for(int y=0;y<4;y++)
if(d_t[i][y]>=z_g)
z_g=d_t[i][y];
if(s_y_k_w>0&&(n==72||n==75||n==80||n==77))s_j_s_s_c();
system("cls");
h_z();
n=getch();
if(n==72)
{
for(int i=0;i<4;i++)
{
for(int y=0;y<4;y++)
{
if(d_t[i][y]!=0)
{
if(i==3)
{
if(d_t[i-1][y]==0)
{
if(d_t[i-3][y]==d_t[i][y]&&d_t[i-2][y]==0&&d_t[i-1][y]==0)
{
d_t[i-3][y]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
else if(d_t[i-2][y]==d_t[i][y]&&d_t[i-1][y]==0)
{
d_t[i-2][y]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
else if(d_t[i-3][y]==0&&d_t[i-2][y]==0&&d_t[i-1][y]==0)swap(d_t[i][y],d_t[i-3][y]);
else if(d_t[i-2][y]==0&&d_t[i-1][y]==0)swap(d_t[i][y],d_t[i-2][y]);
else swap(d_t[i][y],d_t[i-1][y]);
}else if(d_t[i-1][y]==d_t[i][y])
{
d_t[i-1][y]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
}else if(i==2)
{
if(d_t[i-1][y]==0)
{
if(d_t[i-2][y]==d_t[i][y]&&d_t[i-1][y]==0)
{
d_t[i-2][y]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
else if(d_t[i-2][y]==0&&d_t[i-1][y]==0)swap(d_t[i][y],d_t[i-2][y]);
else swap(d_t[i][y],d_t[i-1][y]);
}else if(d_t[i-1][y]==d_t[i][y])
{
d_t[i-1][y]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
}else if(i==1)
{
if(d_t[i-1][y]==0)
{
swap(d_t[i][y],d_t[i-1][y]);
}else if(d_t[i-1][y]==d_t[i][y])
{
d_t[i-1][y]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
}
}
}
}
}else if(n==75)
{
for(int i=0;i<4;i++)
{
for(int y=0;y<=3;y++)
{
if(d_t[i][y]!=0)
{
if(y==3)
{
if(d_t[i][y-1]==0)
{
if(d_t[i][y-3]==d_t[i][y]&&d_t[i][y-2]==0&&d_t[i][y-1]==0)
{
d_t[i][y-3]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
else if(d_t[i][y-2]==d_t[i][y]&&d_t[i][y-1]==0)
{
d_t[i][y-2]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
else if(d_t[i][y-3]==0&&d_t[i][y-2]==0&&d_t[i][y-1]==0)swap(d_t[i][y],d_t[i][y-3]);
else if(d_t[i][y-2]==0&&d_t[i][y-1]==0)swap(d_t[i][y],d_t[i][y-2]);
else swap(d_t[i][y],d_t[i][y-1]);
}else if(d_t[i][y-1]==d_t[i][y])
{
d_t[i][y-1]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
}else if(y==2)
{
if(d_t[i][y-1]==0)
{
if(d_t[i][y-2]==d_t[i][y]&&d_t[i][y-1]==0)
{
d_t[i][y-2]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
else if(d_t[i][y-2]==0&&d_t[i][y-1]==0)swap(d_t[i][y],d_t[i][y-2]);
else swap(d_t[i][y],d_t[i][y-1]);
}else if(d_t[i][y-1]==d_t[i][y])
{
d_t[i][y-1]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
}else if(y==1)
{
if(d_t[i][y-1]==0)
{
swap(d_t[i][y],d_t[i][y-1]);
}else if(d_t[i][y-1]==d_t[i][y])
{
d_t[i][y-1]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
}
}
}
}
}else if(n==80)
{
for(int i=3;i>=0;i--)
{
for(int y=0;y<4;y++)
{
if(d_t[i][y]!=0)
{
if(i==0)
{
if(d_t[i+1][y]==0)
{
if(d_t[i+3][y]==d_t[i][y]&&d_t[i+2][y]==0&&d_t[i+1][y]==0)
{
d_t[i+3][y]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
else if(d_t[i+2][y]==d_t[i][y]&&d_t[i+1][y]==0)
{
d_t[i+2][y]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
else if(d_t[i+3][y]==0&&d_t[i+2][y]==0&&d_t[i+1][y]==0)swap(d_t[i][y],d_t[i+3][y]);
else if(d_t[i+2][y]==0&&d_t[i+1][y]==0)swap(d_t[i][y],d_t[i+2][y]);
else swap(d_t[i][y],d_t[i+1][y]);
}else if(d_t[i+1][y]==d_t[i][y])
{
d_t[i+1][y]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
}else if(i==1)
{
if(d_t[i+1][y]==0)
{
if(d_t[i+2][y]==d_t[i][y]&&d_t[i+1][y]==0)
{
d_t[i+2][y]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
else if(d_t[i+2][y]==0&&d_t[i+1][y]==0)swap(d_t[i][y],d_t[i+2][y]);
else swap(d_t[i][y],d_t[i+1][y]);
}else if(d_t[i+1][y]==d_t[i][y])
{
d_t[i+1][y]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
}else if(i==2)
{
if(d_t[i+1][y]==0)
{
swap(d_t[i][y],d_t[i+1][y]);
}else if(d_t[i+1][y]==d_t[i][y])
{
d_t[i+1][y]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
}
}
}
}
}else if(n==77)
{
for(int i=0;i<4;i++)
{
for(int y=3;y>=0;y--)
{
if(d_t[i][y]!=0)
{
if(y==0)
{
if(d_t[i][y+1]==0)
{
if(d_t[i][y+3]==d_t[i][y]&&d_t[i][y+2]==0&&d_t[i][y+1]==0)
{
d_t[i][y+3]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
else if(d_t[i][y+2]==d_t[i][y]&&d_t[i][y+1]==0)
{
d_t[i][y+2]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
else if(d_t[i][y+3]==0&&d_t[i][y+2]==0&&d_t[i][y+1]==0)swap(d_t[i][y],d_t[i][3]);
else if(d_t[i][y+2]==0&&d_t[i][y+1]==0)swap(d_t[i][y],d_t[i][2]);
else swap(d_t[i][y],d_t[i][1]);
}else if(d_t[i][y+1]==d_t[i][y])
{
d_t[i][y+1]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
}else if(y==1)
{
if(d_t[i][y+1]==0)
{
if(d_t[i][y+2]==d_t[i][y]&&d_t[i][y+1]==0)
{
d_t[i][y+2]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
else if(d_t[i][y+2]==0&&d_t[i][y+1]==0)swap(d_t[i][y],d_t[i][3]);
else swap(d_t[i][y],d_t[i][2]);
}else if(d_t[i][y+1]==d_t[i][y])
{
d_t[i][y+1]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
}else if(y==2)
{
if(d_t[i][y+1]==0)
{
swap(d_t[i][y],d_t[i][y+1]);
}else if(d_t[i][y+1]==d_t[i][y])
{
d_t[i][y+1]*=2;
s_y_k_w++;
d_t[i][y]=0;
}
}
}
}
}
}
}
}
int main()
{
game();
}
(2048)等级游戏
于 2024-02-14 11:37:52 首次发布