21xrx.com
2025-06-26 16:04:44 Thursday
文章检索 我的文章 写文章
完整版C++贪吃蛇代码
2023-06-27 19:34:38 深夜i     21     0
C++ 贪吃蛇 代码 完整版 游戏

贪吃蛇是一款经典的游戏,而C++是一门经典的编程语言。结合起来,我们可以编写出一份完整版的C++贪吃蛇代码。

本代码实现了贪吃蛇的基本功能,包括蛇的移动、吃食物、判断是否死亡等。下面我们来逐一详细介绍。

首先,我们需要定义蛇、食物和游戏区域的数据结构。在本代码中,我们使用结构体来定义它们的属性。如下所示:

struct Snake y;
;
struct Food
  int x;
struct Area y1;

接下来是主函数。在主函数中,我们需要定义一些常量和变量,初始化游戏区域,并输出游戏说明。代码如下:

//定义一些常量和变量
const int MAX_LEN = 100;  //蛇的最大长度
const int AREA_LEN = 20;  //游戏区域的边长
int len = 1;        //蛇的初始长度
int score = 0;       //得分
int speed = 200;      //初始速度
char ch;          //记录玩家输入的按键
//初始化游戏区域
Area area;
area.x1 = 1;
area.y1 = 1;
area.x2 = AREA_LEN;
area.y2 = AREA_LEN;
//输出游戏说明
cout << "***Welcome to the Snake Game***\n";
cout << "Use arrow keys to control the snake.\n";
cout << "Eat the food to gain points, avoid hitting the wall or yourself.\n";
cout << "Press any key to start the game.\n";
cin.get();   //等待用户按下任意键开始游戏

接下来是蛇的初始化。我们定义一个长度为1的蛇头,并随机生成一个食物。代码如下:

//初始化蛇
Snake snake[MAX_LEN];
snake[0].x = AREA_LEN / 2;
snake[0].y = AREA_LEN / 2;
//随机生成食物
Food food;
srand(time(NULL));   //设置随机种子
food.x = rand() % AREA_LEN + 1;
food.y = rand() % AREA_LEN + 1;

然后,我们开始游戏的主循环。在循环中,我们需要不断监听玩家的输入,并根据输入来改变蛇的移动方向。同时,我们需要判断蛇是否吃到了食物,如果吃到了,就让蛇长度加1,并重新随机生成一个食物。如果蛇碰到了墙壁或者自己的身体,就判定为死亡。游戏结束后,输出得分并退出循环。代码如下:

while (1) {
  Sleep(speed);    //控制蛇的移动速度
  system("cls");   //清屏
  draw(snake, food, area);  //绘制游戏界面
  //监听玩家的输入
  if (_kbhit()) {
    ch = _getch();
    switch (ch) {
      case KB_UP:
        if (dir != DOWN) dir = UP;
        break;
      case KB_DOWN:
        if (dir != UP) dir = DOWN;
        break;
      case KB_LEFT:
        if (dir != RIGHT) dir = LEFT;
        break;
      case KB_RIGHT:
        if (dir != LEFT) dir = RIGHT;
        break;
      default:
        break;
    }
  }
  //判断蛇是否碰到了墙壁或者自己的身体
  if (snake[0].x == area.x1 || snake[0].x == area.x2 || snake[0].y == area.y1 || snake[0].y == area.y2) {
    cout << "***Game Over***\n";
    break;
  }
  for (int i = 1; i < len; i++) {
    if (snake[0].x == snake[i].x && snake[0].y == snake[i].y) {
      cout << "***Game Over***\n";
      break;
    }
  }
  //判断蛇是否吃到了食物
  if (snake[0].x == food.x && snake[0].y == food.y) {
    len++;
    score++;
    if (score % 10 == 0) speed -= 20;   //每吃10个食物加速一次
    food.x = rand() % AREA_LEN + 1;
    food.y = rand() % AREA_LEN + 1;
  }
  //更新蛇的位置
  for (int i = len - 1; i > 0; i--) {
    snake[i].x = snake[i - 1].x;
    snake[i].y = snake[i - 1].y;
  }
  switch (dir) {
    case UP:
      snake[0].y--;
      break;
    case DOWN:
      snake[0].y++;
      break;
    case LEFT:
      snake[0].x--;
      break;
    case RIGHT:
      snake[0].x++;
      break;
    default:
      break;
  }
}
cout << "Your score is: " << score << endl;

最后,我们需要定义一个绘制游戏界面的函数。该函数将蛇、食物和游戏区域绘制到屏幕上。代码如下:

void draw(Snake snake[], Food food, Area area) {
  //绘制游戏区域
  for (int i = area.x1; i <= area.x2; i++) {
    for (int j = area.y1; j <= area.y2; j++) {
      if (i == area.x1 || i == area.x2 || j == area.y1 || j == area.y2) cout << "#";
      else cout << " ";
    }
    cout << endl;
  }
  //绘制蛇和食物
  for (int i = 0; i < len; i++) {
    if (i == 0) cout << "@";
    else cout << "*";
    gotoxy(snake[i].x, snake[i].y);
  }
  gotoxy(food.x, food.y);
  cout << "$";
}

至此,我们的完整版C++贪吃蛇代码就编写完成了。通过这份代码,我们可以更深入地理解C++的语法和编程思想,也可以锻炼我们的编程能力和动手能力。

  
  

评论区