21xrx.com
2025-06-26 15:23:09 Thursday
文章检索 我的文章 写文章
C++语言实现贪吃蛇的最简单代码
2023-06-28 09:38:04 深夜i     --     --
C++ 贪吃蛇 实现 代码 简单

贪吃蛇作为一款传统的游戏,经常被用作编程语言的学习案例。在这里,我们将介绍一种使用C++语言实现贪吃蛇的最简单代码。

首先,让我们来了解一下游戏的规则。玩家控制一条蛇,在地图上不断移动,吃掉食物,每吃掉一颗食物就会变长。如果蛇头碰到了自己的身体或游戏地图的墙壁,游戏就会结束。玩家的目标是让蛇尽可能地长,获得最高的分数。

接下来,我们需要定义蛇和食物的数据结构。这里我们可以使用C++的结构体来定义。蛇的结构体包含蛇头位置和蛇身数组;食物的结构体包含食物的位置。定义代码如下:

// define snake struct
struct Snake{
  int x;
  int y;
  int len;
  int body[100][2];
};
// define food struct
struct Food
  int x;
  int y;
;

接着,我们需要初始化游戏地图和蛇的初始状态。游戏地图可以使用一个二维数组来表示,蛇的初始状态包括长度,位置和移动方向。初始化代码如下:

int map[20][20] = {0}; // init map
// init snake
Snake s;
s.len = 3;
s.body[0][0] = 1;
s.body[0][1] = 1;
s.body[1][0] = 1;
s.body[1][1] = 2;
s.body[2][0] = 1;
s.body[2][1] = 3;
s.x = 1;
s.y = 3;
int dx = 0; // move direction of x-axis
int dy = 1; // move direction of y-axis

接下来,我们需要编写游戏循环。游戏循环包括更新蛇的位置,判断蛇是否吃到食物,处理按键控制蛇移动等逻辑。其中,移动蛇的位置可以通过移动蛇身数组的元素实现,每移动一步则将蛇头位置向移动方向移动一格,同时将蛇身数组中的元素依次往前移动一格。当蛇的头部与食物的位置重合时,蛇的长度增加1,同时在地图上生成新的食物。游戏循环代码如下:

// Game loop
while (true){
  // move the snake
  int nx = s.x + dx;
  int ny = s.y + dy;
  if (nx < 0 || ny < 0 || nx >= 20 || ny >= 20 || map[nx][ny] == 1) // check if the snake hits the wall or its own body
    cout << "Game over!" << endl;
    break;
  
  if (nx == food.x && ny == food.y){ // check if the snake eats the food
    s.len++;
    s.body[s.len-1][0] = s.x;
    s.body[s.len-1][1] = s.y;
    map[s.x][s.y] = 1;
    food.x = rand()%20;
    food.y = rand()%20;
    map[food.x][food.y] = 2;
  } else {
    s.x = nx;
    s.y = ny;
    map[s.x][s.y] = 1;
    map[s.body[s.len-1][0]][s.body[s.len-1][1]] = 0;
    for (int i = s.len-1; i > 0; i--){
      s.body[i][0] = s.body[i-1][0];
      s.body[i][1] = s.body[i-1][1];
    }
    s.body[0][0] = s.x;
    s.body[0][1] = s.y;
  }
  // update screen
  for (int i = 0; i < 20; i++){
    for (int j = 0; j < 20; j++){
      if (i == s.x && j == s.y){ // draw the head of the snake
        cout << "H ";
      } else if (map[i][j] == 1){ // draw the body of the snake
        cout << "S ";
      } else if (map[i][j] == 2){ // draw the food
        cout << "F ";
      } else {
        cout << "- ";
      }
    }
    cout << endl;
  }
  // process input
  char c = ' ';
  if (kbhit()){ // check if any key was pressed
    c = getch();
  }
  if (c == 'w' || c == 'W'){
    dx = -1;
    dy = 0;
  } else if (c == 's' || c == 'S'){
    dx = 1;
    dy = 0;
  } else if (c == 'a' || c == 'A'){
    dx = 0;
    dy = -1;
  } else if (c == 'd' || c == 'D'){
    dx = 0;
    dy = 1;
  }
  Sleep(100); // delay for 100ms
  system("cls"); // clear console screen
}

最后,我们需要在程序最开始处生成初始的食物,并进入游戏循环。

// create initial food
Food food;
food.x = rand()%20;
food.y = rand()%20;
map[food.x][food.y] = 2;
// start game loop
while (true){
  // ...
}

至此,我们就完成了使用C++语言实现贪吃蛇的最简单代码。完整代码如下:

  
  

评论区