21xrx.com
2025-04-28 07:08:20 Monday
文章检索 我的文章 写文章
C++实现2048游戏代码
2023-07-06 19:16:46 深夜i     16     0
C++ 2048 游戏 代码 实现

2048游戏是一款著名的益智游戏,由Gabriele Cirulli创建。这款游戏非常简单,却令人着迷。现在我们可以使用C++编写这款游戏,让您更加深入地了解它的游戏机制。

游戏规则

首先,我们需要了解2048游戏的规则。游戏中有4x4的方格,每个方格中有一个数字。两个相同数字的方格在移动时会合并成一个方格,并将它们的数字相加。每次移动后,随机一个空方格,并生成一个数字2或4。当一个方格中的数字达到或超过2048时,游戏结束。

C++实现代码

在C++中实现2048游戏非常简单。我们可以使用二维数组来表示游戏的方格,使用随机函数生成数字并移动方格。以下是一个实现2048的C++代码:

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
const int SIZE = 4;
int grid[SIZE][SIZE]; // 游戏方格
void print() // 打印游戏
{
  for (int i = 0; i < SIZE; i++) {
    for (int j = 0; j < SIZE; j++)
      cout << grid[i][j] << " ";
    cout << endl;
  }
}
void init() // 初始化游戏方格
{
  srand(time(NULL));
  int x1 = rand() % SIZE, y1 = rand() % SIZE;
  int x2 = rand() % SIZE, y2 = rand() % SIZE;
  grid[x1][y1] = 2;
  grid[x2][y2] = 2;
}
void move_left() // 向左移动方格
{
  for (int i = 0; i < SIZE; i++) {
    int j = 0;
    while (j < SIZE) {
      if (grid[i][j] == 0) {
        int k = j;
        while (k < SIZE && grid[i][k] == 0) k++;
        if (k < SIZE) {
          grid[i][j] = grid[i][k];
          grid[i][k] = 0;
        }
      }
      if (j < SIZE-1 && grid[i][j] == grid[i][j+1]) {
        grid[i][j] *= 2;
        grid[i][j+1] = 0;
        j += 2;
      }
      else j++;
    }
  }
}
void move_right() // 向右移动方格
{
  for (int i = 0; i < SIZE; i++) {
    int j = SIZE-1;
    while (j >= 0) {
      if (grid[i][j] == 0) {
        int k = j;
        while (k >= 0 && grid[i][k] == 0) k--;
        if (k >= 0) {
          grid[i][j] = grid[i][k];
          grid[i][k] = 0;
        }
      }
      if (j > 0 && grid[i][j] == grid[i][j-1]) {
        grid[i][j] *= 2;
        grid[i][j-1] = 0;
        j -= 2;
      }
      else j--;
    }
  }
}
void move_up() // 向上移动方格
{
  for (int j = 0; j < SIZE; j++) {
    int i = 0;
    while (i < SIZE) {
      if (grid[i][j] == 0) {
        int k = i;
        while (k < SIZE && grid[k][j] == 0) k++;
        if (k < SIZE) {
          grid[i][j] = grid[k][j];
          grid[k][j] = 0;
        }
      }
      if (i < SIZE-1 && grid[i][j] == grid[i+1][j]) {
        grid[i][j] *= 2;
        grid[i+1][j] = 0;
        i += 2;
      }
      else i++;
    }
  }
}
void move_down() // 向下移动方格
{
  for (int j = 0; j < SIZE; j++) {
    int i = SIZE-1;
    while (i >= 0) {
      if (grid[i][j] == 0) {
        int k = i;
        while (k >= 0 && grid[k][j] == 0) k--;
        if (k >= 0) {
          grid[i][j] = grid[k][j];
          grid[k][j] = 0;
        }
      }
      if (i > 0 && grid[i][j] == grid[i-1][j]) {
        grid[i][j] *= 2;
        grid[i-1][j] = 0;
        i -= 2;
      }
      else i--;
    }
  }
}
void play() // 开始游戏
{
  init();
  print();
  while (true) {
    char c = getchar();
    if (c == 'a') move_left();
    else if (c == 'd') move_right();
    else if (c == 'w') move_up();
    else if (c == 's') move_down();
    else continue;
    int x = rand() % SIZE, y = rand() % SIZE;
    while (grid[x][y] != 0) {
      x = rand() % SIZE;
      y = rand() % SIZE;
    }
    grid[x][y] = 2;
    print();
    bool over = true;
    for (int i = 0; i < SIZE; i++)
      for (int j = 0; j < SIZE; j++)
        if (grid[i][j] == 2048) {
          cout << "Congratulations! You win!" << endl;
          return;
        }
        else if (grid[i][j] == 0) over = false;
    if (over) {
      cout << "Game over!" << endl;
      return;
    }
  }
}
int main()
{
  play();
  return 0;
}

在这个代码中,我们使用了四个函数:`move_left()`、`move_right()`、`move_up()`和`move_down()`,分别实现向左、向右、向上和向下移动方格。我们还定义了一个`init()`函数,在开始游戏时初始化游戏方格。在游戏过程中,我们使用了`print()`函数打印游戏,使用`getchar()`来获取玩家的移动方向,并使用随机函数生成新的数字。

使用以上C++代码实现2048游戏非常简单直接。 您可以开始编码,并在执行代码后体验这个游戏。 越快越好!

  
  

评论区