21xrx.com
2025-04-04 03:09:45 Friday
文章检索 我的文章 写文章
贪吃蛇C++代码简易版
2023-06-26 02:47:24 深夜i     22     0
贪吃蛇 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++代码的实现,适合初学者入门。出于代码简洁性考虑,并未加入游戏计分系统、暂停功能等,有兴趣的同学可以自行实现。

  
  

评论区