Qt实践项目打地鼠之----随机弹出地鼠(三)[附GitHub项目下载地址]

本博客围绕地鼠游戏开发,介绍完成背景图布局后,进行随机弹出地鼠的程序编写。包括在myitem.cpp中定义设置图片路径函数、在场景控制图片切换,还提及在main.cpp中用随机种子实现随机产生图片,下一篇将改写鼠标形状。

本项目的下载地址:戳此访问

完成了背景图的布局,接下来要处理随机弹出地鼠的程序编写.

首先在myitem.cpp中定义一个设置图片路径的函数,如下:

void myitem::setPic(QString path)
{
    this->setPixmap(QPixmap(path));
}

进而我们可以在场景控制图片的切换.

随机产生图片我们调用C中的随机种子srand((unsigned)time(NULL),在main.cpp中添加

#include "mainwindow.h"
#include <QApplication>
#include<stdlib.h>//随机数种子所在的头文件
#include<time.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    
    srand((unsigned)time(NULL));//默认情况下随机种子来自系统时钟
    
    MainWindow w;
    w.show();

    return a.exec();
}

具体实现功能如下:

#include "myscene.h"
#include<stdlib.h>
myScene::myScene(QObject *parent) : QGraphicsScene(parent)
{
//    this->item = new myitem;//开辟堆空间
//    this->item->setPos(0,0);//设置坐标位置
//    this->addItem(this->item);//将item添加进场景中

//    this->item2 = new myitem;
//    this->item2->setPos(91,0);//设置第二个坐标位置
//    this->addItem(this->item2);//将item2添加进场景中
    for(int i = 0;i<16;i++)
    {
        this->item[i] = new myitem;
        this->item[i]->setPos(i/4 * this->item[i]->boundingRect().width(),
                              i%4 * this->item[i]->boundingRect().height());
        this->addItem(this->item[i]);
    }

    //this->item[4]->setPic(":/mouse/mouse.png");
    this->ptimer = new QTimer;
    connect(this->ptimer,&QTimer::timeout,this,&myScene::showMouse);
    this->ptimer->start(500);
}

void myScene::showMouse()
{
    //随机一个数字 0-15,使用C语言的设置
    int count = rand()%3+1; //(1~3个)
    //每次重置背景
       for(int i = 0; i < 16; i++){
      this->item[i]->setPic(":/background/bg1.png");
        }

    //随机出现地鼠图片
    for(int i = 0; i < count; i++){
        int index = rand()%16;
        this->item[index]->setPic(":/mouse/mouse.png");
     }
}

运行

                       

下一篇是鼠标形状的改写,敬请期待~ 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量子象限

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值