游戏界面
ui界面
头文件
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include<QString>
#include <QWidget>
#include<QMovie>
#include<QPushButton>
namespace Ui {
class MyWidget;
}
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = nullptr);
void entergame();
void boxadditem();
void closegame();
void dealnum();
void tishi();
void deletestr();
~MyWidget();
protected:
void timerEvent(QTimerEvent *e);
private:
Ui::MyWidget *ui;
int gametime;
QString randstr;
int gametimeid;
int overtimeid;
int wintimeid;
QString resultstr;
QMovie shibai;
QMovie win;
};
#endif // MYWIDGET_H
源文件
#include "mywidget.h"
#include "ui_mywidget.h"
#include<QMessageBox>
#include<QTimer>
#include<QTime>
#include<QString>
#include<QtDebug>
#include<QObject>
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
setWindowTitle("猜数字游戏");
ui->title->setStyleSheet("QLabel{font-size:40px;"
"font-family:yahei;}");
//设置开始页面
ui->stackedWidget->setCurrentWidget(ui->start);
this->boxadditem();
//设置失败动画
shibai.setFileName("://image/cat.gif");
ui->labelover->setMovie(&shibai);
ui->labelover->setScaledContents(true);
//设置成功动画
win.setFileName("://image/cat.gif");
ui->labelwin->setMovie(&win);
ui->labelwin->setScaledContents(true);
//设置按钮功能
connect(ui->pushButton_13,&QPushButton::pressed,this,&MyWidget::entergame);
connect(ui->pushButton_14,&QPushButton::pressed,this,&MyWidget::closegame);
connect(ui->pushButton,&QPushButton::clicked,this,&MyWidget::dealnum);
connect(ui->pushButton_2,&QPushButton::clicked,this,&MyWidget::dealnum);
connect(ui->pushButton_3,&QPushButton::clicked,this,&MyWidget::dealnum);
connect(ui->pushButton_4,&QPushButton::clicked,this,&MyWidget::dealnum);
connect(ui->pushButton_5,&QPushButton::clicked,this,&MyWidget::dealnum);
connect(ui->pushButton_6,&QPushButton::clicked,this,&MyWidget::deletestr);
connect(ui->pushButton_7,&QPushButton::clicked,this,&MyWidget::dealnum);
connect(ui->pushButton_8,&QPushButton::clicked,this,&MyWidget::dealnum);
connect(ui->pushButton_9,&QPushButton::clicked,this,&MyWidget::dealnum);
connect(ui->pushButton_10,&QPushButton::clicked,this,&MyWidget::dealnum);
connect(ui->pushButton_11,&QPushButton::clicked,this,&MyWidget::dealnum);
connect(ui->pushButton_12,&QPushButton::clicked,this,&MyWidget::tishi);
}
//定时器
void MyWidget::timerEvent(QTimerEvent *e)
{
if(e->timerId()==this->gametimeid)
{
qDebug()<<"定时中";
gametime--;
ui->progressBar_2->setValue(gametime);//更新时间
//判断时间是否没有
if(gametime==0)
{
killTimer(gametimeid);//关闭游戏定时
//失败提示
QMessageBox::warning(this,"失败","时间已经到了");
//开启失败动画
shibai.start();
ui->stackedWidget->setCurrentWidget(ui->pageover);
//开启失败动画播放定时
overtimeid=startTimer(5000);
}
}
else if(e->timerId()==overtimeid)
{
//关闭失败动画,关闭失败定时,切换至主页面
shibai.stop();
killTimer(overtimeid);
ui->stackedWidget->setCurrentWidget(ui->start);
}
else if(e->timerId()==wintimeid)
{
//关闭成功动画,关闭成功定时,切换至主页面
win.stop();
killTimer(wintimeid);
ui->stackedWidget->setCurrentWidget(ui->start);
}
}
//处理数据函数
void MyWidget::dealnum()
{
//选择接收者
QObject *Mysender=sender();
//将接收者转换为按钮类型
QPushButton *p=(QPushButton*)Mysender;
if(p!=NULL)//判断是否有按钮摁下
{
//获取按下按钮的文本信息
QString numstr=p->text();
qDebug()<<p->text();
//更新结果
resultstr+=numstr;
qDebug()<<resultstr;
//当没有数时使其不能输入0
if(resultstr.size()==1&&resultstr=="0")
{
resultstr.clear();
}
//如果输入位数大于4
if(resultstr.size()>4)
{
resultstr.clear();
}
//输入数字小于四位时
if(resultstr.size()<=4)
{
ui->textEdit->setText(resultstr);//显示当前结果
if(resultstr>randstr)
{
ui->textEdit->append("数字大了点");
}
else if(resultstr<randstr)
{
ui->textEdit->append("数字小了点");
}
else
{
ui->textEdit->append("恭喜你猜对了");
killTimer(gametimeid);//关闭游戏定时
//开启成功提示
QMessageBox::information(this,"win","恭喜猜对了");
//开启成功动画
win.start();
ui->stackedWidget->setCurrentWidget(ui->pagewin);
wintimeid=startTimer(5000);//开启成功动画定时
resultstr.clear();//清空当前结果
}
}
}
}
//删除输入函数
void MyWidget::deletestr()
{
//如果为一位直接清空
if(resultstr.size()==1)
{
resultstr.clear();
ui->textEdit->clear();
}
else
{
resultstr.chop(1);//使最后一位变为/0
ui->textEdit->setText(resultstr);
}
}
//进去游戏界面
void MyWidget::entergame()
{
//获取选择的时间并转换为整型
gametime=ui->select->currentText().toInt();
ui->stackedWidget->setCurrentWidget(ui->gaming);//切换游戏界面
//生成随机数
int num;
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));//随机数种子
while((num = qrand()%10000)<999);//保证随机数为四位
randstr=QString::number(num);
qDebug()<<gametime;
qDebug()<<num;
//设置最大最小和当前值
ui->progressBar_2->setMaximum(gametime);
ui->progressBar_2->setMinimum(0);
ui->progressBar_2->setValue(gametime);
//开启游戏定数
gametimeid=0;
gametimeid=startTimer(1000);
qDebug()<<"定时开始";
//清空结果
resultstr.clear();
ui->textEdit->clear();
}
//确定是否退出游戏
void MyWidget::closegame()
{
int ret = QMessageBox::question(this,"question","请确认是否退出游戏?");
if(ret==QMessageBox::Yes)
{
close();
}
}
//设置提示文本
void MyWidget::tishi()
{
resultstr.clear();
QString str="随机数为:"+randstr;
ui->textEdit->setText(str);
}
//设置时间选项
void MyWidget::boxadditem()
{
ui->select->addItem("20");
ui->select->addItem("30");
ui->select->addItem("40");
ui->select->addItem("50");
ui->select->addItem("60");
ui->select->addItem("70");
ui->select->addItem("80");
ui->select->addItem("90");
ui->select->addItem("100");
}
MyWidget::~MyWidget()
{
delete ui;
}