(2048)等级游戏

#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();
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值