Qt_C++ 反转硬币游戏(5)放置银币并且实现单个硬币的翻转效果

读取数据文件将硬币按照规定状况放置:

读取数据文件,将数据文件中硬币放置情况赋值给成员变量二维数组gameArray,二维数组的值0或1即为硬币的状况

//初始化每个关卡的硬币状态
    dataconfig config;
    for(int i=0;i<4;++i)
    {
        for(int j=0;j<4;++j)
        {
            this->gameArray[i][j]=config.mData[this->gameNum][i][j];
        }
    }

实现翻转效果:通过设置flag的数值来实现

改变flag的数值,flag==1即为正面,进行正--反 翻转操作;flag==0,进行反--正 翻转操作。

翻转效果实际上为在同一位置连续读取不同的图片(连环画),设置一个定时器来控制每张图片显示的时间间隔,从而形成动态效果。

//实现翻转功能,改变flag
void myCoin::changeFlag()
{
    //在一个时间范围内进行图片读取,实现翻转效果
    if(this->flag==1)
    {
        time1->start(30);
        this->flag=false;
    }
    else
    {
        time2->start(30);
        this->flag=true;
    }
}
time1=new QTimer(this);//正--反
    time2=new QTimer(this);//反--正

    //正--反,定时器每发出一次信息就读取一张图片
    connect(time1,&QTimer::timeout,[=](){
        //重新在硬币上读取图片
        QPixmap pix;
        QString ss=QString(":/res/Coin000%1.png").arg(this->min++);
        pix.load(ss);

        this->setFixedSize(pix.width(),pix.height());
        this->setStyleSheet("QPushButton{border:0dx;}");
        this->setIcon(pix);
        this->setIconSize(QSize(pix.width(),pix.height()));

        //判断翻转过程所有图片是否全部读取完成
        if(this->min > this->max)
        {
            this->min=1;
            time1->stop();
        }

    });

    //反--正
    connect(time2,&QTimer::timeout,[=](){
        QPixmap pix;
        QString str=QString(":/res/Coin000%1.png").arg(this->max--);
        pix.load(str);

        this->setFixedSize(pix.width(),pix.height());
        this->setStyleSheet("QPushButton{border:0dx;}");
        this->setIcon(pix);
        this->setIconSize(QSize(pix.width(),pix.height()));

        if(this->max < this->min)
        {
            this->max=8;
            time2->stop();
        }
    });

在游戏界面,实现硬币具体功能(要确定每个硬币的初始状态flag)

 coin->flag=this->gameArray[i][j];//确定硬币的初始状态flag,如果不进行设置,反转硬币时会产生问题

            //实现翻转功能
            connect(coin,&myCoin::clicked,[=](){
                coin->changeFlag();
            });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值