关键代码
#include "dialog.h"
#include "ui_dialog.h"
#include <QElapsedTimer>
#include "QTime"
#include <QIcon>
#include "QDebug"
#include"QRandomGenerator"
#include "homepage.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
score=0;
m=0;
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::creat()//创建生成的方块
{
for(int i=0;i<5;i++)
{
int n=QRandomGenerator::global()->bounded(3);
for(int j=0;j<4;j++)
{
Kuai[i][j].bto.setParent(this);
Kuai[i][j].bto.setGeometry(j*100,i*150-150,100,150);
if(n==j)
{
Kuai[i][j].bto.setIcon(QIcon(":/image/apic27859.webp"));
//bto[j].adjustSize();
Kuai[i][j].bto.setStyleSheet("border-image: url(:/image/apic27859.webp)");//设置按钮的图片的样式
Kuai[i][j].flag=1;
}
else {
Kuai[i][j].bto.setIcon(QIcon(":/image/xxx.webp"));
//bto[j].adjustSize();
Kuai[i][j].bto.setStyleSheet("border-image: url(:/image/xxx.webp)");//设置按钮的图片的样式
Kuai[i][j].flag=0;
}
Kuai[i][j].bto.setCheckable(true);
Kuai[i][j].bto.setEnabled(true);
Kuai[i][j].bto.show();
QCoreApplication::processEvents();
connect(&(Kuai[i][j].bto),SIGNAL(clicked()),&(Kuai[i][j]),SLOT(set()));
connect(&(Kuai[i][j].bto),SIGNAL(clicked()),&(Kuai[i][j]),SIGNAL(over()));
connect(&(Kuai[i][j]),SIGNAL(over()),this,SLOT(set()));
}
}
}
void Dialog::move()//方块移动
{
creat();
while(1)
{
QTime time;
time.start();
while(time.elapsed() <20-int(score/5))
{//等待时间流逝1秒钟
QCoreApplication::processEvents(); //不停地处理事件,让程序保持响应
}
for(int i=0;i<5;i++)
{
int n=QRandomGenerator::global()->bounded(3);
for(int j=0;j<4;j++)
{
if(Kuai[i][j].O==1)
{
ui->label_2->setText("Game Over");
return ;
}
int x=Kuai[i][j].bto.pos().x();
int y=Kuai[i][j].bto.pos().y()+1;
Kuai[i][j].bto.move(x,y);//移动
QCoreApplication::processEvents();
if(y==601)
{
Kuai[i][j].bto.move(x,-150);
if(Kuai[i][j].flag==1)
{
ui->label_2->setText("Game Over");
return ;
}
if(n==j)
{
Kuai[i][j].bto.setIcon(QIcon(":/image/apic27859.webp"));
//bto[j].adjustSize();
Kuai[i][j].bto.setStyleSheet("border-image: url(:/image/apic27859.webp)");//设置按钮的图片的样式
Kuai[i][j].flag=1;
}
else
{
Kuai[i][j].bto.setIcon(QIcon(":/image/xxx.webp"));
//bto[j].adjustSize();
Kuai[i][j].bto.setStyleSheet("border-image: url(:/image/xxx.webp)");//设置按钮的图片的样式
Kuai[i][j].flag=0;
}
}
}
}
}
}
void Dialog::set()
{
this->score++;
char s[10];
sprintf(s,"分数:%d",score/2);
ui->label->setText(s);
}
void Dialog::on_pushButton_clicked()
{
close();
Dialog *d=new Dialog;
d->show();
d->move();
}
void Dialog::on_pushButton_2_clicked()
{
close();
homepage *home=new homepage;
home->show();
}
游戏效果
总结:
我是设计了一个5X4大小的数组存储按钮用作模拟方块,当第一组方块到达底部之后在再调整坐标到顶部,本来准备使用不断生成方块的方法,但是线程资源调用的时候有问题(技术不到位),最后写出了这个只有基础功能的黑白块。 关于图片是网上随便找到(图片侵删)。