21xrx.com
2024-12-22 23:45:16 Sunday
登录
文章检索 我的文章 写文章
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++语言实现贪吃蛇的最简单代码。完整代码如下:

  
  

评论区

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