21xrx.com
2025-06-28 23:07:04 Saturday
文章检索 我的文章 写文章
C++编写简易版贪吃蛇游戏代码
2023-07-02 16:11:23 深夜i     13     0
C++ 编写 简易版 贪吃蛇游戏 代码

贪吃蛇是大家非常熟悉和喜欢的休闲游戏,而C++作为一门经典的编程语言,也在这个游戏中有着广泛的应用。在本文中,我们将介绍如何使用C++编写一个简易版的贪吃蛇游戏代码。

贪吃蛇游戏的核心是控制蛇的移动,首先需要设计蛇的数据结构。我们可以使用一个二维数组来表示游戏场景,其中每个格子用数字表示它的状态:0表示空格子,1表示食物,2表示蛇。

接下来,定义一个Snake类来表示蛇。蛇有两个核心属性:它的长度和它的方向。我们可以定义一个数组来表示蛇的每个身体部分,然后每次移动时更新这个数组。蛇的移动方式很简单:从蛇头开始,一直往当前方向移动,每到一个格子就根据它的状态来判断下一步的行动。如果是空格子,就直接移动;如果是食物,就吃掉它并增加长度;如果是蛇身,就判定游戏失败,并结束游戏。

在游戏中,还需要有一些额外的功能,比如打印游戏场景、随机生成食物、更换蛇的方向等等。我们可以定义一个Game类来统一处理这些功能,让游戏的实现更加简洁和清晰。

下面是一个简单的C++贪吃蛇游戏代码实现供参考:

#include <iostream>
#include <cstdlib>
using namespace std;
const int width = 20;  // 场景宽度
const int height = 10; // 场景高度
class Snake {
public:
  Snake();         // 构造函数,初始化蛇的位置和状态
  void move();       // 移动蛇
  void change_direction(); // 改变蛇的方向
  bool is_fail();      // 判断游戏是否失败
private:
  int body[width*height][2]; // 蛇的身体,用二维数组表示每个身体部分的坐标
  int len;          // 蛇的长度
  int direction;       // 蛇的移动方向,0表示向上,1表示向下,2表示向左,3表示向右
};
class Game {
public:
  void init();    // 初始化游戏场景
  void generate_food();  // 随机生成食物
  void print();      // 打印游戏场景
  void run();       // 运行游戏
private:
  int scene[height][width]; // 场景,用二维数组表示每个格子的状态
  Snake snake;        // 贪吃蛇
};
Snake::Snake() {
  body[0][0] = height/2; // 初始化蛇的位置
  body[0][1] = width/2;
  len = 1;        // 初始化蛇的长度
  direction = 0;     // 初始化蛇的方向
}
void Snake::move() {
  for (int i=len-1; i>0; i--) {  // 更新蛇的身体
    body[i][0] = body[i-1][0];
    body[i][1] = body[i-1][1];
  }
  switch(direction) {       // 根据方向移动蛇头
    case 0:
      body[0][0]--;
      break;
    case 1:
      body[0][0]++;
      break;
    case 2:
      body[0][1]--;
      break;
    case 3:
      body[0][1]++;
      break;
  }
}
void Snake::change_direction() {
  char dir;
  cin >> dir;         // 从键盘获取新的方向
  switch(dir) {
    case 'w':
      direction = 0;
      break;
    case 's':
      direction = 1;
      break;
    case 'a':
      direction = 2;
      break;
    case 'd':
      direction = 3;
      break;
  }
}
bool Snake::is_fail() {
  int x = body[0][0];
  int y = body[0][1];
  if (x<0 || x>=height || y<0 || y>=width) { // 判定是否越界
    return true;
  }
  if (scene[x][y] == 2) {  // 判定是否撞到自己
    return true;
  }
  return false;
}
void Game::init() {
  for (int i=0; i<height; i++) {  // 初始化场景,所有格子都是空的
    for (int j=0; j<width; j++) {
      scene[i][j] = 0;
    }
  }
}
void Game::generate_food() {
  int x, y;
  do {           // 随机生成食物的位置,排除掉已经有物体的位置
    x = rand()%height;
    y = rand()%width;
  } while(scene[x][y] != 0);
  scene[x][y] = 1;      // 食物状态设为1
}
void Game::print() {
  system("clear");      // 清屏
  for (int i=0; i<height; i++) {
    for (int j=0; j<width; j++) {
      if (scene[i][j] == 0) {
        cout << " ";
      } else if (scene[i][j] == 1) {
        cout << "*";
      } else {
        cout << "#";
      }
    }
    cout << endl;
  }
}
void Game::run() {
  init();         // 初始化场景
  generate_food();     // 随机生成食物
  while(true) {
    print();       // 打印场景
    snake.change_direction(); // 获取新的方向
    snake.move();       // 移动蛇
    if (snake.is_fail()) {   // 判定游戏是否失败
      cout << "Game Over!" << endl;
      break;
    }
    int x = snake.body[0][0];
    int y = snake.body[0][1];
    if (scene[x][y] == 1) {  // 如果吃到食物,增加长度并重新生成食物
      snake.len++;
      generate_food();
    }
    for (int i=0; i<height; i++) {  // 更新场景
      for (int j=0; j<width; j++) {
        scene[i][j] = 0;
      }
    }
    for (int i=0; i<snake.len; i++) {
      int x = snake.body[i][0];
      int y = snake.body[i][1];
      scene[x][y] = 2;
    }
  }
}
int main() {
  Game game;
  game.run();       // 运行游戏
  return 0;
}

上述代码可以在控制台中实现一款简单的贪吃蛇游戏,并且你可以根据自己的需求进行进一步的拓展和优化,让游戏体验更加优雅。

  
  

评论区