【c++】超好玩游戏

cpp 复制代码
#include <iostream>
#include <vector>
#include <conio.h>
#include <windows.h>
#include <time.h>

using namespace std;

// 游戏常量
const int WIDTH = 40;
const int HEIGHT = 20;
const int PADDLE_WIDTH = 5;

// 方向枚举
enum Direction { STOP = 0, LEFT, RIGHT };

class BreakoutGame {
private:
    int ballX, ballY;       // 球的位置
    int ballDirX, ballDirY; // 球的方向
    int paddleX;            // 挡板位置
    int score;              // 分数
    bool gameOver;          // 游戏结束标志
    vector<vector<bool>> bricks; // 砖块矩阵

public:
    BreakoutGame() {
        // 初始化游戏状态
        resetGame();
    }

    // 重置游戏
    void resetGame() {
        ballX = WIDTH / 2;
        ballY = HEIGHT - 5;
        ballDirX = 1;
        ballDirY = -1;
        paddleX = (WIDTH - PADDLE_WIDTH) / 2;
        score = 0;
        gameOver = false;
        
        // 初始化砖块
        bricks.resize(5, vector<bool>(WIDTH - 2, true));
    }

    // 绘制游戏界面
    void draw() {
        system("cls"); // 清屏

        // 绘制顶部边界
        for (int i = 0; i < WIDTH + 2; i++)
            cout << "#";
        cout << endl;

        // 绘制游戏区域
        for (int i = 0; i < HEIGHT; i++) {
            for (int j = 0; j < WIDTH; j++) {
                if (j == 0)
                    cout << "#"; // 左边界

                // 绘制球
                if (i == ballY && j == ballX)
                    cout << "O";
                // 绘制挡板
                else if (i == HEIGHT - 1 && j >= paddleX && j < paddleX + PADDLE_WIDTH)
                    cout << "=";
                // 绘制砖块
                else if (i < 5 && j > 0 && j < WIDTH - 1 && bricks[i][j-1])
                    cout << "■";
                else
                    cout << " ";

                if (j == WIDTH - 1)
                    cout << "#"; // 右边界
            }
            cout << endl;
        }

        // 绘制底部边界
        for (int i = 0; i < WIDTH + 2; i++)
            cout << "#";
        cout << endl;

        // 显示分数
        cout << "分数: " << score << endl;
        if (gameOver) {
            if (score == (WIDTH - 2) * 5)
                cout << "恭喜你赢了!按R重新开始,按Q退出" << endl;
            else
                cout << "游戏结束!按R重新开始,按Q退出" << endl;
        }
    }

    // 处理用户输入
    void input() {
        if (_kbhit()) {
            switch (_getch()) {
                case 'a':
                    if (paddleX > 0)
                        paddleX--;
                    break;
                case 'd':
                    if (paddleX + PADDLE_WIDTH < WIDTH)
                        paddleX++;
                    break;
                case 'q':
                    gameOver = true;
                    break;
                case 'r':
                    resetGame();
                    break;
                default:
                    break;
            }
        }
    }

    // 更新游戏状态
    void update() {
        if (gameOver) return;

        // 移动球
        ballX += ballDirX;
        ballY += ballDirY;

        // 检测左右边界碰撞
        if (ballX <= 0 || ballX >= WIDTH - 1)
            ballDirX *= -1;

        // 检测上边界碰撞
        if (ballY <= 0)
            ballDirY *= -1;

        // 检测下边界(游戏结束)
        if (ballY >= HEIGHT) {
            gameOver = true;
            return;
        }

        // 检测挡板碰撞
        if (ballY == HEIGHT - 1 && ballX >= paddleX && ballX < paddleX + PADDLE_WIDTH)
            ballDirY *= -1;

        // 检测砖块碰撞
        if (ballY < 5 && ballY >= 0 && ballX > 0 && ballX < WIDTH - 1) {
            int brickX = ballX - 1;
            int brickY = ballY;
            if (bricks[brickY][brickX]) {
                bricks[brickY][brickX] = false;
                score++;
                ballDirY *= -1;

                // 检查是否所有砖块都被消除
                bool allCleared = true;
                for (int i = 0; i < 5; i++) {
                    for (int j = 0; j < WIDTH - 2; j++) {
                        if (bricks[i][j]) {
                            allCleared = false;
                            break;
                        }
                    }
                    if (!allCleared) break;
                }
                if (allCleared)
                    gameOver = true;
            }
        }
    }

    // 运行游戏主循环
    void run() {
        while (!gameOver) {
            draw();
            input();
            update();
            Sleep(60); // 控制游戏速度
        }
    }
};

int main() {
    cout << "简易打砖块游戏" << endl;
    cout << "使用A和D键移动挡板,Q键退出,R键重新开始" << endl;
    cout << "按任意键开始游戏..." << endl;
    _getch();

    BreakoutGame game;
    game.run();

    return 0;
}
    

结语

希望你也能学会ヾ(◍°∇°◍)ノ゙
制作不易,点个赞吧!Thanks♪(・ω・)ノ

相关推荐
2601_9561219711 小时前
二分算法(知识点+题目)
c++·算法
蒙奇·D·路飞-13 小时前
OpenClaw:开源的《合金弹头》精神续作与终极本地部署指南
c++·开源·mfc
humors22113 小时前
支付宝游戏频道《灵画师》体验
游戏·介绍·体验·攻略·灵画师·试玩
小星星闪亮登场15 小时前
2026萌新联赛第三场-- (郑州轻工业大学)
数据结构·c++·经验分享·算法·贪心算法·排序算法·深度优先
梓䈑15 小时前
【用 Vibe Coding 实现的 C++17 在线判题系统】前端开发 + Web 自动化测试
前端·c++·ai编程
冻柠檬飞冰走茶15 小时前
PTA基础编程题目集 7-8超速判断(C++语言实现)
开发语言·数据结构·c++·算法
TunerT_TQ16 小时前
Valhalla 静态工程审阅 #018|MMCV 源码证据驱动评测【大厂开源基础设施特辑】
c++·开源·mfc·#计算机视觉·#商汤科技·#openmmlab·#静态源码审计
HMS Core16 小时前
基于人体骨骼点识别与跟踪,实现低时延体感游戏
游戏·华为·harmonyos
别动我齐刘海16 小时前
Day6 unitree_G1人形机器人GMR—— MotionInput
c语言·c++·人工智能·学习·机器学习·机器人·github
Henry Zhu12317 小时前
C++17 `weak_from_this` 详解:让对象安全地观察自己
c++