#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_NONSTDC_NO_DEPRECATE
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
#include <conio.h>
using namespace std;
int const N = 4;
int a[N][N] = { 0 };
class Game {
public:
int sum();
void chessboard();
void up();
void down();
void right();
void left();
bool judge();
};
//建棋盘
void Game::chessboard() {
system("CLS");
int x = 0, y = 0, n = 0;
srand((unsigned int)time(NULL));
//初始值,在表格中生成随机数2,4
x = rand() % N;
y = rand() % N;
if (a[x][y] != 0) {
for (int i = x; i < N; ++i) {
for (int j = y; j < N; ) {
if (a[i][j] != 0)
++j;
else {
x = rand() % N;
y = rand() % N;
n = rand() % 2;
a[i][j] = 2 * n;
}
}
}
}
else {
x = rand() % N;
y = rand() % N;
n = rand() % 2;
a[x][y] = 2 * n;
}
cout << " *****2048小游戏*****" << endl;
cout << " -----------------------" << endl;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << " | " << a[i][j];
}
cout << " |";
cout << endl;
cout << " -----------------------" << endl;
}
cout << " 请用大写或小写的" << endl;
cout << " wasd或者箭头操作:" << endl;
}
bool Game::judge() {
int win = 1;
int going = 0;
int defeat = -1;
//如果找到2048,那么游戏结束
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (a[i][j] == 2048) {
return 1;
break;
}
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (a[i][j] == a[i][j + 1])
return 0;
break;
}
}
for (int j = 0; j < N; j++) {
for (int i = 0; i < N; i++) {
if (a[i][j] == a[i + 1][j])
return 0;
break;
}
}
}
void Game::up() {
for (int x = 1; x < N; ++x) {
for (int y = x; y >= 1; --y) {
for (int z = 0; z < N; ++z) {
if (a[y - 1][z] == 0) {
a[y - 1][z] = a[y][z];
a[y][z] = 0;
}
else
if (a[y - 1][z] == a[y][z]) {
a[y - 1][z] += a[y - 1][z];
a[y][z] = 0;
}
}
}
}
}
void Game::down() {
for (int x =N-2; x >= 0; --x) {
for (int y = x; y <N-1; ++y) {
for (int z = 0; z < N; ++z) {
if (a[y + 1][z] == 0) {
a[y + 1][z] = a[y][z];
a[y][z] = 0;
}
else if (a[y + 1][z] == a[y][z]) {
a[y + 1][z] += a[y + 1][z];
a[y][z] = 0;
}
}
}
}
}
void Game::left() {
for (int x = 1; x <N; ++x) {
for (int y = x; y >= 1; --y) {
for (int z = 0; z < N; ++z) {
if (a[z][y - 1] == 0) {
a[z][y - 1] = a[z][y];
a[z][y] = 0;
}
else
if (a[z][y - 1] == a[z][y]) {
a[z][y - 1] += a[z][y - 1];
a[z][y] = 0;
}
}
}
}
}
void Game::right() {
for (int x = N-2; x >= 0; --x) {
for (int y = x; y <= N-2; ++y) {
for (int z = 0; z < N; ++z) {
if (a[z][y + 1] == 0) {
a[z][y + 1] = a[z][y];
a[z][y] = 0;
}
else
if (a[z][y + 1] == a[z][y]) {
a[z][y + 1] += a[z][y + 1];
a[z][y] = 0;
}
}
}
}
}
//把方格里的数字求和,用于求出所得的分数
int Game::sum() {
int d = 0;
for (int n = 0; n < N; n++) {
for (int s = 0; s < N; s++) {
d += a[n][s];
}
}
return d;
}
int main() {
Game a;
while (1) {
Game a;
a.chessboard();
char ch = _getch();
if (ch == 72 || ch == 'w' || ch == 'W') {
a.up();
}
else if (ch == 'a' || ch == 'A' || ch == 75) {
a.left();
}
else if (ch == 's ' || ch == 'S' || ch == 80) {
a.down();
}
else if (ch == 'd' || ch == 'D' || ch == 77) {
a.right();
}
int j = a.judge();
if (j == 1) {
cout << "你赢了!" << endl;
break;
}
else if (j == -1) {
cout << "你输了!" << endl;
break;
}
else if(j==0){
a.chessboard();
a.judge();
}
a.sum();
cout << "你的得分为:" << a.sum() - 4 << "分" << endl;
}
return 0;
}#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_NONSTDC_NO_DEPRECATE
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
#include <conio.h>
using namespace std;
int const N = 4;
int a[N][N] = { 0 };
class Game {
public:
int sum();
void chessboard();
void up();
void down();
void right();
void left();
bool judge();
};
//建棋盘
void Game::chessboard() {
system("CLS");
int x = 0, y = 0, n = 0;
srand((unsigned int)time(NULL));
//初始值,在表格中生成随机数2,4
x = rand() % N;
y = rand() % N;
if (a[x][y] != 0) {
for (int i = x; i < N; ++i) {
for (int j = y; j < N; ) {
if (a[i][j] != 0)
++j;
else {
x = rand() % N;
y = rand() % N;
n = rand() % 2;
a[i][j] = 2 * n;
}
}
}
}
else {
x = rand() % N;
y = rand() % N;
n = rand() % 2;
a[x][y] = 2 * n;
}
cout << " *****2048小游戏*****" << endl;
cout << " -----------------------" << endl;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << " | " << a[i][j];
}
cout << " |";
cout << endl;
cout << " -----------------------" << endl;
}
cout << " 请用大写或小写的" << endl;
cout << " wasd或者箭头操作:" << endl;
}
bool Game::judge() {
int win = 1;
int going = 0;
int defeat = -1;
//如果找到2048,那么游戏结束
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (a[i][j] == 2048) {
return 1;
break;
}
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (a[i][j] == a[i][j + 1])
return 0;
break;
}
}
for (int j = 0; j < N; j++) {
for (int i = 0; i < N; i++) {
if (a[i][j] == a[i + 1][j])
return 0;
break;
}
}
}
void Game::up() {
for (int x = 1; x < N; ++x) {
for (int y = x; y >= 1; --y) {
for (int z = 0; z < N; ++z) {
if (a[y - 1][z] == 0) {
a[y - 1][z] = a[y][z];
a[y][z] = 0;
}
else
if (a[y - 1][z] == a[y][z]) {
a[y - 1][z] += a[y - 1][z];
a[y][z] = 0;
}
}
}
}
}
void Game::down() {
for (int x =N-2; x >= 0; --x) {
for (int y = x; y <N-1; ++y) {
for (int z = 0; z < N; ++z) {
if (a[y + 1][z] == 0) {
a[y + 1][z] = a[y][z];
a[y][z] = 0;
}
else if (a[y + 1][z] == a[y][z]) {
a[y + 1][z] += a[y + 1][z];
a[y][z] = 0;
}
}
}
}
}
void Game::left() {
for (int x = 1; x <N; ++x) {
for (int y = x; y >= 1; --y) {
for (int z = 0; z < N; ++z) {
if (a[z][y - 1] == 0) {
a[z][y - 1] = a[z][y];
a[z][y] = 0;
}
else
if (a[z][y - 1] == a[z][y]) {
a[z][y - 1] += a[z][y - 1];
a[z][y] = 0;
}
}
}
}
}
void Game::right() {
for (int x = N-2; x >= 0; --x) {
for (int y = x; y <= N-2; ++y) {
for (int z = 0; z < N; ++z) {
if (a[z][y + 1] == 0) {
a[z][y + 1] = a[z][y];
a[z][y] = 0;
}
else
if (a[z][y + 1] == a[z][y]) {
a[z][y + 1] += a[z][y + 1];
a[z][y] = 0;
}
}
}
}
}
//把方格里的数字求和,用于求出所得的分数
int Game::sum() {
int d = 0;
for (int n = 0; n < N; n++) {
for (int s = 0; s < N; s++) {
d += a[n][s];
}
}
return d;
}
int main() {
Game a;
while (1) {
Game a;
a.chessboard();
char ch = _getch();
if (ch == 72 || ch == 'w' || ch == 'W') {
a.up();
}
else if (ch == 'a' || ch == 'A' || ch == 75) {
a.left();
}
else if (ch == 's ' || ch == 'S' || ch == 80) {
a.down();
}
else if (ch == 'd' || ch == 'D' || ch == 77) {
a.right();
}
int j = a.judge();
if (j == 1) {
cout << "你赢了!" << endl;
break;
}
else if (j == -1) {
cout << "你输了!" << endl;
break;
}
else if(j==0){
a.chessboard();
a.judge();
}
a.sum();
cout << "你的得分为:" << a.sum() - 4 << "分" << endl;
}
return 0;
}
2048
最新推荐文章于 2025-05-07 19:14:56 发布
本文介绍了一个简单的2048游戏实现方案,通过C++编程语言,详细讲解了游戏的初始化、移动策略及胜负判断等功能。玩家可以通过键盘方向键或WASD控制游戏进行。
366

被折叠的 条评论
为什么被折叠?



