2048彩色
2025-06-24 22:23:20
发布于:江苏
WASD控制
#include <bits/stdc++.h>
#include <windows.h>
#include <conio.h>
using namespace std;
#define F for (int i = 0; i < 4; i++) for (int j = 0; j < 4; j++)
int mp1[5][5], mp2[5][5], bg[] = {240, 144, 160, 176, 192, 208, 224, 16, 32};
void draw() {
system("cls");
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
int x = mp1[i][j], n = 0;
while (x >= 2) {
x >>= 1;
n++;
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), bg[n]);
printf("%5d", mp1[i][j]);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0);
}
printf("\n");
}
}
void move() {
for (int i = 0; i < 4; i++)
for (int k = 1; k <= 4; k++)
for (int j = 1; j < 4; j++)
if (mp1[i][j - 1] == 0)
mp1[i][j - 1] = mp1[i][j], mp1[i][j] = 0;
}
void merge() {
for (int i = 0; i < 4; i++)
for (int j = 1; j < 4; j++)
if (mp1[i][j - 1] == mp1[i][j])
mp1[i][j - 1] *= 2, mp1[i][j] = 0;
}
void generate() {
while (true) {
int x = rand() % 4, y = rand() % 4;
if (mp1[y][x] == 0) {
mp1[y][x] = rand() % 4 ? 2 : 4;
return ;
}
}
}
void update() {
move();
merge();
move();
int a = 1;
F if (!mp1[i][j]) {
a = 0;
break;
}
if (a) return ;
generate();
}
void f() {
F mp1[i][j] = mp2[i][j];
}
int main() {
srand(time(0));
system("mode con: cols=20 lines=5");
for (int i = 0; i < 2; i++)
generate();
draw();
while (true) {
char c = _getch();
if (c == 'a') {
update();
}
if (c == 'd') {
F mp2[i][j] = mp1[3 - i][3 - j];
f();
update();
F mp2[i][j] = mp1[3 - i][3 - j];
f();
}
if (c == 'w') {
F mp2[i][j] = mp1[j][3 - i];
f();
update();
F mp2[i][j] = mp1[3 - j][i];
f();
}
if (c == 's') {
F mp2[i][j] = mp1[3 - j][i];
f();
update();
F mp2[i][j] = mp1[j][3 - i];
f();
}
draw();
}
return 0;
}
这里空空如也
有帮助,赞一个