QT双色球小项目

知识改变命运。

 双色球规则:

用户选择6个红球,1个蓝球

红球取值范围:1~33

蓝球取值范围:1~15

红球号码不能重复

机选6个红球,1个蓝球

中3个号码 5元

中4个号码 20元

中5个号码 200元

中6个号码 20000元

中7个号码 20000000元

 项目原型图

代码实现

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setWindowTitle("双色球");
    srand(time(NULL));
    timerid = new QTimer();
    //倒计时结束时开奖
    connect(timerid,SIGNAL(timeout()),this,SLOT(kaijiang()));
    //点击开始按钮时开始倒计时
    connect(ui->kj_btn,SIGNAL(clicked(bool)),this,SLOT(timerxy()));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::settextnum(QLabel *label)
{
    int snum = rand() %33+1;
//    qDebug() << snum <<endl;
    label->setText(QString::number(snum));
}
//判断红球随机数是否重复或缺失
int Widget::chongfuzx(int l,int p[])
{
    for(int i=0;i<6;i++)
    {
        if(l==p[i])
        {
            return 1;
        }
    }
    return -1;
}

void Widget::resetssq()
{
    //用户选择号码清零
    //中奖号码清零
    for(int i=0;i<7;i++)
    {
        usernums[i] = 0;
        kjnums[i] = 0;
    }
    sum=0;
    ui->jieguo->setText("中奖结果");

}
void Widget::timerxy()
{
    //延迟显示并重置数据
    resetssq();
    timerid->start(80);
}
int Widget::getNum(QLineEdit *edit){
    return edit->text().toInt();
}
void Widget::kaijiang()
{
    ui->kj_btn->hide();
    //抽奖80毫秒滚动数组,显示
    static int x=0;
    if(x<20)
    {
        settextnum(ui->kj1);
        int num = ui->kj1->text().toInt();
        kjnums[0] = num;
    }
    //判断最后一次是否重复,如重复重新执行,不重复将最后一位输入数组中
    else if(x>= 20 && x < 39)
    {
        settextnum(ui->kj2);
    }
    else if(x==39)
    {
        settextnum(ui->kj2);
        int num=ui->kj2->text().toInt();
        int t =chongfuzx(num,kjnums);
        if(t == 1)
        {
            x--;
            return;
        }
        kjnums[1] = num;
    }
    else if(x>=40 && x < 59)
    {
        settextnum(ui->kj3);
    }
    else if(x==59)
    {
        settextnum(ui->kj3);
        int num=ui->kj3->text().toInt();
        int t =chongfuzx(num,kjnums);
        if(t == 1)
        {
            x--;
            return;
        }
        kjnums[2] = num;
    }
    else if(x>=60 && x< 79)
    {
        settextnum(ui->kj4);
    }
    else if(x==79)
    {
        settextnum(ui->kj4);
        int num=ui->kj4->text().toInt();
        int t =chongfuzx(num,kjnums);
        if(t == 1)
        {
            x--;
            return;
        }
        kjnums[3] = num;
    }
    else if(x>=80 && x<99)
    {
        settextnum(ui->kj5);
    }
    else if(x==99)
    {
        settextnum(ui->kj5);
        int num=ui->kj5->text().toInt();
        int t =chongfuzx(num,kjnums);
        if(t == 1)
        {
            x--;
            return;
        }
        kjnums[4] = num;
    }
    else if(x>=100 && x<119)
    {
        settextnum(ui->kj6);
    }
    else if(x==119)
    {
        settextnum(ui->kj6);
        int num=ui->kj6->text().toInt();
        int t =chongfuzx(num,kjnums);
        if(t == 1)
        {
            x--;
            return;
        }
        kjnums[5] = num;
    }
    else if(x>=120 && x< 140)
    {
        int num = rand() %16 +1;
        ui->kj7->setText(QString::number(num));
        int jjj = ui->kj7->text().toInt();
        kjnums[6] = jjj;
    }
    else
    {
        ui->kj_btn->show();
        //显示中奖个数
        timerid->stop();
        x = 0;
        int n01 = getNum(ui->num1);
        usernums[0] = n01;

        int n02 = getNum(ui->num2);
        int a =chongfuzx(n02,usernums);
        if (a==1)
        {
            ui->jieguo->setText("选择红球缺失或重复不符合规则");
            return;
        }
        usernums[1] = n02;

        int n03 = getNum(ui->num3);
        int b =chongfuzx(n03,usernums);
        if (b==1)
        {
            ui->jieguo->setText("选择红球缺失或重复不符合规则");
            return;
        }
        usernums[2] = n03;

        int n04 = getNum(ui->num4);
        int c =chongfuzx(n04,usernums);
        if (c==1)
        {
            ui->jieguo->setText("选择红球缺失或重复不符合规则");
            return;
        }
        usernums[3] = n04;

        int n05 = getNum(ui->num5);
        int d =chongfuzx(n05,usernums);
        if (d==1)
        {
            ui->jieguo->setText("选择红球缺失或重复不符合规则");
            return;
        }
        usernums[4] = n05;

        int n06 = getNum(ui->num6);
        int e =chongfuzx(n06,usernums);
        if (e==1)
        {
            ui->jieguo->setText("选择红球缺失或重复不符合规则");
            return;
        }
        usernums[5] = n06;

        int n07 = getNum(ui->num7);
        usernums[6] = n07;

        //将用户输入保存到数组中
        for(int j=0;j<7;j++)
        {
            if(j==6 && (usernums[6]>16 || usernums[6] <1))
            {
                ui->jieguo->setText("选择蓝球缺失或不符合规则");
                return;
            }
            else if(usernums[j]>33 || usernums[j] <1)
            {
                ui->jieguo->setText("选择红球缺失或不符合规则");
                return;
            }
        }

        //兑换奖品
        for(int z = 0; z < 6; z++)
        {
            for(int y = 0; y < 6; y++)
            {
                if(usernums[z] == kjnums[y])
                {
                    sum++;
                }
            }
        }
        if(usernums[6] == kjnums[6])
        {
            sum++;
        }
        switch(sum)
        {
            case 3:
                ui->jieguo->setText("5元");
                break;
            case 4:
                ui->jieguo->setText("20元");
                break;
            case 5:
                ui->jieguo->setText("200元");
                break;
            case 6:
                ui->jieguo->setText("20000元");
                break;
            case 7:
                ui->jieguo->setText("2000000元");
                break;
            default:
                ui->jieguo->setText("感谢参与");
                break;
        }
        return;
    }
    x++;
}
头文件 

ui界面

效果图

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值