21xrx.com
2024-09-20 00:15:12 Friday
登录
文章检索 我的文章 写文章
完整版贪吃蛇C++代码
2023-07-05 13:04:34 深夜i     --     --
贪吃蛇 C++ 代码 完整版 游戏开发

贪吃蛇是一款经典的电脑游戏,在很多玩家心目中占有重要的地位。如果你也想尝试写一个贪吃蛇游戏,那么可以参考下面的C++代码示例,完整版代码详见:


#include<iostream>

#include<conio.h>

#include<windows.h>

#include<random>

using namespace std;

//定义地图大小

const int width = 40;

const int height = 20;

//定义蛇的结构体

struct Snake

y;

snake[400];

//定义食物的结构体

struct Food

  int xfood;

//定义变量

bool stop = false;

int speed = 100;

int len = 3;

char dir = 'r';

//定义函数

void gotoxy(int x, int y);

void init();//初始化地图、蛇和食物

void draw();//绘制地图、蛇和食物

void update();//更新蛇的位置和状态

bool check();//检测蛇是否碰到墙壁或自身

void produce_food();//产生食物

//主函数

int main()

{

  init();//初始化地图、蛇和食物

  //进入游戏循环

  while(!stop)

  {

    if(_kbhit())//如果按下了键盘上的按键

      dir = _getch();//获取输入的方向键值

    update();//更新蛇的位置和状态

    if(!check())//如果蛇碰到了墙壁或自身

      stop = true;//游戏结束

    draw();//绘制地图、蛇和食物

    Sleep(speed);//休息一段时间,控制游戏速度

  }

  gotoxy(0, height + 2);//将光标移动到地图下面

  return 0;

}

void init()

{

  //隐藏光标,方便游戏界面展示

  HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);

  CONSOLE_CURSOR_INFO CursorInfo;

  GetConsoleCursorInfo(handle, &CursorInfo);

  CursorInfo.bVisible = false;

  SetConsoleCursorInfo(handle, &CursorInfo);

  //设置地图边框

  for(int i = 0; i <= height + 1; i++)

  {

    for(int j = 0; j <= width + 1; j++)

    {

      if(i == 0 || i == height + 1 || j == 0 || j == width + 1)

        cout << "#";

      else

        cout << " ";

    }

    cout << endl;

  }

  //设置蛇的初始位置

  snake[0].x = width / 2;

  snake[0].y = height / 2;

  for(int i = 1; i < len; i++)

  {

    snake[i].x = snake[i - 1].x - 1;

    snake[i].y = snake[i - 1].y;

  }

  //产生食物

  produce_food();

}

void draw()

{

  //清空地图

  for(int i = 1; i <= height; i++)

  {

    for(int j = 1; j <= width; j++)

    {

      gotoxy(j, i);

      cout << " ";

    }

  }

  //绘制蛇

  for(int i = 0; i < len; i++)

  {

    gotoxy(snake[i].x, snake[i].y);

    if(i == 0)

      cout << "@";

    else

      cout << "O";

  }

  //绘制食物

  gotoxy(food.x, food.y);

  cout << "*";

  //显示分数和速度

  gotoxy(width + 4, 4);

  cout << "分数:" << len - 3;

  gotoxy(width + 4, 6);

  cout << "速度:" << 110 - speed;

  gotoxy(0, height + 2);//将光标移动到地图下面

}

void update()

{

  //根据方向键值更新蛇的位置

  for(int i = len - 1; i >= 1; i--)

  {

    snake[i].x = snake[i - 1].x;

    snake[i].y = snake[i - 1].y;

  }

  if(dir == 'r')

    snake[0].x++;

  else if(dir == 'l')

    snake[0].x--;

  else if(dir == 'u')

    snake[0].y--;

  else if(dir == 'd')

    snake[0].y++;

  //如果吃到了食物,长度加一,并生成新的食物

  if(snake[0].x == food.x && snake[0].y == food.y)

  {

    len++;

    produce_food();

    //控制游戏速度

    if(speed > 10)

      speed -= 10;

  }

}

bool check()

{

  bool flag = true;

  //如果蛇碰到了墙壁

  if(snake[0].x == 0 || snake[0].x == width + 1 ||

    snake[0].y == 0 || snake[0].y == height + 1)

    flag = false;

  //如果蛇碰到了自身

  for(int i = 1; i < len; i++)

  {

    if(snake[0].x == snake[i].x && snake[0].y == snake[i].y)

      flag = false;

  }

  return flag;

}

void produce_food()

{

  //使用随机数产生食物的位置

  random_device rd;

  mt19937 gen(rd());

  uniform_int_distribution<> dis_x(1, width);

  uniform_int_distribution<> dis_y(1, height);

  food.x = dis_x(gen);

  food.y = dis_y(gen);

}

void gotoxy(int x, int y)

{

  COORD pos = y;

  HANDLE hand = GetStdHandle(STD_OUTPUT_HANDLE);

  SetConsoleCursorPosition(hand, pos);

}

这个代码是在控制台中运行的,使用了一些Windows API进行界面的绘制和控制台光标的移动。代码中使用了一个循环来不断地更新蛇的位置和状态,并在每次更新后绘制地图、蛇和食物。

如果你想更好地理解这个代码,建议先安装Visual Studio等C++开发环境,并在其中新建一个控制台项目,把以上代码复制粘贴进去编译和运行一下。如果出现了问题,可以找到对应的行号进行调试。祝你在编写贪吃蛇游戏的时候顺利!

  
  

评论区

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