用C++和EasyX图形库编写一个简单的打砖块游戏(下)

本文是用C++和EasyX图形库完成打砖块游戏的下篇,重点介绍小球的定义、碰撞处理,包括小球与砖块、木板的碰撞检测及边界反弹。通过代码实现游戏核心逻辑,并提供完整源码供下载。
摘要由CSDN通过智能技术生成

  大家好,我终于更新啦。昨天是国庆节最后一天,我也回到了学校,决定趁势把这篇文章更新完,结果也是花了一天多的时间才完成呢。
  回顾上篇,我们已经完成了砖块类和木板类的定义,现在只缺少一个活蹦乱跳的小球,这个小游戏就算完成了。话不多说,我们现在马上开始。
  对于一个小球的话,让我们先想想我们需要定义些什么,处理些什么。
  首先是小球的尺寸和位置,这个容易,用r表示小球半径,ballx,bally代表小球坐标,用addx,addy描述小球在xOy坐标系上的运动方向。另外在初始化小球坐标时,可以将小球摆在木板的上表面的中心位置处;
  其次要处理的问题,也是最核心的两个问题是,小球与砖块的碰撞、小球与木板的碰撞,具体计算的我们稍后讨论。
  以上便是我们定义小球类的思路。首先我们给出小球类的部分。  

class Ball
{
   
public:
    const int r = 8;        //定义球的半径
    const int speed = 1;    //定义球的飞行速度
    int ballx, bally;       //定义球的坐标
    int addx, addy;         //表示球的飞行方向

    //设置两个个标志量
    bool go;            //小球是否发射
    bool iscatch;       //木板是否捕捉到了小球

    //构造函数 使小球初始时位于木板中心上 参数是木板的宽
    Ball(int board_wide)
    {
        ballx = WINDOW_WIDE / 2;
        bally = WINDOW_HEIGHT - board_wide - r - 1;
        //初始时小球向右上方发射
        addx = 1;
        addy = -1;

        go = 0;         //初始化状态 小球未发射出去
        iscatch = 1;    //初始化状态 球被木板接住
    };
}

  类中定义的两个标志量,将会在接下来的成员函数中用到。
  下面我用一张图解释小球与砖块的碰撞关系,理解了这以后,小球和木板的碰撞同理。
  这里写图片描述

  除此之外,还有小球碰到边界后反弹,这个倒也容易。
  另外关于小球与木板或是砖块间的碰撞,大家可以多画图,多试验。下面的代码我自己确实摸索了很久,能有现在这个效果我也还是挺开心了。
  具体代码如下。

class Ball
{
public:
    const int r = 8;        //定义球的半径
    const int speed = 1;    //定义球的飞行速度
    int ballx, bally;       //定义球的坐标
    int addx, addy;         //表示球的飞行方向

    //设置两个个标志量
    bool go;            //小球是否发射
    bool iscatch;       //木板是否捕捉到了小球

    //构造函数  使小球初始化时位于木板中心上
    Ball(int board_wide)
    {
        ballx = WINDOW_WIDE / 2;
        bally = WINDOW_HEIGHT - board_wide - r - 1;
        //初始时小球向右上发射
        addx = 1;
        addy = -1;

        go = 0;         //初始化状态 小球未发射出去
        iscatch = 1;    //初始化状态 球被木板接住
    };

    //小球移动函数
    void Move(Bricks &brick, Board &board)
    {
        BeginBatchDraw();       //开启批量画图模式 目的是消除闪烁

        //处理边界:左,右,上边界要反弹
        if (ballx >= WINDOW_WIDE - r || ballx <= r) { addx *= -1; }
        if (bally <= r) { addy *= -1; }
        //若小球触及下边界 说明木板板没有接住小球 退出
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值