#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_NONSTDC_NO_DEPRECATE
#include<iostream>
#include<ctime>
#include <conio.h>
#include <iomanip>
using namespace std;
class Game {
static const int N = 5;
int chessboard[N][N] = { 0 };
public:
void board();//初始化棋盘函数
void showboard();//显示棋盘函数
void add();//新增一个数函数
void up();//向上
void down();//向下
void left();//向左
void right();//向右
void win();//游戏胜利函数
void gameover();//游戏失败函数
int x, y;
};
void Game::board() {
srand((unsigned int)time(NULL));
int m,n;
x = rand() % N;
y = rand() % N;
m = rand() % N;
n = rand() % N;
double rate = static_cast<double>(rand() % 100) / 100;
if (rate > 0.5) {
chessboard[x][y] = 2;
chessboard[m][n] = 2;
}
else
chessboard[x][y] = 4;
chessboard[m][n] = 4;
}
void Game::showboard() {
system("CLS");
for (int i = 0;i<N;i++){
cout << "|";
for (int q = 0; q < N; q++) {
cout << "-----+";
}
cout << endl;
for (int j = 0; j < N; ++j)
{
cout <<"|"<< setw(5) <<chessboard[i][j] ;
}
cout << "|";
cout << endl;
}
cout << "|";
for (int q = 0; q < N; q++) {
cout << "-----+";
}
}
void Game::win() {
for (int g = 0; g < N; g++) {
for (int h = 0; h < N; h++) {
if (chessboard[g][h] == 2048) {
cout << "你真棒,恭喜你完成了游戏,想再来一局吗?";
break;
}
}
}
}
void Game::gameover() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
int s = 0;
if (chessboard[i][j] != 0)
s++;
if (s == N * N)
cout << "你输了,你可真菜呀,再来一局?";
break;
}
}
}
void Game::add() {
srand((unsigned int)time(NULL));
x = rand() % N;
y = rand() % N;
if (chessboard[x][y] == 0) {
double rate = static_cast<double>(rand() % 100) / 100;
if (rate > 0.5)
chessboard[x][y] = 2;
else
chessboard[x][y] = 4;
}
else if (chessboard[x][y] != 0) {
x = rand() % N;
y = rand() % N;
}
}
void Game::up() {
for (int i = 1; i < N; ++i) {
for (int p = i; p >= 1; --p) {
for (int j = 0; j < N; ++j) {
if (chessboard[p - 1][j] == chessboard[p][j]&&chessboard[p][j]!=0) {
chessboard[p - 1][j] *= 2;
chessboard[p][j] = 0;
}
if (chessboard[p - 1][j] == 0) {
chessboard[p - 1][j] = chessboard[p][j];
chessboard[p][j] = 0;
}
}
}
}
add();
showboard();
win();
gameover();
}
void Game::down() {
for (int i = N-2; i >=0; --i) {
for (int p = i; p <N-1; ++p) {
for (int j = 0; j < N; ++j) {
if (chessboard[p][j] == chessboard[p+1][j] && chessboard[p+1][j] != 0) {
chessboard[p+1][j] *= 2;
chessboard[p][j] = 0;
}
if (chessboard[p+1][j] == 0) {
chessboard[p+1][j] = chessboard[p][j];
chessboard[p][j] = 0;
}
}
}
}
add();
showboard();
win();
gameover();
};
void Game::left() {
for (int i = 1; i < N; ++i) {
for (int p = i; p >= 1; --p) {
for (int j = 0; j < N; ++j) {
if (chessboard[j][p-1] == chessboard[j][p] && chessboard[j][p] != 0) {
chessboard[j][p-1] *= 2;
chessboard[j][p] = 0;
}
if (chessboard[j][p-1] == 0) {
chessboard[j][p-1] = chessboard[j][p];
chessboard[j][p] = 0;
}
}
}
}
add();
showboard();
win();
gameover();
};
void Game::right() {
for (int i = N - 2; i >= 0; --i) {
for (int p = i; p < N - 1; ++p) {
for (int j = 0; j < N; ++j) {
if (chessboard[j][p] == chessboard[j][p+1] && chessboard[j][p+1] != 0) {
chessboard[j][p+1] *= 2;
chessboard[j][p] = 0;
}
if (chessboard[j][p+1] == 0) {
chessboard[j][p+1] = chessboard[j][p];
chessboard[j][p] = 0;
}
}
}
}
add();
showboard();
win();
gameover();
};
int main() {
Game a;
a.board();
a.showboard();
while (1) {
char ch = _getch();
if (ch == 72) {
a.up();
}
else if (ch == 80) {
a.down();
}
else if (ch == 75)
a.left();
else if (ch == 77)
a.right();
}
return 0;
}
2048游戏源代码
最新推荐文章于 2024-07-29 14:12:09 发布