目录

1.需要的知识点:

2.工程创建好后,先在设计器中实现界面

3.代码实现部分

​编辑


使用QtCreator 完成简单小游戏-猜数字游戏实现效果如下:

1.需要的知识点:

  • QLabel显示图片,动图
  • 常见控件的使用
  • 信号与槽
  • QStackedWidget 实现页面切换
  • 定时器的使用

2.工程创建好后,先在设计器中实现界面

界面主要需要4个页面 :(使用QStackedWidget实现页面切换)

  • 首页

  • 游戏页(在界面可以添加widget进行小布局,再进行大布局)
  •  
  • 游戏胜利界面(使用Label添加动画)

  •  游戏失败界面

3.代码实现部分

  • .h文件
  • #ifndef MYWIDGET_H
    #define MYWIDGET_H
    #include <QString>
    #include <QWidget>
    #include <QMovie>
    #include <QPushButton>namespace Ui {
    class MyWidget;
    }class MyWidget : public QWidget
    {Q_OBJECTpublic:explicit MyWidget(QWidget *parent = 0);~MyWidget();//自定义槽函数void dealNum();void boxAddItem();private slots:void on_pushButtonStart_clicked();void on_pushButtonEnd_clicked();void on_pushButtonDel_clicked();void on_pushButtonEnter_clicked();
    protected://定时器事件,为虚函数void timerEvent(QTimerEvent *e);private:Ui::MyWidget *ui;int gameTime;QString randStr;//随机数int gameTimeId;//游戏时间定时器IDint overTimeId;//失败动画定时器IDint winTimeId;//胜利动画定时器IDQString resultStr;//结果数QMovie overMovie;//失败动画QMovie winMovie;//胜利动画
    };#endif // MYWIDGET_H
    
  • .cpp文件
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QMessageBox>
#include <QTime>
#include <QString>
#include <QDebug>
#include <QPushButton>
#include <QTimer>
#include <QObject>
MyWidget::MyWidget(QWidget *parent) :QWidget(parent),ui(new Ui::MyWidget)
{ui->setupUi(this);//显示第一个页面(设置页面)//设置固定大小setFixedSize(600,600);//设置图标setWindowIcon(QIcon(":/images/guess.jpg"));//设置标题setWindowTitle("猜数字游戏");
//    ui->title->setStyleSheet("QLabel{font-size:40px;"
//                             "font-family:yahei;}");ui->stackedWidget->setCurrentWidget(ui->pageSet);this->boxAddItem();// this->boxadditem();//初始化数据//失败动画overMovie.setFileName(":/images/fighting.gif");ui->labelOver->setMovie(&overMovie);//给标签设置动画ui->labelOver->setScaledContents("true");//让标签自适应动画大小//胜利动画winMovie.setFileName(":/images/praise.gif");ui->labelWin->setMovie(&winMovie);ui->labelWin->setScaledContents("true");
//猜数字游戏界面相应设置//数字按钮都连接同一个槽connect(ui->pushButton0,&QPushButton::clicked,this,&MyWidget::dealNum);connect(ui->pushButton1,&QPushButton::clicked,this,&MyWidget::dealNum);connect(ui->pushButton2,&QPushButton::clicked,this,&MyWidget::dealNum);connect(ui->pushButton3,&QPushButton::clicked,this,&MyWidget::dealNum);connect(ui->pushButton4,&QPushButton::clicked,this,&MyWidget::dealNum);connect(ui->pushButton5,&QPushButton::clicked,this,&MyWidget::dealNum);connect(ui->pushButton6,&QPushButton::clicked,this,&MyWidget::dealNum);connect(ui->pushButton7,&QPushButton::clicked,this,&MyWidget::dealNum);connect(ui->pushButton8,&QPushButton::clicked,this,&MyWidget::dealNum);connect(ui->pushButton9,&QPushButton::clicked,this,&MyWidget::dealNum);
}
//定时器void MyWidget::timerEvent(QTimerEvent *e){if(e->timerId()==this->gameTimeId){qDebug()<<"定时中";gameTime--;ui->progressBar->setValue(gameTime);//更新时间//判断时间是否没有if(gameTime==0){killTimer(gameTimeId);//关闭游戏定时//失败提醒QMessageBox::warning(this,"挑战失败","时间已经到了");//开启失败动画overMovie.start();ui->stackedWidget->setCurrentWidget(ui->pageover);//开启失败动画播放定时overTimeId=startTimer(5000);}}
else if(e->timerId()==overTimeId){//关闭失败动画,关闭失败定时,切换至主页面overMovie.stop();killTimer(overTimeId);ui->stackedWidget->setCurrentWidget(ui->pageSet);}else if(e->timerId()==winTimeId){//关闭成功动画,关闭成功定时,切换至主页面winMovie.stop();killTimer(winTimeId);ui->stackedWidget->setCurrentWidget(ui->pageSet);}}//处理数据函数void MyWidget::dealNum(){//选择接收者QObject *Mysender = sender();//多个信号连接到同一个槽时,使用sender//将接收者转化为按钮类型QPushButton *p = (QPushButton *)Mysender;if(p!=NULL)//判断是否有按钮摁下{//获取按下按钮的文本信息QString numstr = p->text();qDebug()<<p->text();//更新结果resultStr+=numstr;qDebug()<<resultStr;//当没有数时使其不能输入0if(resultStr.size()==1&&resultStr=="0"){resultStr.clear();}//如果输入位数大于4if(resultStr.size()>4){resultStr.clear();}//输入数字小于4位时if(resultStr.size()<=4){ui->textEdit->setText(resultStr);//显示当前结果if(resultStr.size() == 4){if(resultStr>randStr){ui->textEdit->append("数字大了一些");}else if(resultStr<randStr){ui->textEdit->append("数字小了一些");}else{ui->textEdit->append("恭喜你,猜对了!");killTimer(gameTimeId);//关闭游戏定时//开启成功动画winMovie.start();ui->stackedWidget->setCurrentWidget(ui->pagewin);winTimeId=startTimer(5000);//开启成功动画定时resultStr.clear();//清空当前结果}}}}}
//删除输入函数
void MyWidget::on_pushButtonDel_clicked()
{//如果为一位直接清空if(resultStr.size()==1){resultStr.clear();ui->textEdit->clear();}else{resultStr.chop(1);//截掉最后一位字符// resultStr[resultStr.size() -1] = '\0';ui->textEdit->setText(resultStr);}
}
//进入游戏界面
void MyWidget::on_pushButtonStart_clicked()
{//获取下拉框的时间 .toInt(): 字符串转换为 intgameTime = ui->comboBox->currentText().toInt();qDebug()<<gameTime <<"s";ui->stackedWidget->setCurrentWidget(ui->gaming);//切换到游戏界面//生成随机数int num;//以从0时0分0秒到现在的秒数为种子qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));while((num = qrand()%10000)<999);//保证随机数为四位randStr = QString::number(num);//QString::number(),将数字转换为QString类型,num 为待转换数字,默认十进制方式显示qDebug()<<num;
//设置最大、最小和当前值ui->progressBar->setMaximum(gameTime);ui->progressBar->setMinimum(0);ui->progressBar->setValue(gameTime);//启动定时器gameTimeId = 0;gameTimeId = startTimer(1000);//以1000毫秒(1秒)作为时间间隔qDebug()<<"定时开始";//清空结果resultStr.clear();ui->textEdit->clear();
}
//确认是否退出游戏void MyWidget::on_pushButtonEnd_clicked()
{int ret = QMessageBox::question(this,"question","请确认是否退出游戏?");if(ret==QMessageBox::Yes){close();}
}
//设置提示文本void MyWidget::on_pushButtonEnter_clicked(){resultStr.clear();QString str ="随机数为:"+randStr;ui->textEdit->setText(str);}//设置时间选项void MyWidget::boxAddItem(){ui->comboBox->addItem("20");ui->comboBox->addItem("30");ui->comboBox->addItem("40");ui->comboBox->addItem("50");ui->comboBox->addItem("60");ui->comboBox->addItem("70");ui->comboBox->addItem("80");ui->comboBox->addItem("90");ui->comboBox->addItem("100");}
MyWidget::~MyWidget()
{delete ui;
}

Qt小游戏-猜数字游戏(使用设计器完成界面设计)相关推荐

  1. CASIO 5800P计算器游戏--猜数字游戏

    CASIO 5800P 计算器游戏--猜数字游戏原代码 我编的计算器小游戏--猜数字游戏 LbI I↙ "xxGUESS NUMBERxx xPROGRAMMER:JCHx -------- ...

  2. C语言经典小游戏---猜数字游戏 (包含C语言中如何实现随机数的生成)

    题目描述:输入1-100之间的数字,进行猜数字游戏,猜大猜小有提示,直至才对为止,游戏可以重复游玩. 算法思路: 1.用void函数分别写出菜单程序与游戏进程程序. 2.用switch-case-de ...

  3. C语言入门小游戏——猜数字游戏(详解)

    大家好,我是十一,今天给大家带来"猜数字游戏"的代码和讲解. 目录 前言 基本流程 1.打印菜单 1.1主函数逻辑 2.生成随机数 随机数生成结果 2.1srand函数 2.2时间 ...

  4. C语言 入门级游戏 ——猜数字游戏

      作为一个入门级的,学完循环和函数就可以敲打出来的小游戏:相信都是大家心中不可磨灭的回忆                                                        ...

  5. QT学习之QT小游戏-----猜数字游戏

    经过几天的qt视频学习,基本掌握了时间,信号和槽以及qt定时器的使用,还有QT UI设计器的一些布局,自己根据上课流程,写了一个小游戏,基本还算可以.ui布局基本都是使用设计器完成的,下面是部分源代码 ...

  6. 微信小程序——猜数字游戏小案例

    文章目录 项目展示 项目链接 项目设计 项目展示 项目链接 https://download.csdn.net/download/weixin_45525272/17043459 项目设计 关于于规则 ...

  7. Java小工具-猜数字游戏(exe版)另附Java文件转exe文件教程

    游戏效果: 系统会随机生成一正整数(1~100),猜测该数字,猜的次数越少,得分越高,6次猜不中,游戏结束.在这之前你将无法退出程序! 程序部分截图: 没有很复杂的逻辑,就直接上代码了(可以直接跑): ...

  8. 猜数字游戏的简单写法

    文章目录 猜数字游戏的简单原理 生成一个随机数 实现代码的主体内容 猜数字游戏 猜数字游戏的简单原理 生成一个随机数 方法:时间戳 srand((unsigned)time(NULL));a = ra ...

  9. JavaScript(二)——猜数字游戏

    下面我们将会通过一个小案例--猜数字游戏,来直观地感受一下如何让JavaScript完成任务. 设计要求 假设你的老板给你布置了以下游戏设计任务要求: 我想让你开发一个猜数字游戏.游戏应随机选择一个 ...

最新文章

  1. Android开发--多媒体应用开发(一)--MediaPlayer的使用介绍
  2. 网站文章中如何设置关键词才更有利于SEO优化?
  3. FastReport分页和空行填充
  4. 【转】javascript中的LHS与RHS
  5. 单位四元数(unit quaternion)
  6. 浅谈SAP CRM开发——技术概念、与ECC 系列产品区别
  7. c语言刷新输出_在fx-9860系列上用C语言编程
  8. java23中设计模式——结构模式——Flyweight(享元)
  9. 使用WildFly 8在Java EE7中自举Apache Camel
  10. 全国小学四则运算1.0
  11. List 集合的常用方法
  12. 19_07_09校内训练[分组]
  13. 单维度量表验证性因子分析_验证性因素分析介绍
  14. stm32开发板调试问题记录----去除flash读保护以及debug进不去main.c的问题
  15. JSON、AJAX、Maven
  16. Kubernetes第二曲 集群部署(Etcd+Flannel)
  17. win10更新后应用无法连接服务器,win10更新无法连接到更新服务怎么办_win10无法连接到更新服务的解决方法...
  18. Centos7 Failed to start xxx.service: Unit not found
  19. oauth2 ldap sso
  20. Remote Server returned '420 4.2.0 Recipient deferred because there is no Mdb'

热门文章

  1. GetLocaleInfo获取信息
  2. t3软件怎么生成报表_用友T3软件在软件财务报表模块生成资产负债表和利润表,保存到桌面以后,没办法打开,如何处理?...
  3. 英语思维导图大全 形容词和副词(五)
  4. 电流互感器matlab,电流互感器对高频信号传变的MATLAB仿真研究
  5. 锐捷三层链路聚合配置+命令详解
  6. Python程序员找了个女朋友, 没有时间聊天? 做一个自动回复功能!还会怕没有女朋友吗?
  7. Java写文字冒险类游戏_用木兰语言编写文字冒险游戏(十三、四章),又一个特性发现...
  8. c语言常用算法归纳,C语言常用算法
  9. 费米估算类问题-解决方法
  10. r710安装exsi_Dell服务器安装EXSI系统