21xrx.com
2024-11-22 03:59:48 Friday
登录
文章检索 我的文章 写文章
C++语言贪吃蛇程序代码
2023-07-12 08:25:26 深夜i     --     --
- 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++语言实现的贪吃蛇程序代码。这份代码虽然比较简单,但涵盖了许多基本的程序设计方法和语法,适合初学者进行实践。

  
  

评论区

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