21xrx.com
2025-01-12 16:28:38 Sunday
文章检索 我的文章 写文章
C++贪吃蛇简单程序代码
2023-06-28 23:00:04 深夜i     8     0
C++ 贪吃蛇 程序代码 简单

贪吃蛇是一款非常经典的游戏,它的简单易懂,很容易上手。下面是一段C++贪吃蛇的代码,让我们一起看看吧。

首先,我们需要定义一些变量。以下是一些比较重要的变量:

1. 长度:表示蛇的长度。初始为3,每次吃到食物之后加1。

2. 方向:表示蛇当前的运动方向。可以使用wasd或者方向键来控制。

3. 坐标系:表示蛇当前所在的坐标。

4. 食物:表示蛇需要吃的食物。

为了让程序更加直观,我们可以以数组的形式来表示坐标系和蛇的身体。

const int ROW = 20; // 行
const int COL = 20; // 列
int map[ROW][COL];  // 坐标系

接着,我们需要创建蛇的身体。首先,我们定义了一个结构体,用来表示蛇的每一个节点的位置。

struct Snake
  int x;
  int y;
;

然后,我们定义一个数组来表示蛇的身体。初始时,蛇的身体有3个节点。

Snake body[100] = {3,4,1};
int length = 3// 蛇的长度

接下来,我们需要检测蛇与坐标系的边界,和蛇与自己的身体是否相撞。如果相撞,则游戏结束。代码如下:

if (body[0].x < 0 || body[0].x >= ROW || body[0].y < 0 || body[0].y >= COL) // 检测边界
  cout << "Game Over!" << endl;
  return 0;
for (int i = 1; i < length; i++) // 检测身体
{
  if (body[0].x == body[i].x && body[0].y == body[i].y)
  
    cout << "Game Over!" << endl;
    return 0;
  
}

接下来,我们需要检测蛇是否吃到了食物。判断方法很简单,只需要判断蛇头的位置是否与食物的位置重合即可。

if (body[0].x == foodX && body[0].y == foodY)
{
  length++; // 长度加1
  createFood(); // 重新生成食物的位置
}

最后一步,就是控制蛇的移动。具体实现上,我们可以使用一个循环来遍历整个蛇的身体,然后将每个节点的位置向前移动一个单位。最后,再将蛇头朝着前进的方向移动一个单位即可。

完整的代码如下:

#include <iostream>
#include <conio.h>
#include <ctime>
using namespace std;
const int ROW = 20// 行
const int COL = 20// 列
int map[ROW][COL];  // 坐标系
struct Snake
  int x;
  int y;
;
Snake body[100] = {3,2,4};
int length = 3// 蛇的长度
char direction = 'd'; // 初始方向为右
int foodX, foodY; // 食物的坐标
// 初始化坐标系
void initMap()
{
  for (int i = 0; i < ROW; i++)
  {
    for (int j = 0; j < COL; j++)
    {
      map[i][j] = 0;
    }
  }
}
// 画出坐标系和蛇
void draw()
{
  system("cls"); // 清屏
  for (int i = 0; i < ROW; i++)
  {
    for (int j = 0; j < COL; j++)
    {
      if (map[i][j] == 0) cout << " "// 空格表示坐标系
      if (map[i][j] == -1) cout << "#"; // #表示墙壁
      if (map[i][j] == 1) cout << "*"// *表示蛇
      if (map[i][j] == 2) cout << "@"// @表示食物
    }
    cout << endl;
  }
}
// 生成食物的位置
void createFood()
{
  srand(time(0));
  foodX = rand() % ROW;
  foodY = rand() % COL;
  while (map[foodX][foodY] != 0)
  {
    foodX = rand() % ROW;
    foodY = rand() % COL;
  }
}
// 移动蛇
void move()
{
  // 将身体向前移动
  for (int i = length - 1; i > 0; i--)
  {
    body[i].x = body[i - 1].x;
    body[i].y = body[i - 1].y;
  }
  // 移动蛇头
  if (direction == 'w') body[0].x--;
  else if (direction == 's') body[0].x++;
  else if (direction == 'a') body[0].y--;
  else if (direction == 'd') body[0].y++;
}
int main()
{
  initMap();
  createFood();
  map[foodX][foodY] = 2// 随机放置食物
  while (1)
  {
    draw();
    if (_kbhit()) // 判断有没有按键输入
    {
      char c = _getch();
      if (c == 'w' || c == 's' || c == 'a' || c == 'd')
      {
        if ((direction == 'w' && c != 's') || (direction == 's' && c != 'w') ||
          (direction == 'a' && c != 'd') || (direction == 'd' && c != 'a'))
        更新方向
        
      }
    }
    move();
    // 检测边界和身体是否相撞
    if (body[0].x < 0 || body[0].x >= ROW || body[0].y < 0 || body[0].y >= COL) // 检测边界
    
      cout << "Game Over!" << endl;
      return 0;
    
    for (int i = 1; i < length; i++) // 检测身体
    {
      if (body[0].x == body[i].x && body[0].y == body[i].y)
      
        cout << "Game Over!" << endl;
        return 0;
      
    }
    // 检测是否吃到食物
    if (body[0].x == foodX && body[0].y == foodY)
    {
      length++; // 长度加1
      createFood(); // 重新生成食物的位置
    }
    // 更新坐标系
    for (int i = 0; i < length; i++)
    {
      map[body[i].x][body[i].y] = 1// 蛇的身体
    }
    map[foodX][foodY] = 2// 食物
  }
  return 0;
}

以上就是C++贪吃蛇简单程序代码的部分内容,蛇的细节设置可以通过修改程序来实现。对编程初学者来说,这样的简单程序十分适合练手。

  
  

评论区