21xrx.com
2024-11-05 20:38:56 Tuesday
登录
文章检索 我的文章 写文章
C++编程实现贪吃蛇游戏
2023-06-24 10:59:47 深夜i     --     --
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++编程技能变得更加实用,实现贪吃蛇游戏可能看起来不算太难,但加入更多元素和特性可以使得这个项目变得更加有趣和挑战性。通过实现这个项目,你可以锻炼自己的编程和逻辑思维能力,在这个过程中成长和进步。

  
  

评论区

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