21xrx.com
2024-09-20 06:34:26 Friday
登录
文章检索 我的文章 写文章
C++贪吃蛇最简代码50行
2023-07-12 10:38:08 深夜i     --     --
C++ 贪吃蛇 简代码 50行

贪吃蛇一直是经典的游戏之一,能够提供令人愉悦的游戏体验,同时也是学习编程的好入门项目。其中,使用C++编写贪吃蛇游戏可以锻炼我们的编程技能和逻辑思维。现在,我们来看一下最简C++贪吃蛇代码,只有50行!

第一步,我们需要包含一些基本的头文件:


#include <iostream>

#include <cstdlib>

#include <conio.h>

#include <windows.h>

using namespace std;

第二步,定义一些常量,包括蛇头、食物和蛇身在控制台的编号、地图的宽度和高度、蛇的移动速度等。


const int width = 40;

const int height = 20;

const int snakeHead = 1;

const int snakeFood = 2;

const int snakeBody = 3;

const int snakeSpeed = 100;

第三步,定义蛇的类型,包括蛇的长度、头部、方向和身体。


struct Snake {

  int length;

  COORD head;

  int direction;

  COORD body[width * height];

};

第四步,初始化蛇,包括设置初始方向和长度。


void initSnake(Snake& snake)

  snake.length = 2;

  snake.head.X = width / 2;

  snake.head.Y = height / 2;

  snake.direction = 'd';

第五步,定义画地图的函数。


void drawMap() {

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

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

      if (i == 0 || i == height || j == 0 || j == width) {

        cout << "+";

      }

      else

        cout << " ";

      

    }

    cout << endl;

  }

}

第六步,定义画蛇的函数。


void drawSnake(Snake& snake) {

  //画头部

  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), snake.head);

  cout << "@";

  //画身体

  for (int i = 0; i < snake.length - 1; i++) {

    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), snake.body[i]);

    cout << "#";

  }

}

第七步,定义生成食物的函数。


void createFood(COORD& food) {

  food.X = rand() % (width - 2) + 1;

  food.Y = rand() % (height - 2) + 1;

  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), food);

  cout << "*";

}

第八步,定义检测蛇是否吃到食物的函数。


bool checkEat(Snake& snake, COORD& food) {

  if (snake.head.X == food.X && snake.head.Y == food.Y) {

    snake.length++;

    food.X = rand() % (width - 2) + 1;

    food.Y = rand() % (height - 2) + 1;

    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), food);

    cout << "*";

    return true;

  }

  return false;

}

第九步,定义蛇死亡的函数。


bool checkGameOver(Snake& snake) {

  for (int i = 0; i < snake.length - 1; i++) {

    if (snake.head.X == snake.body[i].X && snake.head.Y == snake.body[i].Y)

      return true;

    

  }

  if (snake.head.X == 0 || snake.head.X == width || snake.head.Y == 0 || snake.head.Y == height)

    return true;

  

  return false;

}

第十步,定义蛇移动的函数。


void moveSnake(Snake& snake) {

  //移动身体

  for (int i = snake.length - 1; i > 0; i--) {

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

  }

  snake.body[0] = snake.head;

  //移动头部

  if (snake.direction == 'w')

    snake.head.Y--;

  

  else if (snake.direction == 's') {

    snake.head.Y++;

  }

  else if (snake.direction == 'a')

    snake.head.X--;

  

  else if (snake.direction == 'd') {

    snake.head.X++;

  }

  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), snake.head);

  cout << "@";

}

第十一步,定义键盘监听事件。


void keyListen(Snake& snake, COORD& food) {

  char key = _getch();

  if ((key == 'w' && snake.direction != 's') || (key == 's' && snake.direction != 'w') || (key == 'a' && snake.direction != 'd') || (key == 'd' && snake.direction != 'a'))

    snake.direction = key;

  

  checkEat(snake, food);

}

第十二步,定义游戏主函数。


int main() {

  Snake snake;

  COORD food;

  system("title C++贪吃蛇最简代码50行");

  system("mode con cols=80 lines=25");

  srand((unsigned)time(NULL));

  initSnake(snake);

  drawMap();

  createFood(food);

  while (1) {

    drawSnake(snake);

    keyListen(snake, food);

    if (checkGameOver(snake))

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

      break;

    

    moveSnake(snake);

    Sleep(snakeSpeed);

  }

  system("pause");

  return 0;

}

以上就是最简C++贪吃蛇代码,只有50行。通过这个简单的代码,我们可以了解到蛇运动、死亡等基本功能的实现方式。同时,我们也可以通过修改常量、改变函数实现方式等方式来扩展这个游戏的功能,从而实现更多的游戏玩法。

  
  

评论区

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