- 2023tyoi0292 的博客
2048小游戏
- 2024-1-25 17:02:02 @
禁止在上课腐朽!!!(被抓腐概不负责)
#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;
}
如果发现问题请前往评论区