21xrx.com
2024-11-10 00:56:48 Sunday
登录
文章检索 我的文章 写文章
C++使用deque实现贪吃蛇游戏
2023-07-04 20:54:40 深夜i     --     --
C++ deque 贪吃蛇游戏

贪吃蛇游戏是一款非常经典的游戏,很多程序员都喜欢用这个游戏来练习编程技能。而C++是一种非常流行的编程语言,也是许多程序员的首选语言。在C++中,使用deque可以很方便地实现贪吃蛇游戏。

deque是一种双向队列,它可以在队列的两端进行插入和删除操作,而且时间复杂度都是O(1),非常高效。在贪吃蛇游戏中,我们可以使用deque来实现蛇的身体,每当蛇移动时,我们只需要在deque的头部添加一个新的身体,同时删除尾部的一个身体,就可以实现蛇的移动了。

以下是使用deque实现贪吃蛇游戏的核心代码:


#include <iostream>

#include <deque>

using namespace std;

const int ROW = 20, COL = 50;

struct Point y;

;

class Snake {

public:

  Snake() {

    body.push_front( 10);

    body.push_front( 10);

    body.push_front( 10);

    direction = 0;

  }

  void move() {

    Point head = getHead();

    switch (direction) {

    case 0:

      head.x--;

      break;

    case 1:

      head.y++;

      break;

    case 2:

      head.x++;

      break;

    case 3:

      head.y--;

      break;

    }

    if (head.x < 0 || head.x >= ROW || head.y < 0 || head.y >= COL)

      isDead = true;

      return;

    

    for (auto& p : body) {

      if (p.x == head.x && p.y == head.y)

        isDead = true;

        return;

      

    }

    body.push_front(head);

    if (head.x == food.x && head.y == food.y) {

      generateFood();

    }

    else {

      body.pop_back();

    }

  }

  void turnLeft() {

    direction = (direction + 3) % 4;

  }

  void turnRight() {

    direction = (direction + 1) % 4;

  }

  void generateFood() {

    food.x = rand() % ROW;

    food.y = rand() % COL;

  }

  Point getHead() {

    return body.front();

  }

  deque<Point> body;

  Point food;

  int direction;

  bool isDead = false;

};

void draw(Snake snake) {

  cout << "\033[2J\033[1;1H";

  bool isBody[ROW][COL] = { false };

  for (auto p : snake.body) {

    isBody[p.x][p.y] = true;

  }

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

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

      if (i == snake.food.x && j == snake.food.y)

        cout << "@";

      

      else if (isBody[i][j])

        cout << "#";

      

      else

        cout << ".";

      

    }

    cout << endl;

  }

}

int main() {

  Snake snake;

  while (!snake.isDead) {

    draw(snake);

    snake.move();

    char c;

    cin >> c;

    if (c == 'a') {

      snake.turnLeft();

    }

    else if (c == 'd') {

      snake.turnRight();

    }

  }

  cout << "Game over!" << endl;

  return 0;

}

以上代码中的Snake类就是贪吃蛇,它包含了蛇的身体、方向、食物等信息,同时还实现了移动、转向、生成食物等方法。在main函数中,我们不断地调用draw函数来绘制游戏界面,并根据用户的输入来控制蛇的转向。当蛇撞墙或撞到自己的身体时,游戏就结束了。

总的来说,使用deque实现贪吃蛇游戏非常方便,而且效果也不错。这是一个非常好的练习C++编程技能的项目,有兴趣的读者可以尝试实现一下。

  
  

评论区

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