当前位置:首页 C++ > 正文

C++基于easyx图形库实现打砖块游戏

作者:野牛程序员:2023-07-14 14:35:11 C++阅读 2910

下面是使用EasyX图形库实现的打砖块游戏的C++代码示例:

#include <graphics.h>
#include <conio.h>

#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
#define PADDLE_WIDTH 80
#define PADDLE_HEIGHT 20
#define BALL_RADIUS 10
#define BRICK_ROWS 5
#define BRICK_COLUMNS 10

int main()
{
    initgraph(SCREEN_WIDTH, SCREEN_HEIGHT); // 初始化绘图窗口

    // 绘制挡板
    int paddleX = (SCREEN_WIDTH - PADDLE_WIDTH) / 2;
    int paddleY = SCREEN_HEIGHT - PADDLE_HEIGHT - 10;
    setfillcolor(YELLOW);
    bar(paddleX, paddleY, paddleX + PADDLE_WIDTH, paddleY + PADDLE_HEIGHT);

    // 绘制球
    int ballX = SCREEN_WIDTH / 2;
    int ballY = SCREEN_HEIGHT / 2;
    int ballSpeedX = 1;
    int ballSpeedY = 1;
    setfillcolor(RED);
    fillellipse(ballX, ballY, BALL_RADIUS, BALL_RADIUS);

    // 绘制砖块
    int brickWidth = SCREEN_WIDTH / BRICK_COLUMNS;
    int brickHeight = 20;
    for (int i = 0; i < BRICK_ROWS; i++)
    {
        for (int j = 0; j < BRICK_COLUMNS; j++)
        {
            int brickX = j * brickWidth;
            int brickY = i * brickHeight;
            setfillcolor(GREEN);
            bar(brickX, brickY, brickX + brickWidth, brickY + brickHeight);
        }
    }

    // 游戏主循环
    while (true)
    {
        cleardevice(); // 清空屏幕

        // 绘制挡板
        setfillcolor(YELLOW);
        bar(paddleX, paddleY, paddleX + PADDLE_WIDTH, paddleY + PADDLE_HEIGHT);

        // 绘制球
        setfillcolor(RED);
        fillellipse(ballX, ballY, BALL_RADIUS, BALL_RADIUS);

        // 绘制砖块
        for (int i = 0; i < BRICK_ROWS; i++)
        {
            for (int j = 0; j < BRICK_COLUMNS; j++)
            {
                int brickX = j * brickWidth;
                int brickY = i * brickHeight;
                setfillcolor(GREEN);
                bar(brickX, brickY, brickX + brickWidth, brickY + brickHeight);
            }
        }

        // 更新球的位置
        ballX += ballSpeedX;
        ballY += ballSpeedY;

        // 碰撞检测
        if (ballX <= 0 || ballX >= SCREEN_WIDTH - BALL_RADIUS)
        {
            ballSpeedX = -ballSpeedX; // 球与屏幕边界碰撞
        }
        if (ballY <= 0 || ballY >= SCREEN_HEIGHT - BALL_RADIUS)
        {
            ballSpeedY = -ballSpeedY; // 球与屏幕边界碰撞
        }
        if (ballY + BALL_RADIUS >= paddleY && ballX >= paddleX && ballX <= paddleX + PADDLE_WIDTH)
        {
            ballSpeedY = -ballSpeedY; // 球与挡板碰撞
        }

        // 检测球与砖块的碰撞
        for (int i = 0; i < BRICK_ROWS; i++)
        {
            for (int j = 0; j < BRICK_COLUMNS; j++)
            {
                int brickX = j * brickWidth;
                int brickY = i * brickHeight;
                if (ballY - BALL_RADIUS <= brickY + brickHeight && ballY + BALL_RADIUS >= brickY &&
                    ballX >= brickX && ballX <= brickX + brickWidth)
                {
                    ballSpeedY = -ballSpeedY; // 球与砖块碰撞
                }
            }
        }

        Sleep(10); // 稍微延迟一下,控制游戏速度
    }

    closegraph(); // 关闭绘图窗口
    return 0;
}

这段代码使用EasyX图形库创建了一个窗口,并在窗口中绘制了挡板、球和砖块。游戏主循环中,球的位置不断更新,并进行碰撞检测来处理球与边界、挡板、砖块的碰撞。可以根据需要对代码进行修改和扩展。记得在编译时链接EasyX库文件,并将对应的头文件和库文件放置在正确的位置。

野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击