Qt_C++(6)硬币周围实现翻转,成功/失败图片加载(倒计时模块的引入)

此前已经实现单个硬币的翻转效果,现在实现目标硬币周围硬币的翻转:

        重新创建一个mycoin coinBtn[4][4]用来对目标硬币coin的周围硬币进行翻转;

并且在所有翻转动画进行时不能读取此时多余的鼠标点击效果(设计鼠标事件)

   //对目标硬币四周的硬币进行操作
            coinBtn[i][j]=coin;

            //实现翻转功能,实现目标硬币周围硬币的翻转
            connect(coin,&myCoin::clicked,[=](){
                //点击硬币,将其他硬币禁止知道反转完毕
                for(int i=0;i<4;++i)
                {
                    for(int j=0;j<4;++j)
                    {
                        this->coinBtn[i][j]->isAnimation=true;
                    }
                }

                coin->changeFlag();
                this->gameArray[i][j]=this->gameArray[i][j]==1?0:1;//更新硬币状态

                //点击目标硬币,周围硬币延时后翻转
                QTimer::singleShot(300,this,[=](){
                    if(coin->posX+1<4)
                    {
                        coinBtn[coin->posX+1][coin->posY]->changeFlag();
                        this->gameArray[coin->posX+1][coin->posY]=this->gameArray[coin->posX+1][coin->posY]==1?0:1;
                    }
                    if(coin->posY+1<4)
                    {
                        coinBtn[coin->posX][coin->posY+1]->changeFlag();
                        this->gameArray[coin->posX][coin->posY+1]=this->gameArray[coin->posX][coin->posY+1]==1?0:1;
                    }
                    if(coin->posX-1>=0)
                    {
                        coinBtn[coin->posX-1][coin->posY]->changeFlag();
                        this->gameArray[coin->posX-1][coin->posY]=this->gameArray[coin->posX-1][coin->posY]==1?0:1;
                    }
                    if(coin->posY-1>=0)
                    {
                        coinBtn[coin->posX][coin->posY-1]->changeFlag();
                        this->gameArray[coin->posX][coin->posY-1]=this->gameArray[coin->posX][coin->posY-1]==1?0:1;
                    }

                    //点击硬币,将其他硬币禁止直到反转完毕
                    for(int i=0;i<4;++i)
                    {
                        for(int j=0;j<4;++j)
                        {
                            this->coinBtn[i][j]->isAnimation=false;
                        }
                    }


                    //判断游戏是否成功
                    //设置是否游戏成功的标志位
                    this->isWin=true;

                    for(int i=0;i<4;++i)
                    {
                        for(int j=0;j<4;++j)
                        {
                            if(this->gameArray[i][j]!=1)
                            {
                                this->isWin=false;
                                break;
                            }
                        }
                    }

                    if(this->isWin)
                    {
                        qDebug()<<"游戏成功";

                        //显示游戏成功的图片
                        QPropertyAnimation * animation=new QPropertyAnimation(label1,"geometry");
                        animation->setDuration(1000);
                        animation->setStartValue(QRect(label1->x(),label1->y(),label1->width(),label1->height()));
                        animation->setEndValue(QRect(label1->x(),label1->y()+144,label1->width(),label1->height()));
                        animation->setEasingCurve(QEasingCurve::OutBounce);
                        animation->start();

                        //游戏成功禁用所有按钮
                        for(int i=0;i<4;++i)
                        {
                            for(int j=0;j<4;++j)
                            {
                                this->coinBtn[i][j]->coinBtnBan=true;
                            }
                        }

                    }


                });

            });


        }
    }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值