专栏文章

2048

休闲·娱乐参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mioyjxli
此快照首次捕获于
2025/12/03 03:15
3 个月前
此快照最后确认于
2025/12/03 03:15
3 个月前
查看原文
目前是毛坯版 2048
CPP
#include <cstdio>
#include <conio.h>
#include <windows.h>
#include <ctime>
#include <cstdlib>
#include <algorithm>

char ch;
int a[10][10], x, y, flag, score, max;

inline void print() {
	system("cls");
	puts(""), puts(""), puts(""), puts(""), puts(""), puts("");
	printf("                                             ");
	printf("score : %d     max : %d\n", score, max);
	printf("                                             ");
	printf("----------------------------\n");
	printf("                                             ");
	printf("|%5d|%5d|%5d|%5d|\n", a[0][0], a[0][1], a[0][2], a[0][3]);
	printf("                                             ");
	printf("----------------------------\n");
	printf("                                             ");
	printf("|%5d|%5d|%5d|%5d|\n", a[1][0], a[1][1], a[1][2], a[1][3]);
	printf("                                             ");
	printf("----------------------------\n");
	printf("                                             ");
	printf("|%5d|%5d|%5d|%5d|\n", a[2][0], a[2][1], a[2][2], a[2][3]);
	printf("                                             ");
	printf("----------------------------\n");
	printf("                                             ");
	printf("|%5d|%5d|%5d|%5d|\n", a[3][0], a[3][1], a[3][2], a[3][3]);
	printf("                                             ");
	printf("----------------------------\n");
}

inline int random_2or4() {
	return rand() % 10 ? 2 : 4;
}

inline void myup() {
	flag = 0; 
	for (int i = 0; i < 4; i++)
		for (int j = 1; j < 4; j++)
			for (int k = j; k; k--)
				if (!a[k - 1][i] && a[k][i])
					a[k - 1][i] = a[k][i], a[k][i] = 0, flag = 1;
	for (int i = 0; i < 4; i++) 
		for (int j = 0; j < 3; j++)
			if (a[j][i] && a[j][i] == a[j + 1][i]) {
				flag = 1;
				a[j][i] <<= 1;
				score += a[j][i];
				max = std :: max(a[j][i], max);
				for (int k = j + 1; k < 4; k++)
					a[k][i] = a[k + 1][i];
			}
	return;
}
inline void mydown() {
	flag = 0; 
	for (int i = 0; i < 4; i++)
		for (int j = 2; j >= 0; j--)
			for (int k = j; k < 3; k++)
				if (!a[k + 1][i] && a[k][i])
					a[k + 1][i] = a[k][i], a[k][i] = 0, flag = 1;
	for (int i = 0; i < 4; i++) 
		for (int j = 3; j; j--)
			if (a[j][i] && a[j][i] == a[j - 1][i]) {
				flag = 1;
				a[j][i] <<= 1;
				score += a[j][i];
				max = std :: max(a[j][i], max);
				for (int k = j - 1; k; k--)
					a[k][i] = a[k - 1][i];
				a[0][i] = 0;
			}
	return;
}
inline void myleft() {
	flag = 0; 
	for (int i = 0; i < 4; i++)
		for (int j = 1; j < 4; j++)
			for (int k = j; k; k--)
				if (!a[i][k - 1] && a[i][k])
					a[i][k - 1] = a[i][k], a[i][k] = 0, flag = 1;
	for (int i = 0; i < 4; i++) 
		for (int j = 0; j < 3; j++)
			if (a[i][j] && a[i][j] == a[i][j + 1]) {
				flag = 1;
				a[i][j] <<= 1;
				score += a[i][j];
				max = std :: max(a[i][j], max);
				for (int k = j + 1; k < 4; k++)
					a[i][k] = a[i][k + 1];
			}
	return;
}
inline void myright() {
	flag = 0; 
	for (int i = 0; i < 4; i++)
		for (int j = 2; j >= 0; j--)
			for (int k = j; k < 3; k++)
				if (!a[i][k + 1] && a[i][k])
					a[i][k + 1] = a[i][k], a[i][k] = 0, flag = 1;
	for (int i = 0; i < 4; i++) 
		for (int j = 3; j; j--)
			if (a[i][j] && a[i][j] == a[i][j - 1]) {
				flag = 1;
				a[i][j] <<= 1;
				score += a[i][j];
				max = std :: max(a[i][j], max);
				for (int k = j - 1; k; k--)
					a[i][k] = a[i][k - 1];
				a[i][0] = 0;
			}
	return;
}

int main(void) {
	srand(time(nullptr));
	max = a[rand() % 4][rand() % 4] = random_2or4();
	x = rand() % 4, y = rand() % 4;
	while (a[x][y]) x = rand() % 4, y = rand() % 4;
	max = std :: max(a[x][y] = random_2or4(), max);
	system("color 1E");
	print();
	while (1) {
		if (_kbhit()) {
			ch = _getch();
			if (ch == 72) 
				myup();
			else if (ch == 80)
				mydown();
			else if (ch == 75)
				myleft();
			else if (ch == 77)
				myright();
			else continue;
			print();
			if (!flag) continue;
			Sleep(200);
			x = rand() % 4, y = rand() % 4;
			while (a[x][y]) x = rand() % 4, y = rand() % 4;
			max = std :: max(a[x][y] = random_2or4(), max);
			print();
		}
	}
	
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...