此前已经实现单个硬币的翻转效果,现在实现目标硬币周围硬币的翻转:
重新创建一个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;
}
}
}
});
});
}
}