21xrx.com
2024-12-22 23:42:17 Sunday
登录
文章检索 我的文章 写文章
贪吃蛇C++代码
2023-07-04 20:54:53 深夜i     --     --
贪吃蛇 C++编程 游戏开发 数据结构 控制台应用

贪吃蛇是一款经典的游戏,也是许多程序员学习编程的练手项目。本文将介绍一份基于C++语言编写的简单贪吃蛇代码。

首先,需要包含以下头文件:


#include<iostream>

#include<conio.h>

#include<Windows.h>

using namespace std;

其中, ` `是输入输出的头文件,` `包含了getch函数,可以从键盘读取字符,` `则是操作系统相关的头文件,用于控制命令行窗口。

接下来,定义一些常量和变量:


const int ROW = 20; //行数

const int COL = 40; //列数

const int FOOD_NUM = 3; //食物数量

const int SNAKE_LEN = 5; //蛇的长度

char map[ROW][COL]; //游戏地图

int head_x, head_y; //蛇头坐标

int tail_x, tail_y; //蛇尾坐标

int food[FOOD_NUM][2]; //食物坐标

int score; //得分

bool gameover = false; //游戏是否结束

这里将游戏区域定为20行40列,设置3个食物和蛇的初长度为5。map、head_x、head_y、tail_x、tail_y、food、score和gameover分别表示游戏区域、蛇头坐标、蛇尾坐标、食物坐标、得分、游戏是否结束等信息。

接着,初始化游戏区域和蛇的初始状态:


void init() {

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

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

      if (i == 0 || i == ROW - 1 || j == 0 || j == COL - 1) {

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

      }

      else {

        map[i][j] = ' ';

      }

    }

  }

  head_x = ROW / 2;

  head_y = COL / 2;

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

    map[head_x][head_y - i] = '*';

  }

  tail_x = head_x;

  tail_y = head_y - SNAKE_LEN + 1;

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

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

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

    food[i][0] = x;

    food[i][1] = y;

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

  }

  score = 0;

  gameover = false;

}

在init函数中,首先将游戏区域清空并设置边界为#。然后将蛇头定位在中心,初始化蛇的长度为5,用 * 表示蛇的身体状态。接着生成3个食物,用 @ 表示。score为0,gameover为假。

接下来,定义一个函数updateGame显示游戏画面:


void updateGame() {

  system("cls");

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

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

      cout << map[i][j];

    }

    cout << endl;

  }

  cout << "score:" << score << endl;

  if (gameover)

    cout << "Game Over!" << endl;

  

}

该函数清空命令行窗口,遍历map数组,输出游戏区域。输出得分和游戏结束状态。

接下来,定义一个函数updateSnake,更新蛇的状态:


void updateSnake(char key) {

  int dx = 0, dy = 0;

  switch (key)

  case 'w': dx = -1; break;

  case 's': dx = 1; break;

  case 'a': dy = -1; break;

  case 'd': dy = 1; break;

  

  int new_head_x = head_x + dx;

  int new_head_y = head_y + dy;

  if (map[new_head_x][new_head_y] == '#' || map[new_head_x][new_head_y] == '*')

    gameover = true;

    return;

  

  if (map[new_head_x][new_head_y] == '@') {

    score++;

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

      if (new_head_x == food[i][0] && new_head_y == food[i][1]) {

        map[new_head_x][new_head_y] = '*';

        food[i][0] = rand() % (ROW - 2) + 1;

        food[i][1] = rand() % (COL - 2) + 1;

        map[food[i][0]][food[i][1]] = '@';

        break;

      }

    }

  }

  else {

    map[tail_x][tail_y] = ' ';

  }

  map[new_head_x][new_head_y] = '*';

  head_x = new_head_x;

  head_y = new_head_y;

  tail_x = (tail_x + dx + ROW) % ROW;

  tail_y = (tail_y + dy + COL) % COL;

}

在updateSnake函数中,首先根据用户操作计算出新的蛇头位置。如果新位置是边界或已经是蛇的身体,则游戏结束。如果新位置是食物,则加分、移除原食物、产生新食物,并将新位置改为蛇的身体状态。否则,将蛇尾位置改为空白,并将新位置改为蛇的身体状态。

最后,编写主函数main和游戏循环:


int main() {

  srand(GetTickCount());

  char key;

  init();

  updateGame();

  while (!gameover) {

    if (_kbhit()) {

      key = _getch();

      if (key == 'w' || key == 's' || key == 'a' || key == 'd') {

        updateSnake(key);

        updateGame();

      }

    }

    Sleep(100);

  }

  return 0;

}

在主函数中,首先用当前系统时间初始化随机数生成器,接着执行初始化函数和更新游戏界面函数。接着开始游戏循环,不停按键、更新蛇的状态、更新游戏界面,循环中暂停100ms。当游戏结束时跳出循环。

代码到这里就告一段落了,是不是很简单呢?将以上代码拷贝到一个C++文件中,就可以运行这个简单的贪吃蛇游戏了。如果您想练习C++编程,这是一个不错的练手项目,也可以通过优化代码,制作出更加完善的贪吃蛇游戏。

  
  

评论区

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