读取数据文件将硬币按照规定状况放置:
读取数据文件,将数据文件中硬币放置情况赋值给成员变量二维数组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();
});