c++贪吃蛇游戏 DEV

使用DEV-C++构建C++贪吃蛇游戏
本文档详细介绍了如何利用DEV-C++ IDE来开发一款C++实现的贪吃蛇游戏。通过这个项目,读者将学习到C++的基础语法、控制结构以及游戏编程的基本概念。

c++贪吃蛇 DEV

DEV-C++

#include <iostream>
#include <list>
#include <cstdio>
#include <string>
#include <vector>
#include <ctime>
#include <algorithm>
#include <conio.h>
#include <windows.h>
using namespace std;
class Node {
   
    
public:
    int x, y;
    Node(int x1, int y1); 
};

class UserData {
   
    
public:
    string name;
    long long score;
    int gt;
    int gr; 
    UserData(string s, long long sc,int gametime,int grade); 
    friend bool operator < (UserData a, UserData b); 
};

#define RIGHT 0x4d
#define LEFT 0x4b  
#define UP 0x48  
#define DOWN 0x50 
#define YELLOW FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define CYAN FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define ORANGE FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define PURPLE FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY
#define RED  FOREGROUND_RED | FOREGROUND_INTENSITY
const int STARTX = 8; 
const int STARTY = 4; 
const int RANGEX = 60; 
const int RANGEY = 20;
int point=10; 
const int ENDX = STARTX + RANGEX; 
const int ENDY = STARTY + RANGEY; 
bool isSnake[RANGEY + 10 ][RANGEX + 10];
int speed; 
int sysj;
int gametime;
list<Node> snake;
int curDiraction; //蛇的当前前进方向, 1上, 2下, 3左, 4右
int score; //当前分数
int grade;
int snakeLen; //蛇的长度
int foodx, foody; //食物坐标
int gox, goy; //蛇头坐标
int mj;
void GoTo(short x, short y); //定位光标
void DrawBoard(); //绘制边框
void ShowInformation(); //展示游戏信息
void Init(); //初始化游戏
void RunSnake(int x, int y); //绘制蛇身
void Try(int& x, int& y); //试走
bool IsGoodCoord(int x, int y); //前进坐标是否合法
void AddFood(); 
void EartFood();
void InitSnake(); 
bool EndGame(); 
bool StartGame();
bool GameMenu(); //游戏菜单
void ShowRanking(); //排行榜
void ShowAbout(); //相关信息
void InputData(); //输入玩家名字

int main() {
   
   
    system("title 贪吃蛇小游戏v.1.5.5.3 by 赖以凡");
    while (true) {
   
   
        if (!GameMenu()) return 0;
    }
    return 0;
}

Node::Node(int x1, int y1) {
   
    //构造Node对象
    x = x1; y = y1; 
}

int SuiJi()
{
   
   
srand((unsigned)time(NULL));
return (rand()*rand()+rand()*rand())%14;
}

bool operator < (UserData a, UserData b) {
   
    //重载运算符,按分数由大到小排列
    if(a.score != b.score)
    return a.score > b.score;
    if(a.gt !=b.gt)
    return a.gt > b.gt;
    else
    return a.gr > b.gr;
}
UserData::UserData(string s, long long sc,int gametime_,int _grade) {
   
    //构造UserData对象
    name = s; score = sc; gt=gametime_; gr=_grade;
}

void color(WORD A)
{
   
   
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), A);
} 

void Color(int a)
{
   
   
    switch (a%4)
    {
   
   
        case 0:color(RED);break;
        case 1:color(CYAN);break;
        case 2:color(YELLOW);break;
        case 3:color(PURPLE);break
开发一个贪吃蛇游戏可以是一个非常有趣且具有挑战性的项目,尤其是在 Dev-C++ 这样的集成开发环境中使用 C++ 编写。以下是一个详细的教程,帮助你一步步实现贪吃蛇游戏。 ### 3.1 环境配置 首先,确保你已经安装了 Dev-C++。如果你还没有安装,可以从以下链接下载官方版本: - [Orwell Dev-C++ 5.11](https://appzip.cn/devcpp) [^3] 安装完成后,打开 Dev-C++ 并确保编译器设置为支持 C++11 标准。这是非常重要的,因为我们将使用一些 C++11 的特性,如 `std::vector` 和 `std::unique_ptr`。 要设置 C++11 标准: 1. 打开 Dev-C++。 2. 点击菜单栏的 `工具 (Tools)`。 3. 选择 `编译器选项 (Compiler Options)`。 4. 在 `编译器 (Compiler)` 选项卡中,勾选 `-std=c++11`。 5. 点击 `确定` 保存设置。 ### 3.2 创建项目 1. 打开 Dev-C++,点击 `文件 (File)` -> `新建 (New)` -> `项目 (Project)`。 2. 选择 `控制台应用 (Console Application)`,并选择 C++ 作为语言。 3. 输入项目名称(例如 `SnakeGame`),然后点击 `确定`。 ### 3.3 项目结构 为了保持代码的组织性,我们可以将项目分为几个文件: - `main.cpp`:主程序入口。 - `Snake.h` / `Snake.cpp`:贪吃蛇的逻辑实现。 - `Game.h` / `Game.cpp`:游戏主循环和绘图逻辑。 - `Input.h` / `Input.cpp`:处理用户输入。 ### 3.4 实现贪吃蛇逻辑 #### 3.4.1 定义蛇的结构 在 `Snake.h` 中定义蛇的基本结构: ```cpp #ifndef SNAKE_H #define SNAKE_H #include <vector> #include <utility> enum Direction { STOP = 0, LEFT, RIGHT, UP, DOWN }; class Snake { public: Snake(int x, int y); void Move(); void ChangeDirection(Direction dir); std::vector<std::pair<int, int>> GetBody() const; std::pair<int, int> GetHead() const; void Grow(); private: Direction direction; std::vector<std::pair<int, int>> body; }; #endif // SNAKE_H ``` 在 `Snake.cpp` 中实现这些方法: ```cpp #include "Snake.h" Snake::Snake(int x, int y) { body.push_back({x, y}); direction = STOP; } void Snake::Move() { std::pair<int, int> newHead = body.front(); switch (direction) { case LEFT: newHead.second -= 1; break; case RIGHT: newHead.second += 1; break; case UP: newHead.first -= 1; break; case DOWN: newHead.first += 1; break; default: break; } body.insert(body.begin(), newHead); if (direction != STOP) { body.pop_back(); } } void Snake::ChangeDirection(Direction dir) { direction = dir; } std::vector<std::pair<int, int>> Snake::GetBody() const { return body; } std::pair<int, int> Snake::GetHead() const { return body.front(); } void Snake::Grow() { body.push_back(body.back()); } ``` #### 3.4.2 游戏主逻辑 在 `Game.h` 中定义游戏的基本逻辑: ```cpp #ifndef GAME_H #define GAME_H #include "Snake.h" #include <vector> class Game { public: Game(int width, int height); void Start(); void Update(); bool IsRunning() const; void Draw() const; private: int width, height; Snake snake; std::pair<int, int> food; bool running; void PlaceFood(); }; #endif // GAME_H ``` 在 `Game.cpp` 中实现游戏逻辑: ```cpp #include "Game.h" #include <conio.h> #include <windows.h> #include <cstdlib> #include <ctime> Game::Game(int w, int h) : width(w), height(h), snake(w / 2, h / 2), running(true) { srand(time(0)); PlaceFood(); } void Game::Start() { while (running) { if (_kbhit()) { char ch = _getch(); switch (ch) { case 'a': snake.ChangeDirection(LEFT); break; case 'd': snake.ChangeDirection(RIGHT); break; case 'w': snake.ChangeDirection(UP); break; case 's': snake.ChangeDirection(DOWN); break; case 'q': running = false; break; } } Update(); Draw(); Sleep(100); // 控制游戏速度 } } void Game::Update() { snake.Move(); auto head = snake.GetHead(); // 检查是否吃到食物 if (head == food) { snake.Grow(); PlaceFood(); } // 检查是否撞墙或撞到自己 if (head.first < 0 || head.first >= height || head.second < 0 || head.second >= width) { running = false; } for (size_t i = 1; i < snake.GetBody().size(); ++i) { if (head == snake.GetBody()[i]) { running = false; } } } bool Game::IsRunning() const { return running; } void Game::Draw() const { system("cls"); for (int i = 0; i < width + 2; ++i) std::cout << "#"; std::cout << std::endl; for (int i = 0; i < height; ++i) { std::cout << "#"; for (int j = 0; j < width; ++j) { bool printed = false; for (const auto& part : snake.GetBody()) { if (part.first == i && part.second == j) { std::cout << "O"; printed = true; break; } } if (food.first == i && food.second == j) { std::cout << "F"; printed = true; } if (!printed) std::cout << " "; } std::cout << "#" << std::endl; } for (int i = 0; i < width + 2; ++i) std::cout << "#"; std::cout << std::endl; } void Game::PlaceFood() { food = {rand() % height, rand() % width}; } ``` #### 3.4.3 主程序入口 在 `main.cpp` 中启动游戏: ```cpp #include "Game.h" int main() { Game game(20, 20); // 创建一个 20x20 的游戏窗口 game.Start(); return 0; } ``` ### 3.5 编译与运行 1. 在 Dev-C++ 中点击 `运行 (Run)` 或 `编译并运行 (Compile and Run)`。 2. 游戏窗口将在控制台中显示,使用 `W`, `A`, `S`, `D` 控制方向,按 `Q` 退出游戏。 ### 3.6 扩展功能 你可以进一步扩展游戏功能,例如: - 添加分数系统。 - 增加难度等级。 - 添加音效和背景音乐。 - 使用图形库(如 SFML 或 SDL)实现图形界面。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值