知识改变命运。
双色球规则:
用户选择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++;
}