帮我设计一个贪吃蛇的C++代码基本要求:1.游戏有开始菜单界面并有开始游戏游戏帮助关于游戏退出游戏四个选项;2.游戏初始化后一条蛇在密闭的围墙内在围墙内随机出现一个食物通过按键盘上的四个方向键控制蛇移动;3.蛇在移动过程中撞到墙壁将不会死亡而是穿过围墙继续行进但是如果蛇身体交叉蛇头撞到自己的身体则游戏结束;4.游戏过程中可暂停游戏并有积分系统且积分每满一定值蛇的运行速度也会逐步增加。要求游戏运行速
以下是一个简单的贪吃蛇C++代码,满足基本要求:
#include
using namespace std;
const int WIDTH = 40; // 游戏界面宽度 const int HEIGHT = 20; // 游戏界面高度 const int MAX_LENGTH = 100; // 蛇的最大长度
enum Direction { UP, DOWN, LEFT, RIGHT }; // 方向枚举
struct Point { // 坐标结构体 int x; int y; };
class Snake { private: Point body[MAX_LENGTH]; // 蛇的身体 int length; // 蛇的长度 Direction direction; // 蛇的方向 public: Snake() { length = 4; body[0] = { 10, 10 }; body[1] = { 10, 11 }; body[2] = { 10, 12 }; body[3] = { 10, 13 }; direction = RIGHT; } // 构造函数,初始化蛇的位置和方向 void move() { // 移动函数 for (int i = length - 1; i > 0; i--) { body[i] = body[i - 1]; } switch (direction) { case UP: body[0].y--; break; case DOWN: body[0].y++; break; case LEFT: body[0].x--; break; case RIGHT: body[0].x++; break; } } void changeDirection(Direction newDirection) { // 改变方向函数 if (abs(direction - newDirection) != 2) { direction = newDirection; } } bool eat(Point food) { // 吃食物函数 if (body[0].x == food.x && body[0].y == food.y) { body[length++] = food; return true; } return false; } bool isDead() { // 是否死亡函数 if (body[0].x < 0 || body[0].x >= WIDTH || body[0].y < 0 || body[0].y >= HEIGHT) { return false; } for (int i = 1; i < length; i++) { if (body[0].x == body[i].x && body[0].y == body[i].y) { return true; } } return false; } Point getHead() { // 获取蛇头函数 return body[0]; } };
class Game { private: Snake snake; // 蛇 Point food; // 食物 int score; // 得分 int speed; // 速度 public: Game() { score = 0; speed = 200; srand((unsigned)time(NULL)); food.x = rand() % WIDTH; food.y = rand() % HEIGHT; } // 构造函数,初始化得分、速度和食物位置 void show() { // 显示函数 system("cls"); // 清屏 for (int i = 0; i < WIDTH + 2; i++) { cout << "#"; } cout << endl; for (int i = 0; i < HEIGHT; i++) { cout << "#"; for (int j = 0; j < WIDTH; j++) { if (i == snake.getHead().y && j == snake.getHead().x) { cout << "O"; } else if (i == food.y && j == food.x) { cout << "@"; } else { bool flag = false; for (int k = 1; k < snake.length; k++) { if (i == snake.body[k].y && j == snake.body[k].x) { cout << "o"; flag = true; break; } } if (!flag) { cout << " "; } } } cout << "#" << endl; } for (int i = 0; i < WIDTH + 2; i++) { cout << "#"; } cout << endl; cout << "Score: " << score << endl; } void update() { // 更新函数 if (snake.eat(food)) { // 如果蛇吃到了食物 score += 10; speed -= 5; if (speed < 50) { speed = 50; } food.x = rand() % WIDTH; food.y = rand() % HEIGHT; } snake.move(); // 蛇移动 if (snake.isDead()) { // 如果蛇死亡 gameover(); } } void gameover() { // 游戏结束函数 cout << "Game Over!" << endl; cout << "Your Score: " << score << endl; system("pause"); exit(0); } void run() { // 运行函数 while (true) { show(); // 显示 Sleep(speed); // 延时 if (_kbhit()) { // 如果有键盘输入 switch (_getch()) { case 'w': case 'W': snake.changeDirection(UP); break; case 's': case 'S': snake.changeDirection(DOWN); break; case 'a': case 'A': snake.changeDirection(LEFT); break; case 'd': case 'D': snake.changeDirection(RIGHT); break; case 'p': case 'P': system("pause"); break; case 27: gameover(); break; } } update(); // 更新 } } };
int main() { Game game; game.run(); return 0;
原文地址: https://www.cveoy.top/t/topic/gIZF 著作权归作者所有。请勿转载和采集!