2048小游戏

废话不多,直接上源码

#include<time.h> 
#include<stdlib.h> 
#include<conio.h> 
#include<stdio.h>  
#include<windows.h> 
#define x0 26 
#define y0 1 
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
/*显示声明*/
void p(int*a, int i, int x, int y);
/*部分刷新声明*/
void shua(void);
/*胜利画面测试函数声明*/
int test(void);
/*字体空格声明*/
void kg(int*a);
/*画长条函数的声明*/
void ct(int x, int y, int l, int k, int c);
/*标题字幕2048*/
void p2048(int x, int y);
/*单个颜色返回值声明*/
int col(int*a);
/*移动光标*/
void gotoxy(int x, int y)
{
	COORD coordScreen = { 0,0 };
	coordScreen.X = x;
	coordScreen.Y = y;
	SetConsoleCursorPosition(hOutput, coordScreen);
}
/*字体颜色*/
void textcolor(int color)
{
	SetConsoleTextAttribute(hOutput, color);
}
/*显示函数*/
void prin(int*a, int*score, int*scoremax)
{
	int i;
	for (i = 0; i < 16; i++)
	{
		p(a, i, x0, y0);
	}
	printf("\n\n             score=%d  MAXscore=%d         \n", *score, *scoremax);
}
/* 产生随机数 */
int shu(void)
{
	int s = 0;
	s = 1 + (int)(12.0 * rand() / (RAND_MAX + 1.0));
	if (s == 12)
		return 4;
	else
		return 2;
}


/* 决定位置 */
int rands(void)
{
	return (int)(16.0 * rand() / (RAND_MAX + 1.0));
}
/* 主函数*/
int main(void)
{
	int flag = 0, c = 0, pd = 1, n = 0, i = 0, m = 0, j =
		0, sj, sj1, sj2, a[16] = { 0 }, b[16] = { 0 }, x = 0, score = 0, t = 0, jx = 0, scoremax = 0, ks = 1, yx = 0;
	char sr, an;
	//开始画面 
	p2048(17, 1);
	textcolor(255);
	gotoxy(35, 15);
	for (;;)
	{
		an = getch();
		switch (an)
		{
		case 72:
			if (ks == 1)
				ks = 0;
			else
				ks = 1;
			break;
		case 80:
			if (ks == 1)
				ks = 0;
			else
				ks = 1;
			break;
		case '\r':
			yx = 1;
			break;
		default:
			break;
		}
		if (ks == 1)
			gotoxy(35, 15);
		else
			gotoxy(34, 18);
		if (ks == 1 && yx == 1)
			break;
		else if (ks == 0 && yx == 1)
		{
			textcolor(240);
			gotoxy(0, 0);
			for (i = 0; i <= 500; i++)
			{
				printf("   ");
			}
			gotoxy(0, 0);
			ct(12, 5, 58, 10, 223);
			gotoxy(13, 6);
			printf("           2048游戏说明");
			gotoxy(13, 8);
			printf(" 通过按数字键移动数字,合并相同的数字来的取得更大的数。");
			gotoxy(13, 9);
			printf(" 得到2048时游戏即胜利,当然您也可以选择继续挑战。");
			gotoxy(13, 11);
			printf(" 按键操作:");
			gotoxy(13, 13);
			printf(" 上:↑ 下:↓ 左:← 右:→ 重新开始:r  退出游戏:e");
			textcolor(240);
			printf("\n\n\n\n\n                              I know ");
			getch();
			p2048(17, 1);
			textcolor(255);
			gotoxy(34, 18);
		}
		yx = 0;
	}
	//隐藏光标 
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	CONSOLE_CURSOR_INFO cci;
	GetConsoleCursorInfo(hOut, &cci);
	cci.bVisible = FALSE;
	SetConsoleCursorInfo(hOut, &cci);
	//刷新画面 
	textcolor(240);
	gotoxy(0, 0);
	for (i = 0; i <= 500; i++)
	{
		printf("   ");
	}
	gotoxy(0, 0);
	/*设置时间种子*/
	srand((int)time(0));
	/* 设置初始值 */
	sj = rands();
	sj1 = rands();
	sj2 = rands();
	for (;;)
	{
		if (sj == sj1 || sj == sj2 || sj1 == sj2)
		{
			sj1 = rands();
			sj2 = rands();
		}
		else
			break;
	}
	a[sj] = shu();
	a[sj1] = shu();
	a[sj2] = shu();
	/*显示*/
	prin(a, &score, &scoremax);
	for (;;)
	{
		/* 无回显输入 */
		sr = getch();
		/* scanf("%d",&n); *//* 记录之前的位置,将用以比较移动是否有效 */
		for (j = 0; j < 16; j++)
			b[j] = a[j];
		switch (sr)
		{
			/* 向上移动 */
		case 72:
			/* 全部移到上边 */
			for (j = 0; j < 4; j++)
			{
				for (c = 0; c < 3; c++)
				{
					if (a[j] == 0)
					{
						a[j] = a[j + 4];
						a[j + 4] = 0;
					}
					if (a[j + 4] == 0)
					{
						a[j + 4] = a[j + 8];
						a[j + 8] = 0;
					}
					if (a[j + 8] == 0)
					{
						a[j + 8] = a[j + 12];
						a[j + 12] = 0;
					}
				}
				/* 移到上面后的合并操作 */
				if (a[j] == a[j + 4])
				{
					a[j] = a[j] * 2;
					score = score + a[j];
					a[j + 4] = a[j + 8];
					a[j + 8] = a[j + 12];
					a[j + 12] = 0;
					if (a[j + 4] == a[j + 8])
					{
						a[j + 4] = 2 * a[j + 4];
						score = score + a[j + 4];
						a[j + 8] = 0;
					}
				}
				else if (a[j + 4] == a[j + 8])
				{
					a[j + 4] = 2 * a[j + 4];
					score = score + a[j + 4];
					a[j + 8] = a[j + 12];
					a[j + 12] = 0;
				}
				else if (a[j + 8] == a[j + 12])
				{
					a[j + 8] = 2 * a[j + 8];
					score = score + a[j + 8];
					a[j + 12] = 0;
				}
				else;
			}
			break;
			/* 向下移动 */
		case 80:
			/* 全部移动到下面 */
			for (j = 12; j < 16; j++)
			{
				for (c = 0; c < 3; c++)
				{
					if (a[j] == 0)
					{
						a[j] = a[j - 4];
						a[j - 4] = 0;
					}
					if (a[j - 4] == 0)
					{
						a[j - 4] = a[j - 8];
						a[j - 8] = 0;
					}
					if (a[j - 8] == 0)
					{
						a[j - 8] = a[j - 12];
						a[j - 12] = 0;
					}
				}
				/* 移到下面后的合并操作 */
				if (a[j] == a[j - 4])
				{
					a[j] = a[j] * 2;
					score = score + a[j];
					a[j - 4] = a[j - 8];
					a[j - 8] = a[j - 12];
					a[j - 12] = 0;
					if (a[j - 4] == a[j - 8])
					{
						a[j - 4] = 2 * a[j - 4];
						score = score + a[j - 4];
						a[j - 8] = 0;
					}
				}
				else if (a[j - 4] == a[j - 8])
				{
					a[j - 4] = 2 * a[j - 4];
					score = score + a[j - 4];
					a[j - 8] = a[j - 12];
					a[j - 12] = 0;
				}
				else if (a[j - 8] == a[j - 12])
				{
					a[j - 8] = 2 * a[j - 8];
					score = score + a[j - 8];
					a[j - 12] = 0;
				}
				else;
			}
			break;
			/* 向左移动 */
		case 75:
			/* 全部移动到左面 */
			for (j = 0; j <= 12; j = j + 4)
			{
				for (c = 0; c < 3; c++)
				{
					if (a[j] == 0)
					{
						a[j] = a[j + 1];
						a[j + 1] = 0;
					}
					if (a[j + 1] == 0)
					{
						a[j + 1] = a[j + 2];
						a[j + 2] = 0;
					}
					if (a[j + 2] == 0)
					{
						a[j + 2] = a[j + 3];
						a[j + 3] = 0;
					}
				}
				/* 移到左面后的合并操作 */
				if (a[j] == a[j + 1])
				{
					a[j] = a[j] * 2;
					score = score + a[j];
					a[j + 1] = a[j + 2];
					a[j + 2] = a[j + 3];
					a[j + 3] = 0;
					if (a[j + 1] == a[j + 2])
					{
						a[j + 1] = 2 * a[j + 1];
						score = score + a[j + 1];
						a[j + 2] = 0;
					}
				}
				else if (a[j + 1] == a[j + 2])
				{
					a[j + 1] = 2 * a[j + 1];
					score = score + a[j + 1];
					a[j + 2] = a[j + 3];
					a[j + 3] = 0;
				}
				else if (a[j + 2] == a[j + 3])
				{
					a[j + 2] = 2 * a[j + 2];
					score = score + a[j + 2];
					a[j + 3] = 0;
				}
				else;
			}
			break;
			/* 向右移动 */
		case 77:
			/* 全部移动到右面 */
			for (j = 3; j <= 16; j = j + 4)
			{
				for (c = 0; c < 3; c++)
				{
					if (a[j] == 0)
					{
						a[j] = a[j - 1];
						a[j - 1] = 0;
					}
					if (a[j - 1] == 0)
					{
						a[j - 1] = a[j - 2];
						a[j - 2] = 0;
					}
					if (a[j - 2] == 0)
					{
						a[j - 2] = a[j - 3];
						a[j - 3] = 0;
					}
				}
				/* 移到右面后的合并操作 */
				if (a[j] == a[j - 1])
				{
					a[j] = a[j] * 2;
					score = score + a[j];
					a[j - 1] = a[j - 2];
					a[j - 2] = a[j - 3];
					a[j - 3] = 0;
					if (a[j - 1] == a[j - 2])
					{
						a[j - 1] = 2 * a[j - 1];
						score = score + a[j - 1];
						a[j - 2] = 0;
					}
				}
				else if (a[j - 1] == a[j - 2])
				{
					a[j - 1] = 2 * a[j - 1];
					score = score + a[j - 1];
					a[j - 2] = a[j - 3];
					a[j - 3] = 0;
				}
				else if (a[j - 2] == a[j - 3])
				{
					a[j - 2] = 2 * a[j - 2];
					score = score + a[j - 2];
					a[j - 3] = 0;
				}
				else;
			}
			break;
			/* 重新开始 */
		case 'r':
			for (j = 0; j < 16; j++)
				a[j] = 0;
			sj1 = rands();
			sj2 = rands();
			for (;;)
			{
				if (sj1 == sj2)
				{
					sj1 = rands();
					sj2 = rands();
				}
				else
					break;
			}
			a[sj1] = shu();
			a[sj2] = shu();
			flag = 0;
			score = 0;
			jx = 0;
			break;
			/* 退出 */
		case 'e':
			shua();
			ct(32, 19, 15, 3, 207);
			printf(" 游戏已退出!");
			textcolor(255);
			gotoxy(0, 0);
			getch();
			return 0;
			break;
			/* 其他情况(刷新) */
		default:
			;
			break;
		}
		/*windows下的系统清屏函数*/
		//system ("cls"); 
		/* 判断最高分 */
		if (score > scoremax)
			scoremax = score;
		/* 判断是否胜利(是否含有2048) */
		for (j = 0; j < 16; j++)
		{
			if (a[j] == 2048 && jx == 0)
			{
				/* 胜利时输出游戏结果 */
				/*显示*/
				prin(a, &score, &scoremax);
				shua();
				ct(20, 19, 15, 3, 207);
				printf(" 游戏胜利!");
				textcolor(159);
				gotoxy(38, 19);
				printf(" Continue        ");
				textcolor(239);
				gotoxy(49, 20);
				printf("  Restart  ");
				textcolor(175);
				gotoxy(49, 21);
				printf("  Exit   ");
				t = 2;
				an = 75;
				yx = 0;
				for (;;)
				{
					an = getch();
					switch (an)
					{
					case 72:
						if (t == 2)
						{
							t = 3;
							textcolor(240);
							gotoxy(36, 21);
							printf("              ");
							textcolor(175);
							gotoxy(38, 21);
							printf(" Exit          ");
							textcolor(240);
							gotoxy(36, 19);
							printf("              ");
							textcolor(159);
							gotoxy(47, 19);
							printf("   Continue ");
							textcolor(240);
							gotoxy(36, 20);
							printf("              ");
							textcolor(239);
							gotoxy(49, 20);
							printf("  Restart  ");
						}
						else if (t == 1)
						{
							t = 2;
							textcolor(240);
							gotoxy(36, 19);
							printf("              ");
							textcolor(159);
							gotoxy(38, 19);
							printf(" Continue        ");
							textcolor(240);
							gotoxy(36, 20);
							printf("              ");
							textcolor(239);
							gotoxy(47, 20);
							printf("   Restart  ");
							textcolor(240);
							gotoxy(36, 21);
							printf("              ");
							textcolor(175);
							gotoxy(49, 21);
							printf("  Exit   ");
						}
						else
						{
							t = 1;
							textcolor(240);
							gotoxy(36, 20);
							printf("              ");
							textcolor(239);
							gotoxy(38, 20);
							printf(" Restart         ");
							textcolor(240);
							gotoxy(36, 21);
							printf("              ");
							textcolor(175);
							gotoxy(47, 21);
							printf("   Exit   ");
							textcolor(240);
							gotoxy(36, 19);
							printf("              ");
							textcolor(159);
							gotoxy(49, 19);
							printf("  Continue ");
						}
						break;
					case 80:
						if (t == 2)
						{
							t = 1;
							textcolor(240);
							gotoxy(36, 20);
							printf("              ");
							textcolor(239);
							gotoxy(38, 20);
							printf(" Restart         ");
							textcolor(240);
							gotoxy(36, 19);
							printf("              ");
							textcolor(159);
							gotoxy(47, 19);
							printf("   Continue ");
							textcolor(240);
							gotoxy(36, 21);
							printf("              ");
							textcolor(175);
							gotoxy(49, 21);
							printf("  Exit   ");
						}
						else if (t == 1)
						{
							t = 3;
							textcolor(240);
							gotoxy(36, 21);
							printf("              ");
							textcolor(175);
							gotoxy(38, 21);
							printf(" Exit          ");
							textcolor(240);
							gotoxy(36, 20);
							printf("              ");
							textcolor(239);
							gotoxy(47, 20);
							printf("   Restart  ");
							textcolor(240);
							gotoxy(36, 19);
							printf("              ");
							textcolor(159);
							gotoxy(49, 19);
							printf("  Continue ");
						}
						else
						{
							t = 2;
							textcolor(240);
							gotoxy(36, 19);
							printf("              ");
							textcolor(159);
							gotoxy(38, 19);
							printf(" Continue        ");
							textcolor(240);
							gotoxy(36, 21);
							printf("              ");
							textcolor(175);
							gotoxy(47, 21);
							printf("   Exit   ");
							textcolor(240);
							gotoxy(36, 20);
							printf("              ");
							textcolor(239);
							gotoxy(49, 20);
							printf("  Restart  ");
						}
						break;
					case '\r':
						yx = 1;
						break;
					}
					if (yx == 1)
					{
						yx = 0;
						break;
					}
				}
				shua();
				textcolor(255);
				gotoxy(0, 0);
				/* 重新开始游戏 */
				if (t == 1)
				{
					shua();
					pd = 1;
					x = 0;
					for (j = 0; j < 16; j++)
						a[j] = 0;
					sj1 = rands();
					sj2 = rands();
					for (;;)
					{
						if (sj1 == sj2)
						{
							sj1 = rands();
							sj2 = rands();
						}
						else
							break;
					}
					a[sj1] = shu();
					a[sj2] = shu();
					for (j = 0; j < 16; j++)
						b[j] = a[j];
					flag = 0;
					score = 0;
					break;
				}
				/* 继续游戏 */
				else if (t == 2)
				{
					jx = 1;
					shua();
				}
				else
				{
					shua();
					ct(32, 19, 15, 3, 207);
					printf(" 游戏已退出!");
					textcolor(255);
					gotoxy(0, 0);
					getch();
					return 0;
				}
			}
		}
		/* 决定是否产生新的数及其位置以及游戏是否失败 */
		/* flag,pd,x赋初值 */
		flag = 0;
		pd = 1;
		x = 0;
		/* 判断移动后是否有空位:pd=0为有空位,pd=1为无空位 */
		for (j = 0; j < 16; j++)
		{
			if (a[j] == 0)
				pd = 0;
		}
		/* 移动是否有效:x=1有效,x=0无效 */
		for (j = 0; j < 16; j++)
		{
			if (a[j] != b[j])
			{
				x = 1;
				break;
			}
		}
		/* 移动有效时且有空位时产生新数 */
		if (pd == 0 && x == 1)
		{
			for (;;)
			{
				sj = rands();
				if (a[sj] == 0)
				{
					a[sj] = shu();
					break;
				}
				else;
			}
		}
		/* 游戏是否失败的判定 */
		/* 移动后无空位 */
		else if (pd != 0)
		{
			/* 判断是否还有可合并的项 */
			for (j = 0; j < 16; j++)
			{
				if (j != 3 && j != 7 && j != 11 && j != 15 && a[j] == a[j + 1])
				{
					flag = flag + 1;
				}
				if (j != 12 && j != 13 && j != 14 && j != 15
					&& a[j] == a[j + 4])
				{
					flag = flag + 1;
				}
				if (j != 0 && j != 4 && j != 8 && j != 12 && a[j] == a[j - 1])
				{
					flag = flag + 1;
				}
				if (j != 0 && j != 1 && j != 2 && j != 3 && a[j] == a[j - 4])
				{
					flag = flag + 1;
				}
			}
			/* 无空位且没有可合并的项时游戏失败 */
			if (flag == 0)
			{
				/* 失败时输出游戏结果 */
				/*显示*/
				prin(a, &score, &scoremax);
				shua();
				ct(20, 19, 15, 3, 271);
				printf(" 游戏结束!");
				textcolor(240);
				gotoxy(38, 19);
				printf("Whether continue the game ?");
				gotoxy(44, 21);
				printf("@Yes   No");
				gotoxy(44, 21);
				t = 1;
				an = 75;
				yx = 0;
				for (;;)
				{
					an = getch();
					switch (an)
					{
					case 75:
						if (t == 1)
						{
							t = 0;
							gotoxy(53, 21);
							printf("@");
							gotoxy(44, 21);
							printf(" ");
						}
						else
						{
							t = 1;
							gotoxy(44, 21);
							printf("@");
							gotoxy(53, 21);
							printf(" ");
						}
						break;
					case 77:
						if (t == 1)
						{
							t = 0;
							gotoxy(53, 21);
							printf("@");
							gotoxy(44, 21);
							printf(" ");


						}
						else
						{
							t = 1;
							gotoxy(44, 21);
							printf("@");
							gotoxy(53, 21);
							printf(" ");
						}
						break;
					case '\r':
						yx = 1;
						break;
					}
					if (yx == 1)
					{
						yx = 0;
						break;
					}
				}
				shua();
				textcolor(255);
				gotoxy(0, 0);
				if (t == 1)
				{
					for (j = 0; j < 16; j++)
						a[j] = 0;
					sj = rands();
					sj1 = rands();
					sj2 = rands();
					for (;;)
					{
						if (sj1 == sj2 || sj1 == sj || sj2 == sj)
						{
							sj1 = rands();
							sj2 = rands();
						}
						else
							break;
					}
					a[sj] = shu();
					a[sj1] = shu();
					a[sj2] = shu();
					score = 0;
					jx = 0;
				}
				else
				{
					shua();
					ct(32, 19, 15, 3, 207);
					printf(" 游戏已退出!");
					textcolor(255);
					gotoxy(0, 0);
					getch();
					return 0;
				}
			}
		}
		else;
		/* 显示结果 */
		prin(a, &score, &scoremax);
	}
	return 0;
}
/*显示函数*/
void p(int*a, int i, int x, int y)
{
	int x1 = x, y1 = y;
	textcolor(col(a + i));
	x1 = x + (i % 4) * 7;
	y1 = y + (i / 4) * 4;
	gotoxy(x1, y1);
	printf("   ");
	gotoxy(x1, y1 + 1);
	kg(a + i);
	gotoxy(x1, y1 + 2);
	printf("   ");
	textcolor(240);
}
/*字体空格声明*/
void kg(int*a)
{
	if (*a == 0)
		printf("   ", *a);
	else if (*a<10)
		printf(" %d ", *a);
	else if (*a<100)
		printf(" %d ", *a);
	else if (*a<1000)
		printf(" %d ", *a);
	else if (*a<10000)
		printf("%d ", *a);
	else
		printf("%d", *a);
}
/*单个颜色返回值*/
int col(int*a)
{
	int co = 127;
	if (*(a) == 0)
		co = 127;
	else if (*(a) == 2)
		co = 143;
	else if (*(a) == 4)
		co = 191;
	else if (*(a) == 8)
		co = 175;
	else if (*(a) == 16)
		co = 239;
	else if (*(a) == 32)
		co = 223;
	else if (*(a) == 64)
		co = 207;
	else if (*(a) == 128)
		co = 95;
	else if (*(a) == 256)
		co = 159;
	else if (*(a) == 512)
		co = 63;
	else if (*(a) == 1024)
		co = 111;
	else if (*(a) == 2048)
		co = 79;
	else if (*(a) == 4096)
		co = 287;
	else
		co = 271;
	return co;
}
/*标题字幕2048*/
void p2048(int x, int y)
{
	int i;
	textcolor(240);
	gotoxy(0, 0);
	for (i = 0; i <= 2000; i++)
	{
		printf("   ");
	}
	//输出数字2 
	textcolor(207);
	gotoxy(x, y);
	printf("         ");
	gotoxy(x, y + 1);
	printf("         ");
	gotoxy(x + 7, y + 2);
	printf("  ");
	gotoxy(x + 7, y + 3);
	printf("  ");
	gotoxy(x, y + 4);
	printf("         ");
	gotoxy(x, y + 5);
	printf("         ");
	gotoxy(x, y + 6);
	printf("  ");
	gotoxy(x, y + 7);
	printf("  ");
	gotoxy(x, y + 8);
	printf("         ");
	gotoxy(x, y + 9);
	printf("         ");
	//输出数字0 
	textcolor(239);
	gotoxy(x + 13, y);
	printf("         ");
	gotoxy(x + 13, y + 1);
	printf("         ");
	gotoxy(x + 13, y + 2);
	printf("  ");
	gotoxy(x + 13 + 7, y + 2);
	printf("  ");
	gotoxy(x + 13, y + 3);
	printf("  ");
	gotoxy(x + 13 + 7, y + 3);
	printf("  ");
	gotoxy(x + 13, y + 4);
	printf("  ");
	gotoxy(x + 13 + 7, y + 4);
	printf("  ");
	gotoxy(x + 13, y + 5);
	printf("  ");
	gotoxy(x + 13 + 7, y + 5);
	printf("  ");
	gotoxy(x + 13, y + 6);
	printf("  ");
	gotoxy(x + 13 + 7, y + 6);
	printf("  ");
	gotoxy(x + 13, y + 7);
	printf("  ");
	gotoxy(x + 13 + 7, y + 7);
	printf("  ");
	gotoxy(x + 13, y + 8);
	printf("         ");
	gotoxy(x + 13, y + 9);
	printf("         ");
	//输出数字4 
	textcolor(159);
	gotoxy(x + 26, y);
	printf("  ");
	gotoxy(x + 26 + 7, y);
	printf("  ");
	gotoxy(x + 26, y + 1);
	printf("  ");
	gotoxy(x + 26 + 7, y + 1);
	printf("  ");
	gotoxy(x + 26, y + 2);
	printf("  ");
	gotoxy(x + 26 + 7, y + 2);
	printf("  ");
	gotoxy(x + 26, y + 3);
	printf("  ");
	gotoxy(x + 26 + 7, y + 3);
	printf("  ");
	gotoxy(x + 26, y + 4);
	printf("         ");
	gotoxy(x + 26, y + 5);
	printf("         ");
	gotoxy(x + 26, y + 6);
	printf("  ");
	gotoxy(x + 26, y + 7);
	printf("  ");
	gotoxy(x + 26, y + 8);
	printf("  ");
	gotoxy(x + 26, y + 9);
	printf("  ");
	//输出数字8 
	textcolor(175);
	for (i = 0; i<10; i++)
	{
		gotoxy(x + 39, y + i);
		printf("     ");
		gotoxy(x + 44, y + i);
		printf("     ");
	}
	textcolor(240);
	gotoxy(x + 42, y + 2);
	printf("    ");
	gotoxy(x + 42, y + 3);
	printf("    ");
	gotoxy(x + 42, y + 6);
	printf("    ");
	gotoxy(x + 42, y + 7);
	printf("    ");
	//长条 
	ct(35, 15, 20, 1, 240);
	printf(" Game Sart");
	ct(35, 18, 20, 1, 240);
	printf("How to play");
	printf("\n");
	printf("\n\n\n                                    Made by 柳猫");
	printf("\n\n\n                              更多干货资料请加群710520381");
	gotoxy(35 - 25, 15);
	textcolor(255);
	gotoxy(0, 0);
}
/*画长条函数*/
void ct(int x, int y, int l, int k, int c)
{
	int i = 0, j = 0;
	textcolor(c);
	gotoxy(x, y);
	for (i = 0; i<k; i++)
	{
		gotoxy(x, y + i);
		for (j = 0; j<l; j++)
		{
			printf(" ");
		}
	}
	gotoxy(x + 1, y + k / 2);
}
void shua(void)
{
	gotoxy(0, 18);
	textcolor(255);
	printf("                                  \n");
	printf("                                  \n");
	printf("                                  \n");
	printf("                                  \n");
	printf("                                  \n");
	printf("                                  \n");
	gotoxy(0, 0);
}
/*胜利画面测试函数*/
int test(void)
{
	int i, t, yx;
	char an;
	textcolor(240);
	gotoxy(0, 0);
	for (i = 0; i <= 500; i++)
	{
		printf("   ");
	}
	gotoxy(0, 0);
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	CONSOLE_CURSOR_INFO cci;
	GetConsoleCursorInfo(hOut, &cci);
	cci.bVisible = FALSE;
	SetConsoleCursorInfo(hOut, &cci);
	//printf("\n游戏胜利!t\n重新开始游戏请按1\n继续游戏请按2\n退出请按其他键3\n");  2 1 3 


	/*
	2  继续选中 textcolor(240);
	gotoxy(36,19);
	printf("              ");
	textcolor(159);
	gotoxy(38,19);
	printf(" Continue        ");


	2  继续平常 textcolor(240);
	gotoxy(36,19);
	printf("              ");
	textcolor(159);
	gotoxy(49,19);
	printf("  Continue ");


	1 重新选中 textcolor(240);
	gotoxy(36,20);
	printf("              ");
	textcolor(239);
	gotoxy(38,20);
	printf(" Restart         ");


	1  重新平常 textcolor(240);
	gotoxy(36,20);
	printf("              ");
	textcolor(239);
	gotoxy(49,20);
	printf("  Restart  ");


	3  退出选中 textcolor(240);
	gotoxy(36,21);
	printf("              ");
	textcolor(175);
	gotoxy(38,21);
	printf(" Exit          ");


	3  退出平常 textcolor(240);
	gotoxy(36,21);
	printf("              ");
	textcolor(175);
	gotoxy(49,21);
	printf("  Exit   ");
	//   0000000000000000000000000 24
	*/
	shua();
	ct(20, 19, 15, 3, 207);
	printf(" 游戏胜利!");
	textcolor(159);
	gotoxy(38, 19);
	printf(" Continue        ");


	textcolor(239);
	gotoxy(49, 20);
	printf("  Restart  ");
	textcolor(175);
	gotoxy(49, 21);
	printf("  Exit   ");
	t = 2;
	an = 75;
	yx = 0;
	for (;;)
	{
		an = getch();
		switch (an)
		{
		case 72:
			if (t == 2)
			{
				t = 3;
				textcolor(240);
				gotoxy(36, 21);
				printf("              ");
				textcolor(175);
				gotoxy(38, 21);
				printf(" Exit          ");
				textcolor(240);
				gotoxy(36, 19);
				printf("              ");
				textcolor(159);
				gotoxy(47, 19);
				printf("   Continue ");
				textcolor(240);
				gotoxy(36, 20);
				printf("              ");
				textcolor(239);
				gotoxy(49, 20);
				printf("  Restart  ");
			}
			else if (t == 1)
			{
				t = 2;
				textcolor(240);
				gotoxy(36, 19);
				printf("              ");
				textcolor(159);
				gotoxy(38, 19);
				printf(" Continue        ");
				textcolor(240);
				gotoxy(36, 20);
				printf("              ");
				textcolor(239);
				gotoxy(47, 20);
				printf("   Restart  ");
				textcolor(240);
				gotoxy(36, 21);
				printf("              ");
				textcolor(175);
				gotoxy(49, 21);
				printf("  Exit   ");
			}
			else
			{
				t = 1;
				textcolor(240);
				gotoxy(36, 20);
				printf("              ");
				textcolor(239);
				gotoxy(38, 20);
				printf(" Restart         ");
				textcolor(240);
				gotoxy(36, 21);
				printf("              ");
				textcolor(175);
				gotoxy(47, 21);
				printf("   Exit   ");
				textcolor(240);
				gotoxy(36, 19);
				printf("              ");
				textcolor(159);
				gotoxy(49, 19);
				printf("  Continue ");
			}
			break;
		case 80:
			if (t == 2)
			{
				t = 1;
				textcolor(240);
				gotoxy(36, 20);
				printf("              ");
				textcolor(239);
				gotoxy(38, 20);
				printf(" Restart         ");
				textcolor(240);
				gotoxy(36, 19);
				printf("              ");
				textcolor(159);
				gotoxy(47, 19);
				printf("   Continue ");
				textcolor(240);
				gotoxy(36, 21);
				printf("              ");
				textcolor(175);
				gotoxy(49, 21);
				printf("  Exit   ");
			}
			else if (t == 1)
			{
				t = 3;
				textcolor(240);
				gotoxy(36, 21);
				printf("              ");
				textcolor(175);
				gotoxy(38, 21);
				printf(" Exit          ");
				textcolor(240);
				gotoxy(36, 20);
				printf("              ");
				textcolor(239);
				gotoxy(47, 20);
				printf("   Restart  ");
				textcolor(240);
				gotoxy(36, 19);
				printf("              ");
				textcolor(159);
				gotoxy(49, 19);
				printf("  Continue ");
			}
			else
			{
				t = 2;
				textcolor(240);
				gotoxy(36, 19);
				printf("              ");
				textcolor(159);
				gotoxy(38, 19);
				printf(" Continue        ");
				textcolor(240);
				gotoxy(36, 21);
				printf("              ");
				textcolor(175);
				gotoxy(47, 21);
				printf("   Exit   ");
				textcolor(240);
				gotoxy(36, 20);
				printf("              ");
				textcolor(239);
				gotoxy(49, 20);
				printf("  Restart  ");
			}
			break;
		case '\r':
			yx = 1;
			break;
		}
		if (yx == 1)
		{
			yx = 0;
			break;
		}
	}
	shua();
	textcolor(255);
	gotoxy(0, 0);
	textcolor(240);
	if (t == 2)
		printf("Continue    ");
	else if (t == 1)
		printf("Restart    ");
	else
		printf("Exit      ");
	return 0;
}


附上效果图:

游戏开始界面:

2048小游戏


游戏进行中:

2048小游戏


游戏结束:(更多干货和资料请直接联系我,也可以加群710520381,邀请码:柳猫,欢迎大家共同讨论)

2048小游戏

上一篇:继续内存优化——一脸懵逼


下一篇:初入职软件工程师的血泪——C语言内存优化