21xrx.com
2024-06-03 03:36:52 Monday
登录
文章检索 我的文章 写文章
C++实现2048游戏代码
2023-07-06 19:16:46 深夜i     --     --
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游戏非常简单直接。 您可以开始编码,并在执行代码后体验这个游戏。 越快越好!

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复