禁止在上课腐朽!!!(被抓腐概不负责)

#include <bits/stdc++.h>
#include <conio.h>
#include <windows.h>
using namespace std;

int board[10][10], winner = pow(2, 15);
int dx[5] = {0, 0, 0, 1, -1};
int dy[5] = {0, 1, -1, 0, 0};

void slowprint(string s) {
	for(int i = 0; i < s.size(); i++) {
		cout << s[i];
		Sleep(50);
	}
}

bool check() {
	for(int i = 1; i <= 4; i++) {
		for(int j = 1; j <= 4; j++) {
			if(board[i][j] == 0) return true;
		}
	}
	return false;
}

bool check2() {
	for(int i = 1; i <= 4; i++) {
		for(int j = 1; j <= 4; j++) {
			if(board[i][j] == 0) return false;
			for(int k = 1; k <= 4; k++) {
				int xx = i + dx[i], yy = j + dy[i];
				if(board[xx][yy] == board[i][j]) return false;
			}
		}
	}
	return true;
}

void up() {
	for(int i = 1; i <= 4; i++) {
		for(int j = 1; j <= 4; j++) {
			int i2 = i - 1;
			while(board[i2][j] == 0 && i2 > 0) {
				swap(board[i2][j], board[i2 + 1][j]);
				i2--;
			}
		}
	}
}

void down() {
	for(int i = 1; i <= 4; i++) {
		for(int j = 1; j <= 4; j++) {
			int i2 = i + 1;
			while(board[i2][j] == 0 && i2 <= 4) {
				swap(board[i2][j], board[i2 - 1][j]);
				i2++;
			}
		}
	}
}

void left() {
	for(int j = 1; j <= 4; j++) {
		for(int i = 1; i <= 4; i++) {
			int j2 = j - 1;
			while(board[i][j2] == 0 && j2 >= 1) {
				swap(board[i][j2], board[i][j2 + 1]);
				j2--;
			}
		}
	}
}

void right() {
	for(int j = 1; j <= 4; j++) {
		for(int i = 1; i <= 4; i++) {
			int j2 = j + 1;
			while(board[i][j2] == 0 && j2 <= 4) {
				swap(board[i][j2], board[i][j2 - 1]);
				j2++;
			}
		}
	}
}

bool win() {
	for(int i = 1; i <= 4; i++) {
		for(int j = 1; j <= 4; j++) {
			if(board[i][j] == winner) return false;
		}
	}
	return true;
}

int main() {
	int maxn = 0;
	bool flag2 = true;
	while(flag2) {
		flag2 = false;
		bool flag3 = true;
		system("cls");
		int op, score = 0, cnt = 0;
		slowprint("欢迎来到2048小游戏\n");
		Sleep(500);
		slowprint("你准备好了吗?按1开始游戏,否则退出。\n");
		cin >> op;
		if(op != 1) return 0;
		slowprint("按w表示向上,按s表示向下,按a表示向左,按d表示向右(注意,是小写),只要到了2的15次方你就赢了\n");
		Sleep(1000);
		memset(board, 0, sizeof(board));
		while(win()) {
			srand(time(0));
			cout << "分数:" << score << "最大分数:" << maxn << endl;
			cnt++;
			if(check()) {
				int flag = rand() % 100;
				int x = rand() % 4 + 1, y = rand() % 4 + 1;
				while(board[x][y] != 0) {
					x = rand() % 4 + 1;
					y = rand() % 4 + 1;
				}
				if(flag == 0) board[x][y] = 4;
				else board[x][y] = 2;
				if(cnt == 1) {
					int flag = rand() % 4;
					int x = rand() % 4 + 1, y = rand() % 4 + 1;
					while(board[x][y] != 0) {
						x = rand() % 4 + 1;
						y = rand() % 4 + 1;
					}
					if(flag == 0) board[x][y] = 4;
					else board[x][y] = 2;
				}
			}
			for(int i = 1; i <= 4; i++) {
				for(int j = 1; j <= 4; j++) cout << "=======";
				cout << endl << '|';
				for(int j = 1; j <= 4; j++) cout << setw(6) << board[i][j] << '|';
				cout << endl;
			}
			for(int j = 1; j <= 4; j++) cout << "=======";
			cout << endl;
			if(check2()) {
				maxn = max(maxn, score);
				Sleep(500);
				slowprint("Game Over\n");
				slowprint("再来一局吗?如果继续请输入1\n");
				flag3 = false;
				cin >> op;
				if(op == 1) flag2 = true;
				break;
			}
			char ch;
			ch = getch();
			if(ch == 'w') {
				up();
				bool flag = true;
				while(flag) {
					flag = false;
					for(int i = 1; i <= 4; i++) {
						for(int j = 1; j <= 4; j++) {
							if(board[i][j] != 0 && board[i][j] == board[i - 1][j]) {
								board[i - 1][j] *= 2;
								board[i][j] = 0;
								score += board[i - 1][j];
								flag = true;
							}
						}
					}
					up();
				}
			}
			else if(ch == 's') {
				bool flag = true;
				down();
				while(flag) {
					flag = false;
					for(int i = 1; i <= 4; i++) {
						for(int j = 1; j <= 4; j++) {
							if(board[i][j] != 0 && board[i][j] == board[i + 1][j]) {
								board[i + 1][j] *= 2;
								board[i][j] = 0;
								score += board[i + 1][j];
								flag = true;
							}
						}
					}
					down();
				}
			}
			else if(ch == 'a') {
				bool flag = true;
				left();
				while(flag) {
					flag = false;
					for(int j = 1; j <= 4; j++) {
						for(int i = 1; i <= 4; i++) {
							if(board[i][j] != 0 && board[i][j] == board[i][j - 1]) {
								board[i][j - 1] *= 2;
								board[i][j] = 0;
								score += board[i][j - 1];
								flag = true;
							}
						}
					}
					left();
				}
			}
			else if(ch == 'd') {
				bool flag = true;
				right();
				while(flag) {
					cout << flag << endl;
					flag = false;
					for(int j = 1; j <= 4; j++) {
						for(int i = 1; i <= 4; i++) {
							if(board[i][j] != 0 && board[i][j] == board[i][j + 1]) {
								board[i][j + 1] *= 2;
								board[i][j] = 0;
								score += board[i][j + 1];
								flag = true;
							}
						}
					}
					right();
				}
			}
			system("cls");
		}
		system("cls");
		if(flag3) {
			maxn = max(maxn, score);
			for(int i = 1; i <= 4; i++) {
				for(int j = 1; j <= 4; j++) cout << "=======";
				cout << endl << '|';
				for(int j = 1; j <= 4; j++) cout << setw(6) << board[i][j] << '|';
				cout << endl;
			}
			cout << "你赢了!!!" << endl;
			slowprint("再来一局吗?如果继续请输入1\n");
			cin >> op;
			if(op != 1) break;	
		}
	}
	return 0;
}

如果发现问题请前往评论区