21xrx.com
2024-12-22 22:20:20 Sunday
登录
文章检索 我的文章 写文章
C++编写贪吃蛇游戏
2023-07-02 00:23:48 深夜i     --     --
C++ 贪吃蛇 游戏 编写

贪吃蛇游戏是一款经典的小游戏,在以下内容中我们将会介绍如何使用C++编写出一个简单的贪吃蛇游戏。通过这个过程,您将深入了解C++语言的操作和功能,提高您的编程技能。

首先,在C++中,我们需要利用头文件来引入所需的库函数和变量类型。这个游戏将用到的头文件有:

#include

#include

#include

其中,iostream是用来输入或输出信息的标准头文件,conio.h是用来获取键盘输入的头文件,windows.h是用来操作控制台窗口的头文件。

接下来,我们需要定义一些常量和全局变量来控制游戏内容和运行方式:

// 定义窗口大小

const int width = 30;

const int height = 20;

// 定义蛇的长度、方向和位置

int snakeX[100], snakeY[100];

int snakeLength = 1;

int snakeDir = 0;

int snakeHeadX, snakeHeadY;

// 定义食物的位置

int foodX, foodY;

// 定义游戏是否进行

bool playing = true;

以上变量中,width和height分别代表了控制台窗口的大小(宽和高)。snakeX和snakeY分别为蛇的横纵坐标数组,snakeLength为蛇的长度(初始为1),snakeDir为蛇的方向,0代表正向,1代表左向,2代表右向,3代表上,4代表下。snakeHeadX和snakeHeadY则为蛇头的坐标。食物的位置foodX和foodY也被定义在了上面,初始值为空。最后,playing变量用来记录游戏是否结束(初始为true)。

下一步,定义一些函数来实现游戏逻辑。先定义一个初始化游戏的函数initGame():

void initGame(){

  // 将蛇放在中间

  snakeX[0] = width/2;

  snakeY[0] = height/2;

  // 生成第一个食物

  spawnFood();

}

在函数中,我们将蛇移动到窗口中间,然后调用了一个spawnFood()函数来生成第一份食物。

void spawnFood(){

  // 随机食物的位置

  foodX = rand() % (width-2) + 1;

  foodY = rand() % (height-2) + 1;

  // 如果食物生成在蛇身上,重新生成食物位置

  for(int i=0; i

    if(foodX == snakeX[i] && foodY == snakeY[i]){

      spawnFood();

    }

  }

}

这个函数中,我们随机生成食物的位置,然后通过一个循环判断食物是否生成在蛇身上。如果是,则重新生成食物位置。

接下来是蛇的移动函数moveSnake():

void moveSnake(){

  // 记录蛇尾的位置

  int tailX = snakeX[snakeLength-1];

  int tailY = snakeY[snakeLength-1];

  // 移动蛇身

  for(int i=snakeLength-1; i>0; i--){

    snakeX[i] = snakeX[i-1];

    snakeY[i] = snakeY[i-1];

  }

  // 根据方向移动蛇头

  switch(snakeDir){

    case 0: snakeHeadY--; break;

    case 1: snakeHeadX--; break;

    case 2: snakeHeadX++; break;

    case 3: snakeHeadY--; break;

    case 4: snakeHeadY++; break;

  }

  // 如果吃到食物

  if(snakeHeadX == foodX && snakeHeadY == foodY){

    snakeLength++;

    spawnFood();

  }

  // 如果蛇撞到墙或自己

  if(snakeHeadX == 0 || snakeHeadX == width-1 || snakeHeadY == 0 || snakeHeadY == height-1){

    playing = false;

    return;

  }

  for(int i=1; i

    if(snakeHeadX == snakeX[i] && snakeHeadY == snakeY[i]){

      playing = false;

      return;

    }

  }

  // 更新蛇尾位置

  snakeX[0] = snakeHeadX;

  snakeY[0] = snakeHeadY;

  snakeX[snakeLength-1] = tailX;

  snakeY[snakeLength-1] = tailY;

}

这个函数中,我们首先记录了蛇尾的坐标。然后通过一个循环来移动蛇身的位置,将每个的位置改为前一个位置的值。接下来就是根据方向来移动蛇头,通过switch语句来实现。然后通过判断蛇头是否与食物的位置重合,如果是则蛇长度加1,并重新生成食物位置。接着判断游戏是否结束,如果蛇头撞到墙或自己的身体,则playing变为false,游戏结束。最后更新蛇尾的位置。

最后是游戏主函数main():

int main(){

  // 隐藏光标

  HANDLE cons = GetStdHandle(STD_OUTPUT_HANDLE);

  CONSOLE_CURSOR_INFO cci;

  GetConsoleCursorInfo(cons, &cci);

  cci.bVisible = false;

  SetConsoleCursorInfo(cons, &cci);

  // 初始化游戏

  initGame();

  // 游戏循环

  while(playing){

    // 监听键盘输入

    if(_kbhit()){

      switch(_getch()){

        case 'w': snakeDir = 3; break;

        case 'a': snakeDir = 1; break;

        case 's': snakeDir = 4; break;

        case 'd': snakeDir = 2; break;

        case 'q': playing = false; break;

      }

    }

    // 移动蛇

    moveSnake();

    // 渲染游戏界面

    renderGame();

    // 等待0.15秒

    Sleep(150);

  }

  // 游戏结束

  system("cls");

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

  std::cout << "Your Score: " << snakeLength-1 << std::endl;

  system("pause");

  return 0;

}

这个函数中,我们隐藏了控制台窗口的光标,并初始化游戏。然后进入一个while循环,判断游戏是否结束。在循环中,通过_kbhit()函数来监听用户的键盘输入,然后通过_getch()函数来获取输入的键值。根据键值改变蛇头的方向。接着调用moveSnake()函数移动蛇并更新位置,最后调用一个renderGame()函数来渲染游戏界面。在每次循环结束后,等待0.15秒后再运行下一次循环。

当游戏结束时,将playing变量置为false,跳出循环。最后输出游戏结束的消息,并显示玩家得分和分数。通过system("pause")来使程序在执行完后暂停一下。

以上就是一个简单的C++编写贪吃蛇游戏的方法,在这个过程中,我们学习了如何定义变量、函数和常量,以及如何使用循环和判断语句来实现游戏逻辑。通过这个项目,您能够更深入地了解C++的编程思想和语法规则,提高您的编程能力。

  
  

评论区

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