21xrx.com
2024-11-05 18:29:49 Tuesday
登录
文章检索 我的文章 写文章
贪吃蛇C++代码简易版
2023-06-26 02:47:24 深夜i     --     --
贪吃蛇 C++代码 简易版

贪吃蛇是一款经典的小游戏,在此分享一份C++的简易版代码实现。

首先定义贪吃蛇的结构体:包括蛇头、蛇身、食物的坐标、蛇的长度等信息。


struct Snake

 int x;

 int y;

 char face;

;

struct Food

 int fx;

 int fy;

;

struct Body

 int x;

 int y;

;

struct SnakeInfo{

 Snake snake;

 Body body[100];

 Food food;

 int len;

};

接下来,初始化游戏界面和蛇的位置。


void init(SnakeInfo& info){

 info.snake.x = 10;//贪吃蛇初始位置

 info.snake.y = 10;

 info.snake.face = DOWN;//初始面朝方向

 info.len = 3;//初始长度

 info.body[0].x = 10;//初始化三节蛇身

 info.body[0].y = 12;

 info.body[1].x = 10;

 info.body[1].y = 11;

 info.body[2].x = 10;

 info.body[2].y = 10;

 info.food.fx = rand()%21;//随机生成初始食物

 info.food.fy = rand()%21;

}

void ui(SnakeInfo info){

 for(int i = 0; i < 22; i++){

  for(int j = 0; j < 22; j++){

   if(i == 0 || j == 0 || i == 21 || j == 21) cout << "*";

   else{

    if(i == info.snake.y && j == info.snake.x) cout << "#";

    else if(i == info.food.fy && j == info.food.fx) cout << "o";

    else{

     bool flag = false;

     for(int k = 0; k < info.len; k++){

      if(i == info.body[k].y && j == info.body[k].x)

       cout << "#";

       flag = true;

      

     }

     if(!flag) cout << " ";

    }

   }

  }

  cout << endl;

 }

}

之后加入相应的运动控制,在蛇头移动时判断是否吃掉食物和碰到自己的身体。


void move(SnakeInfo& info){

 Body temp = info.body[info.len-1];

 for(int i = info.len - 1; i >= 1; i--){

  info.body[i] = info.body[i-1];

 }

 info.body[0] = info.snake;

 if(info.snake.face == UP) info.snake.y--;

 else if(info.snake.face == DOWN) info.snake.y++;

 else if(info.snake.face == LEFT) info.snake.x--;

 else if(info.snake.face == RIGHT) info.snake.x++;

 if(info.snake.x == info.food.fx && info.snake.y == info.food.fy){

  info.len++;//吃到食物,长度+1

  info.food.fx = rand()%21;//再次生成食物

  info.food.fy = rand()%21;

 }

 for(int i = 0; i < info.len - 1; i++){

  if(info.snake.x == info.body[i].x && info.snake.y == info.body[i].y){

   gameOver();//碰到身体游戏结束

  }

 }

 if(info.snake.x == 0 || info.snake.x == 21 || info.snake.y == 0 || info.snake.y == 21)

  gameOver();//碰到墙壁游戏结束

 ui(info);//每次运动完后更新画面

}

最后加入主函数及游戏结束的函数。


void gameOver(){

 cout << "Game Over!" << endl;

 exit(0);

}

int main(){

 SnakeInfo info;

 init(info);

 ui(info);

 while(1){

  if(_kbhit()){

   char c = _getch();

   if(c == 'w' || c == 'W') info.snake.face = UP;

   else if(c == 's' || c == 'S') info.snake.face = DOWN;

   else if(c == 'a' || c == 'A') info.snake.face = LEFT;

   else if(c == 'd' || c == 'D') info.snake.face = RIGHT;

  }

  move(info);//持续运动

  Sleep(200);

  system("cls");//清屏

 }

 return 0;

}

以上便是简单版贪吃蛇C++代码的实现,适合初学者入门。出于代码简洁性考虑,并未加入游戏计分系统、暂停功能等,有兴趣的同学可以自行实现。

  
  

评论区

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