21xrx.com
2025-03-25 04:00:56 Tuesday
文章检索 我的文章 写文章
C++编程实现贪吃蛇游戏
2023-06-24 10:59:47 深夜i     11     0
C++ 编程 贪吃蛇游戏

贪吃蛇是一款经典的游戏,在早期的手机上也很受欢迎。现在我们可以使用C++编程语言来实现这个游戏,让我们来一起看看如何实现。

首先,我们需要了解游戏的规则和实现的步骤。贪吃蛇游戏规则很简单,它的主要目的是控制蛇的移动并吃掉尽可能多的食物。当蛇吃到食物时,它的长度增加并且分数增加。同时,蛇不能碰到墙壁或自己的身体,否则游戏结束。下面是该游戏的步骤:

1. 创建一个游戏窗口

2. 初始化蛇的位置和方向

3. 在游戏窗口中创建食物

4. 控制蛇的移动和方向:

  a. 当用户按下箭头键时,改变蛇的方向

  b. 让蛇每隔一段时间前进一步

5. 检测蛇是否碰到了墙壁或自己的身体

6. 当蛇吃到食物时,增加分数并增加蛇的长度

7. 更新游戏窗口,包括蛇和分数的显示

下面是一个简单的示例代码来实现贪吃蛇游戏:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>
#include <windows.h>
using namespace std;
const int WIDTH = 50;
const int HEIGHT = 20;
//定义蛇节点
struct Point
  int x;
  int y;
;
//定义蛇的属性
struct Snake {
  int length;
  Point body[100];
  Point dir;
};
//定义食物的属性
struct Fruit
  Point loc;
;
//生成随机数
int Random(int min, int max){
  return rand() % (max - min + 1) + min;
}
//初始化游戏
void initGame(Snake& snake, Fruit& fruit) {
  //设置随机种子
  srand(time(nullptr));
  //设置蛇的初始位置和方向
  snake.length = 3;
  snake.body[0].y = HEIGHT / 2;
  snake.body[0].x = WIDTH / 2;
  snake.dir.x = 1;
  snake.dir.y = 0;
  //初始化蛇的身体
  for (int i = 1; i < snake.length; i++) {
    snake.body[i].x = snake.body[0].x - i;
    snake.body[i].y = snake.body[0].y;
  }
  //随机生成食物位置
  fruit.loc.x = Random(1, WIDTH - 2);
  fruit.loc.y = Random(1, HEIGHT - 2);
}
//绘制游戏
void drawGame(const Snake& snake, const Fruit& fruit) {
  //清屏
  system("cls");
  //打印游戏信息
  cout << "Score: " << (snake.length - 3) * 10 << endl;
  //绘制游戏窗口
  for (int i = 0; i < HEIGHT; i++) {
    for (int j = 0; j < WIDTH; j++) {
      if (i == 0 || i == HEIGHT - 1 || j == 0 || j == WIDTH - 1)
        cout << "#";
      
      else if (fruit.loc.x == j && fruit.loc.y == i)
        cout << "O";
      
      else {
        bool flag = false;
        for (int k = 0; k < snake.length; k++) {
          if (snake.body[k].x == j && snake.body[k].y == i) {
            flag = true;
            cout << "*";
          }
        }
        if (!flag)
          cout << " ";
        
      }
    }
    cout << endl;
  }
}
//控制蛇的移动
void moveSnake(Snake& snake) {
  //移动蛇的身体
  for (int i = snake.length - 1; i > 0; i--) {
    snake.body[i].x = snake.body[i - 1].x;
    snake.body[i].y = snake.body[i - 1].y;
  }
  //移动蛇的头部
  snake.body[0].x += snake.dir.x;
  snake.body[0].y += snake.dir.y;
}
//控制蛇的方向
void controlSnake(Snake& snake) {
  //读取按键
  if (_kbhit()) {
    char ch = _getch();
    if (ch == -32) {
      ch = _getch();
      if (ch == 72 && snake.dir.y != 1)
        snake.dir.y = -1;
        snake.dir.x = 0;
      
      else if (ch == 80 && snake.dir.y != -1)
        snake.dir.y = 1;
        snake.dir.x = 0;
      
      else if (ch == 75 && snake.dir.x != 1)
        snake.dir.x = -1;
        snake.dir.y = 0;
      
      else if (ch == 77 && snake.dir.x != -1)
        snake.dir.x = 1;
        snake.dir.y = 0;
      
    }
  }
}
//检测是否吃到食物
bool eatFruit(Snake& snake, Fruit& fruit) {
  if (snake.body[0].x == fruit.loc.x && snake.body[0].y == fruit.loc.y) {
    //随机生成新的食物位置
    fruit.loc.x = Random(1, WIDTH - 2);
    fruit.loc.y = Random(1, HEIGHT - 2);
    //增加蛇的长度
    snake.body[snake.length].x = snake.body[snake.length - 1].x;
    snake.body[snake.length].y = snake.body[snake.length - 1].y;
    snake.length++;
    return true;
  }
  return false;
}
//检测蛇是否碰到墙壁或自己的身体
bool checkGameOver(const Snake& snake) {
  //检测是否撞墙
  if (snake.body[0].x == 0 || snake.body[0].x == WIDTH - 1 || snake.body[0].y == 0 || snake.body[0].y == HEIGHT - 1)
    return true;
  
  //检测是否撞到自己的身体
  for (int i = 1; i < snake.length; i++) {
    if (snake.body[0].x == snake.body[i].x && snake.body[0].y == snake.body[i].y)
      return true;
    
  }
  return false;
}
int main() {
  //创建蛇和食物
  Snake snake;
  Fruit fruit;
  //初始化游戏
  initGame(snake, fruit);
  while (true) {
    //绘制游戏
    drawGame(snake, fruit);
    //控制蛇的移动
    moveSnake(snake);
    //控制蛇的方向
    controlSnake(snake);
    //检测是否吃到食物
    if (eatFruit(snake, fruit)) {
      //更新游戏分数
      drawGame(snake, fruit);
    }
    //检测游戏是否结束
    if (checkGameOver(snake))
      cout << "Game Over!" << endl;
      break;
    
    //延迟游戏时间
    Sleep(100);
  }
  return 0;
}

上面这段代码可以让你的C++编程技能变得更加实用,实现贪吃蛇游戏可能看起来不算太难,但加入更多元素和特性可以使得这个项目变得更加有趣和挑战性。通过实现这个项目,你可以锻炼自己的编程和逻辑思维能力,在这个过程中成长和进步。

  
  

评论区