21xrx.com
2024-11-22 09:46:33 Friday
登录
文章检索 我的文章 写文章
C++贪吃蛇简单程序代码
2023-06-28 23:00:04 深夜i     --     --
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++贪吃蛇简单程序代码的部分内容,蛇的细节设置可以通过修改程序来实现。对编程初学者来说,这样的简单程序十分适合练手。

  
  

评论区

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