21xrx.com
2024-12-27 20:47:42 Friday
登录
文章检索 我的文章 写文章
C++编写简易版贪吃蛇游戏代码
2023-07-02 16:11:23 深夜i     --     --
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;

}

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

  
  

评论区

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