游戏界面
#include<iostream>
#include<iomanip>
#include<cstdlib>
#include<ctime>
#include<conio.h>
#include<Windows.h>
using namespace std;
int getlim(int a)
{
int sum=0;
for(int i=1;;i++)
{
if(a!=0)
sum+=1;
else
break;
a=a/10;
}
return sum;
}
int getlim(int a[])
{
for(int i=0;;i++)
if(a[i]==-1)
return i-1;
}
先写出重载的函数,用于计算数的位数和一维数组中有效的数字个数。
再写出函数给出游戏界面,给入参数是4×4数组,然后显示出游戏的界面。
void showx(int b[4][4])
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
cout<<b[i][j];
cout<<endl;
}
}
void show_2()
{
cout<<"■";
for(int i=1;i<=4;i++)
cout<<setw(8)<<"■";
cout<<endl;
}
void show_1()
{
for(int i=1;i<=17;i++)
cout<<"■";
cout<<endl;
}
void show_4(int a)
{
int n;
n=getlim(a);
switch(n)
{
case 1:cout<<"■"<<setw(3)<<a<<setw(3)<<' ';break;
case 2:cout<<"■"<<setw(4)<<a<<setw(2)<<' ';break;
case 3:cout<<"■"<<setw(4)<<a<<setw(2)<<' ';break;
case 4:cout<<"■"<<setw(5)<<a<<' ';break;
case 0:cout<<"■"<<setw(6)<<' ';
}
}
void show_3(int a[])
{
show_4(a[0]);show_4(a[1]);show_4(a[2]);show_4(a[3]);
cout<<"■"<<endl;
}
void show(int a[4][4])
{
for(int i=0;i<4;i++)
{
int b[4];
for(int j=0;j<4;j++) b[j]=a[i][j];
show_1();show_2();show_3(b);show_2();
}
show_1();
}
输出界面如图。
查找需要合并的数
写出查找哪些数要合并,将位置存储到4×4数组中。由于有上下左右四种方式,所以我们要写出一个左的情况,再通过矩阵的转置等变换,将上下右三种操作全部转化为左的操作。
void left_right(int a[4][4])
{
int b[4][4];
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
b[i][j]=a[i][j];
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
a[i][3-j]=b[i][j];
}
void left_up(int a[4][4])
{
int b[4][4];
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
b[i][j]=a[i][j];
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
a[i][j]=b[j][i];
}
int check_1(int a[4],int b[4])
{
int flag=0;
for(int i=0;i<4;i++) b[i]=0;
if(a[0]!=0)
{
if(a[0]==a[1]&&a[2]==a[3]&&a[2]!=0)
{
b[0]=1;b[2]=1;flag=1;}
else if(a[0]==a[1])
{
b[0]=1;flag=1;}
else if(a[1]==0&&a[0]==a[2])
{
b[0]=1;flag=1;}
else if(a[1]==0&&a[2]==0&&a[0]==a[3])
{
b[0]=1;flag=1;}
else if(a[1]==a[2]&&a[1]!=0)
{
b[1]=1;flag=1;}
else if(a[1]==a[3]&&a[1]!=0&&a[2]==0)
{
b[1]=1;flag=1;}
else if(a[2]==a[3]&&a[2]!=0)
{
b[2]=1;flag=1;}
}
else
{
if(a[1]!=0)
{
if(a[1]==a[2])
{
b[1]=1;flag=1;}
else if(a[1]==a[3]&&a[2]==0)
{
b[1]=1;flag=1;}
else if(a[2]==a[3]&&a[2]!=0)
{
b[2]=1;flag=1;}
}
else
{
if(a