2048
目前是毛坯版 2048
#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;
}