//全文复制,可直接使用,具体的解析看注释,函数都是使用的比较通俗易懂的写法,不可直接抄袭
#include<stdio.h>
#include<conio.h>//控制台输入输出函数头文件//getch
#include<stdlib.h>//提供rand函数,清屏函数
#include<time.h>//随机数种子
#include<windows.h>//用于附颜色
void printmap();//输出整个二维数组和分数信息
void printline(int i);//输出某一行
void putnewnum();//在空白单元格内随机放置2或4
int getemptynum();//获取空白单元格数量
void copydata();//数据复制
int comparedata();//判断数据前后是否一致
int getmax();//获取当前二维数组中最大的数字
int gameover();//判断游戏是否结束
void moveup();//上移
void movedown();//下移
void moveleft();//左移
void moveright();//右移
int color(int num);//num为每一种颜色所代表的数字,范围是0~15
int setcolor(int n);//给不同数字附不同颜色
//全局变量
int data[4][4];
int old_data[4][4];
int count=0;//次数
int sum=0;//分数
//显示部分
void printmap()//输出整个二维数组和分数信息
{
printf("┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┓\n");
printline(0);
printf("┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┫\n");
printline(1);
printf("┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┫\n");
printline(2);
printf("┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┫\n");
printline(3);
printf("┗━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━┛\n");
printf("最大值:%d\n",getmax());
printf("游戏分数:%d\n",sum);
printf("操作次数:%d\n",count);
printf("剩余空间:%d\n",getemptynum());
printf("退出游戏:q\n");
if(gameover()==1)printf("很遗憾游戏结束!按q键退出");
if(getmax()>=2048)printf("恭喜你通关了!\n");
}
void printline(int i)//行
{
int j;//列
for(j=0;j<4;j++){
printf("┃");
if(data[i][j]==0)printf(" ");
else {
setcolor(data[i][j]);
printf(" %4d ",data[i][j]);
color(7);//制表变回白色