21xrx.com
2025-03-31 23:42:14 Monday
文章检索 我的文章 写文章
C++贪吃蛇最简代码50行
2023-07-12 10:38:08 深夜i     7     0
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行。通过这个简单的代码,我们可以了解到蛇运动、死亡等基本功能的实现方式。同时,我们也可以通过修改常量、改变函数实现方式等方式来扩展这个游戏的功能,从而实现更多的游戏玩法。

  
  

评论区

请求出错了