21xrx.com
2025-06-05 23:58:51 Thursday
文章检索 我的文章 写文章
C++语言贪吃蛇程序代码
2023-07-12 08:25:26 深夜i     17     0
- C++语言 - 贪吃蛇 - 程序代码 - 游戏 - 控制台应用程序

贪吃蛇游戏是一款经典的游戏,也是许多程序员入门学习的第一个项目。本文将分享一份基于C++语言实现的贪吃蛇程序代码。

首先,我们需要定义贪吃蛇的数据结构。以下是一个简单的例子:

struct Snake
{
  int x, y;
  Snake *next;
};
struct Food
y;
;

其中,`Snake`表示贪吃蛇的每个节点,`next`指向下一个节点,而`Food`表示食物的坐标。

接下来,我们需要初始化贪吃蛇:将初始长度设为3,并将蛇头放置在屏幕中间。

Snake *InitSnake()
{
  Snake *Head, *Tail;
  Head = new Snake;
  Head->x = WIDTH / 2;
  Head->y = HEIGHT / 2;
  Head->next = nullptr;
  Tail = Head;
  for (int i = 1; i < 3; i++)
  {
    Snake *p = new Snake;
    p->x = Tail->x + 1;
    p->y = Tail->y;
    p->next = nullptr;
    Tail->next = p;
    Tail = p;
  }
  return Head;
}

我们根据初始长度循环创建贪吃蛇节点,并将每个节点连接起来,形成一条贪吃蛇。

接下来,我们需要在屏幕上绘制贪吃蛇和食物:

void Draw(Snake *Head, Food food)
{
  system("cls");
  for (int i = 0; i < WIDTH+2; i++)
    cout << "#";
  cout << endl;
  for (int i = 0; i < HEIGHT; i++)
  {
    cout << "#";
    for (int j = 0; j < WIDTH; j++)
    {
      if (i == food.y && j == food.x)
        cout << "F";
      else
      {
        Snake *p = Head;
        while (p != nullptr)
        {
          if (p->x == j && p->y == i)
          
            cout << "O";
            break;
          
          p = p->next;
        }
        if (p == nullptr)
          cout << " ";
      }
    }
    cout << "#" << endl;
  }
  for (int i = 0; i < WIDTH+2; i++)
    cout << "#";
  cout << endl;
}

通过`while`循环遍历每个贪吃蛇节点,判断是否与当前坐标重合,以此来绘制贪吃蛇。同时,食物放置的坐标也需要绘制出来。

接下来,我们需要实现贪吃蛇的运动和吃到食物的逻辑:

Snake *Move(Snake *Head, Food &food)
{
  int x = Head->x, y = Head->y;
  switch (getch())
  {
  case 'a': Head->x -= 1; break;
  case 'd': Head->x += 1; break;
  case 'w': Head->y -= 1; break;
  case 's': Head->y += 1; break;
  }
  Snake *p = Head->next;
  while (p != nullptr)
   y = ty;
    p = p->next;
  
  if (Head->x < 0 || Head->x >= WIDTH || Head->y < 0 || Head->y >= HEIGHT)
  {
    cout << "Game Over!" << endl;
    exit(0);
  }
  if (Head->x == food.x && Head->y == food.y)
  {
    Snake *p = new Snake;
    p->x = food.x;
    p->y = food.y;
    p->next = Head;
    Head = p;
    food.x = rand() % WIDTH;
    food.y = rand() % HEIGHT;
  }
  return Head;
}

在此函数中,我们首先通过`switch`语句获取用户输入,并将贪吃蛇移动到新的位置。然后,我们遍历每个贪吃蛇节点,将当前节点的位置赋值给前一个节点,以此实现贪吃蛇的连续运动。如果贪吃蛇撞到了屏幕边缘,则游戏结束。如果贪吃蛇吃到了食物,则需要将食物的坐标重新生成一个,并将贪吃蛇节点加入到贪吃蛇的头部,以此实现贪吃蛇的长度增加。

最后,我们需要在`main`函数中调用以上函数:

int main()
{
  Snake *Head = InitSnake();
  Food food = { rand() % WIDTH, rand() % HEIGHT };
  while (true)
  {
    Draw(Head, food);
    Head = Move(Head, food);
    Sleep(100);
  }
  return 0;
}

我们首先初始化贪吃蛇和食物,然后在一个无限循环中不断重复绘制贪吃蛇、移动贪吃蛇,直到游戏结束为止。

以上就是基于C++语言实现的贪吃蛇程序代码。这份代码虽然比较简单,但涵盖了许多基本的程序设计方法和语法,适合初学者进行实践。

  
  

评论区