21xrx.com
2025-06-05 19:18:01 Thursday
登录
文章检索 我的文章 写文章
简单易懂的贪吃蛇游戏代码
2023-06-30 20:18:05 深夜i     18     0
C++ 贪吃蛇 源代码 简单易懂 游戏代码

贪吃蛇一直以来都是经典的游戏,许多人也都想学习做一个贪吃蛇游戏来尝试一下。今天,我们就来分享一个简单易懂的C++贪吃蛇源代码。

这个贪吃蛇游戏使用了图形界面和键盘控制,基于Dev C++开发环境,代码结构清晰易懂,非常适合初学者学习掌握。

首先,我们需要定义出贪吃蛇的各种属性,包括贪吃蛇的位置、身体长度、查询方向等等。具体代码如下:

typedef struct Snake y;           // 贪吃蛇的位置
  char ch;           // 贪吃蛇的外观形式
SNAKE;             
SNAKE snake[100];         // 贪吃蛇的身体
int head, tail;          // 贪吃蛇的头尾
int lenth;            // 贪吃蛇的身体长度
int direction;          // 贪吃蛇前进的方向 
bool game_over = false;      // 判断游戏是否结束

这里我们定义了贪吃蛇的结构体,包含了贪吃蛇的位置和外观形式,以及使用数组形式将整个贪吃蛇的身体存储起来。同时利用头尾指针来控制贪吃蛇的移动,并记录贪吃蛇当前的前进方向。

接着,我们需要初始化贪吃蛇的位置和身体长度,以及食物的位置。具体代码如下:

void init(){
  lenth = 3;          // 初始化贪吃蛇身体长度
  snake[0].x = 5;        // 初始化贪吃蛇头部位置
  snake[0].y = 5;
  snake[1].x = 5;        // 初始化贪吃蛇第一节身体位置
  snake[1].y = 6;
  snake[2].x = 5;        // 初始化贪吃蛇第二节身体位置
  snake[2].y = 7;
  snake[0].ch = '@';      // 设定贪吃蛇头部的外观形式
  for (int i = 1; i < lenth; i++){
    snake[i].ch = '#';    // 设定贪吃蛇身体的外观形式
  }
  food_x = rand() % 20;     // 食物的横坐标位置,随机生成
  food_y = rand() % 20;     // 食物的纵坐标位置,随机生成
}

在这里我们将贪吃蛇的身体长度设置为3,初始化贪吃蛇的位置和身体,以及外观形式。此外我们还需要随机给贪吃蛇生成一个食物的位置。

之后就是我们最想要看到的部分,贪吃蛇如何移动。具体代码如下:

void move(){
  tail = (tail + 1) % 100;        // tail指向最后一节身体的下一个位置
  snake[tail].x = snake[head].x + dx[direction];   // 身体的位置更新
  snake[tail].y = snake[head].y + dy[direction];
  snake[tail].ch = '#';
  if (snake[tail].x == food_x && snake[tail].y == food_y){ // 判断是否可以吃到食物
    lenth++;                   // 贪吃蛇长度加一
    food_x = rand() % 20;             // 随机生成新的食物坐标
    food_y = rand() % 20;
  }
  head = tail;                   // 头指针指向tail,达到身体移动的目的
  for (int i = 1; i < lenth; i++){
    if (snake[0].x == snake[i].x && snake[0].y == snake[i].y) // 判断是否碰到身体
      game_over = true;
    
  }
}

首先我们利用函数move将贪吃蛇身体的移动和食物的判断合并在一起,这样写起来更加的简货易懂。利用tail指向最后一节身体的下一个位置,并根据当前方向进行更新。判断贪吃蛇是否吃到了食物,然后进行长度更新,并重新生成新的食物坐标。最后通过head指向tail来达到贪吃蛇身体移动的目的,并判断是否碰到了身体。

以上就是我们的C++贪吃蛇源代码,简单易懂,适合初学者学习。希望大家能喜欢并从中得到收获!

  
  

评论区