題目:籃球記分計時系統(tǒng)
一? 實訓任務(wù)
利用Qt-Creator編程設(shè)計一個籃球記分計時界面開發(fā)系統(tǒng),實現(xiàn)24秒一節(jié)次的倒計時籃球記分牌。
二? 實訓要求
1、基本要求
(1)按照題目要求使用Qt編程,獨立設(shè)計系統(tǒng)所需界面,實現(xiàn)24秒倒計時的籃球記分計時界面開發(fā)系統(tǒng)。
(2)通過按鈕控件實現(xiàn)“運行/暫停”功能,同時還可通過按鈕或其它控件實現(xiàn)A,B兩隊加分操作,犯規(guī)減分操作。
(3)停表計時就是:比賽開始后,犯規(guī),罰球,暫停,都要停表。累計時間到24秒后,該節(jié)次結(jié)束,共4節(jié)次。
2、擴展部分
(1)擴展多位數(shù)據(jù)顯示,能實現(xiàn).99的顯示。
(2)加時操作功能。
(3)真實場景仿真展示等。
三? 實訓題目原理
?????? 倒計時設(shè)計的原理框圖如圖3所示。
圖3 倒計時系統(tǒng)框圖
部分程序:
#include "countboard.h"
#include "ui_countboard.h"
#include<QTimer>
#include<QtGui>
CountBoard::CountBoard(QWidget *parent) :
QWidget(parent),
ui(new Ui::CountBoard)
{
ui->setupUi(this);
time=24; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//設(shè)置倒計時初始值
jieshu=1; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //總共四節(jié),初始值為1
state=0; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//設(shè)置比賽狀態(tài)初始值,為0表示暫停
range=24; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //倒計時范圍初始值為24秒
jieshuzhuangtai=0; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//比賽初始結(jié)束狀態(tài)為0
haomiaojishi=1000; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//毫秒計時器的初始值
break1=break2=0; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//犯規(guī)次數(shù)初始值
timer=new QTimer(this); ? ? ? ? ? ? ? ? ? ? ? ? ? ? //初始定時器
timer2=new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(jishiqi()));
connect(timer2,SIGNAL(timeout()),this,SLOT(haomiao()));
ui->haomiaojishiqi->setDigitCount(4); ? ? ? ? ? ? ? ? ? //設(shè)置毫秒計時器設(shè)備顯示位數(shù)
ui->label_6->setText("Section"+QString::number(jieshu));//顯示這是第幾節(jié)比賽,總共四節(jié)
teamonescore=teamtwoscore=0; ? ? ? ? ? ? ? ? ? ? ? ? ? ?//初始化兩個隊伍的初始比分為0;
timer2->start(1); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //定時器2開始工作,間隔為1毫秒
}
CountBoard::~CountBoard() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //析構(gòu)函數(shù),釋放資源,防止資源內(nèi)耗泄露
{
delete ui;
}
void CountBoard::haomiao()
{
if(state==1) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//比賽狀態(tài)為1,(正在比賽)
{
haomiaojishi--; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //毫秒計時的數(shù)值-1
if(haomiaojishi==0) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //如果毫秒計時參數(shù)為0,執(zhí)行
{
haomiaojishi=1000; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//讓毫秒計時參數(shù)重新變?yōu)?000
ui->haomiaojishiqi->display(haomiaojishi); ? ? ?//顯示在計時器控件上
}
ui->haomiaojishiqi->display(haomiaojishi); ? ? ? ? ?//顯示
}
}
void CountBoard::jishiqi()
{
time--;//倒計時-1
ui->daojishi->display(time);
if(time==0)//如果倒計時到了0,執(zhí)行
{
timer->stop();//計時器停止工作,每一節(jié)比賽完等待重新開始比賽
timer2->stop();
//timer3->stop();
ui->textEdit->setText("STOP");//在空間上顯示比賽暫停的標志stop
state=0;//把比賽狀態(tài)參數(shù)改為0,以便通知其他函數(shù)執(zhí)行該參數(shù)為0狀態(tài)下的情況
time=range;//重置倒計時
haomiaojishi=1000;
ui->haomiaojishiqi->display(haomiaojishi);
jieshu++;//每一節(jié)結(jié)束就加一節(jié)
if(jieshu>=5&&teamonescore==teamtwoscore) ? ? ? //如果第4節(jié)以后結(jié)束的時隊伍一和隊伍二比分相同,進入加時賽
{
ui->label_6->setText("Addgame!"); ? ? ? ? ? //在空間上顯示正在加時賽
}
else if(jieshu>=5&&teamonescore!=teamtwoscore)//如果第4節(jié)以后結(jié)束的時隊伍一和隊伍二比分不相同,結(jié)束比賽
{
ui->textEdit->setText("Over!!!"); ? ? ? ? ? //顯示比賽結(jié)束
jieshuzhuangtai=1; ? ? ? ? ? ? ? ? ? ? ? ? ?//結(jié)束狀態(tài)設(shè)置為1,以便節(jié)數(shù)+1函數(shù)識別是否可執(zhí)行
haomiaojishi=1000;
ui->haomiaojishiqi->display(haomiaojishi);
}else{
ui->label_6->setText("Section"+QString::number(jieshu));
}
}
}
void CountBoard::on_lone_clicked()
{
if(state==1) ? ?//比賽狀態(tài)為1,(正在比賽時),執(zhí)行
{
teamonescore=teamonescore+1; //隊伍1比分加1
ui->teamoneboard->display(teamonescore);//顯示
}
}
void CountBoard::on_ltwo_clicked()
{
if(state==1)
{
teamonescore=teamonescore+2;//隊伍1比分加2
ui->teamoneboard->display(teamonescore);
}
}
void CountBoard::on_lthree_clicked()
{
if(state==1)
{
teamonescore=teamonescore+3;//隊伍1比分加3
ui->teamoneboard->display(teamonescore);
}
}
資料包括:
需要完整的資料可在我的資源里下載,也可以加入我的紛傳圈子,里面有資源壓縮包的百度網(wǎng)盤下載地址及提取碼。
紛傳點擊用微信打開即可,過程有點繁瑣請見諒。