21xrx.com
2024-11-05 19:03:05 Tuesday
登录
文章检索 我的文章 写文章
C++编程:贪吃蛇代码
2023-07-07 16:45:15 深夜i     --     --
C++编程 贪吃蛇 代码

贪吃蛇是一种经典的游戏,其规则简单,玩法耐人寻味。作为一名程序员,如果你也喜欢玩贪吃蛇,不妨尝试自己编写一份贪吃蛇代码,体验一下编程的乐趣吧!下面,我将分享一份基于C++语言的贪吃蛇代码,希望能够给大家带来一些参考和借鉴。

首先,我们需要定义一些常量和变量,如下所示:


const int WIDTH = 20; // 游戏窗口宽度

const int HEIGHT = 20; // 游戏窗口高度

const int MAX_LEN = 400; // 蛇的最大长度

char map[WIDTH][HEIGHT]; // 存储游戏地图

struct Point {

  int x;

  int y;

  Point(int _x, int _y): x(_x), y(_y) {} // 构造函数

};

vector<Point> snake; // 存储蛇的身体

Point food(-1, -1); // 存储食物的位置

int score; // 游戏得分

bool is_game_over; // 游戏是否结束

int direction = -1; // 蛇头移动方向,0表示上,1表示右,2表示下,3表示左

int sleep_time = 200; // 蛇每移动一格的时间间隔(毫秒)

接下来,我们需要实现一些函数来完成游戏的初始化、绘制、移动等功能。

首先是游戏初始化函数:


void init_game() {

  // 初始化地图

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

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

      if (i == 0 || i == WIDTH - 1 || j == 0 || j == HEIGHT - 1) {

        map[i][j] = '#';

      } else {

        map[i][j] = ' ';

      }

    }

  }

  // 初始化蛇的位置和长度

  snake.clear();

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

    snake.push_back(Point(WIDTH / 2 + i, HEIGHT / 2));

  }

  // 随机生成食物位置

  generate_food();

  // 初始化游戏得分和结束标志

  score = 0;

  is_game_over = false;

  // 清屏并绘制地图、蛇和食物

  system("cls");

  draw_map();

  draw_snake();

  draw_food();

}

接下来是绘制地图、蛇和食物的函数:


void draw_map() {

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

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

      cout << map[i][j];

    }

    cout << endl;

  }

}

void draw_snake() {

  for (int i = 0; i < snake.size(); i++) {

    Point p = snake[i];

    map[p.x][p.y] = '*';

  }

}

void draw_food() {

  map[food.x][food.y] = '@';

}

接下来是移动蛇的函数:


void move_snake() {

  // 计算新的蛇头位置

  Point head = snake.front();

  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 < 1 || head.x >= WIDTH - 1 || head.y < 1 || head.y >= HEIGHT - 1)

    is_game_over = true;

    return;

  

  for (int i = 1; i < snake.size(); i++) {

    if (head.x == snake[i].x && head.y == snake[i].y)

      is_game_over = true;

      return;

    

  }

  // 判断是否吃到了食物

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

    score++;

    snake.push_back(Point(food.x, food.y));

    generate_food();

    draw_food();

  } else {

    // 没有吃到食物,移动蛇身

    Point tail = snake.back();

    map[tail.x][tail.y] = ' ';

    snake.pop_back();

    snake.push_front(head);

  }

  // 绘制蛇的新位置

  draw_snake();

  // 延迟一段时间再移动蛇,形成动画效果

  Sleep(sleep_time);

}

最后是生成食物位置的函数:


void generate_food() {

  while (true) {

    int x = rand() % (WIDTH - 2) + 1;

    int y = rand() % (HEIGHT - 2) + 1;

    if (map[x][y] == ' ')

      food.x = x;

      food.y = y;

      return;

    

  }

}

实现了以上几个函数,我们就可以开始编写主函数了:


int main() {

  // 随机种子

  srand(time(NULL));

  // 初始化游戏

  init_game();

  // 游戏主循环

  while (!is_game_over) {

    // 处理用户输入

    if (_kbhit()) {

      char c = _getch();

      if (c == 'w' && direction != 2) direction = 0;

      if (c == 'd' && direction != 3) direction = 1;

      if (c == 's' && direction != 0) direction = 2;

      if (c == 'a' && direction != 1) direction = 3;

    }

    // 移动蛇

    move_snake();

  }

  // 游戏结束,显示得分并退出

  system("cls");

  cout << "Game over! Your score is " << score << "." << endl;

  return 0;

}

至此,我们的贪吃蛇代码就完成了。你可以将以上代码保存为一个.cpp文件并编译运行,体验一下自己编写的贪吃蛇游戏,感受一下编程的魅力。当然,如果你对以上代码有什么疑问或建议,欢迎在下方留言讨论。

  
  

评论区

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