基于QT的猜数字小游戏

游戏界面
在这里插入图片描述

在这里插入图片描述

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;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值