用qt做了一个王者荣耀皮肤抽奖器,效果如下图。
说一下过程吧,第一步,就是先准备好皮肤的图片,皮肤的图片在王者荣耀的官网是可以下载的,但是过百的下载量确实有点大了,动了个小心思,网上找了一个用py写的爬虫,用来爬了官网的图片。下载地址
将下载好的图片进行分类,这真是在考验我的耐心,对于一个完全对皮肤没认识的来说太艰难了,还好有我三位王者室友的帮助!,很快的对皮肤进行了分类,有288的,有488的,等等。
然后就是qt代码啦,其实代码并不多。
没加载背景的样子,好丑(这不是重点)。
思路就是mainwindow.h头文件下面放的都是皮肤对应的名字。将他们放在字符串数组中,对字符串下标进行随机抽取,然后通过加载字符串加载对应的图片(图片放在资源下面)。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#pragma execution_character_set("utf-8")
#include <QMainWindow>
#include<QTimer>
#include<QTime>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
int GameRand(int num); //生成随机数
int n;
QString str288[80]={
"百里守约-绝影神枪",
"嫦娥-露花倒影",
"百里玄策-威尼斯狂欢",
"狄仁杰-锦衣卫",
"成吉思汗-维京掠夺者",
"扁鹊-救世之瞳",
"伽罗-花见巫女",
"貂蝉-异域舞娘",
"程咬金-爱与正义",
"蔡文姬-蔷薇王座",
"关羽-天启骑士",
"干将莫邪-第七人偶",
"东皇太一-东海龙王",
"大乔-伊势巫女",
"黄忠-芝加哥教父",
"鬼谷子-阿摩司公爵",
"高渐离-金属狂潮",
"盾山-极冰防御线",
"狂铁-命运角斗场",
"姜子牙-时尚教父",
"后羿-精灵王",
"公孙离-花间舞",
"李信-灼热之刃",
"兰陵王-隐刃",
"镜-冰刃幻境",
"花木兰-剑舞者",
"鲁班大师-归虚梦演",
"李元芳-特种部队",
"老夫子-潮流仙人",
"铠-龙域领主",
"马超-幸存者",
"鲁班七号-福禄兄弟",
"刘邦-圣殿之光",
"李白-范海辛",
"梦奇-美梦成真",
"马可波罗-激情绿茵",
"鲁班七号-木偶奇遇记",
"刘禅-英喵野望",
"哪吒-三太子",
"米莱狄-精准探案法",
"蒙恬-秩序猎龙将",
"露娜-绯红之刃",
"裴擒虎-街头旋风",
"牛魔-西部大镖客",
"芈月-红桃皇后",
"蒙犽-归虚梦演",
"苏烈-爱与和平",
"上官婉儿-修竹墨客",
"女娲-尼罗河女神",
"明世隐-占星师",
"太乙真人-圆桌骑士",
"孙膑-未来旅行",
"沈梦溪-棒球奇才",
"盘古-创世神祝",
"项羽-帝国元帅",
"王昭君-精灵公主",
"孙策-海之征途",
"司马懿-魇语军师",
"杨玉环-霓裳曲",
"小乔-万圣前夜",
"西施-归虚梦演",
"孙悟空-西部大镖客",
"虞姬-加勒比小姐",
"瑶-森",
"雅典娜-战争女神",
"夏侯惇-战争骑士",
"钟馗-地府判官",
"元歌-午夜歌剧院",
"曜-归虚梦演",
"杨戬-埃及法老",
"猪八戒-年年有余",
"钟无艳-生化警戒",
"云中君-荷鲁斯之眼",
"弈星-踏雪寻梅",
"庄周-鲤鱼之梦",
"周瑜-海军大将",
"张良-一千零一夜",
"诸葛亮-星航指挥官"
};
QString str488[20]={
"安琪拉-玩偶对对碰",
"白起-白色死神",
"曹操-超能战警",
"大乔-守护之力",
"宫本武藏-万象初新",
"关羽-龙腾万里",
"后羿-阿尔法小队",
"李白-敏锐之力",
"刘备-万事如意",
"露娜-哥特玫瑰",
"苏烈-坚韧之力",
"孙尚香-沉稳之力",
"张飞-五福同心",
"甄姬-花好人间",
"诸葛亮-掌控之力"
};
QString str588[4]={
"宫本武藏-未来纪元",
"花木兰-兔女郎",
"刘备-汉昭烈帝",
"赵云-白执事"
};
QString str888[53]={
"阿轲-爱心护理",
"阿轲-节奏热浪",
"安琪拉心灵 骇客",
"白起-星夜王子",
"百里守约-特工魅影",
"不知火舞-魅语",
"蔡文姬-舞动绿茵",
"曹操-幽灵船长",
"程咬金-功夫厨神",
"程咬金-星际陆战队",
"达摩-大发明家",
"妲己-女仆咖啡",
"大乔-白蛇",
"大乔-猫狗日记",
"典韦-黄金武土",
"貂蝉-圣诞恋歌",
"伽罗-箭羽风息",
"公孙离-无限星赏官",
"宫本武藏-鬼剑武藏",
"韩信-白龙吟",
"韩信-街头霸王",
"花木兰-水晶猎龙者",
"橘右京-修罗",
"铠-曙光守护者",
"兰陵王-暗隐猎兽者",
"李白-千年之狐",
"李元芳-逐浪之夏",
"廉颇-地狱岩魂",
"刘邦-德古拉伯爵",
"刘禅-绅士熊喵",
"刘禅-天才门将",
"露娜-紫霞仙子",
"吕布-未日机甲",
"吕布-圣诞任欢",
"墨子-金属风暴",
"娜可露露-晚萤",
"孙膑-天使之翼",
"孙策-猫狗日记",
"孙尚香-时之恋人",
"孙尚香-水果甜心",
"武则天-东方不败",
"夏侯惇-乘风破浪",
"小乔-缤纷独角兽",
"小乔-青蛇",
"亚瑟-心灵战警",
"瑶-遇见神鹿",
"赢政-暗夜贵公子",
"赢政-摇滚巨星",
"张飞-乱世虎臣",
"赵云-忍●炎影",
"赵云-未来纪元",
"甄姬-冰雪圆舞曲",
"诸葛亮-黄金分割率"
};
QString strcs[20]={
"达摩-黄金狮子座",
"狄仁杰-超时空战土",
"貂蝉-猫影幻舞",
"貂蝉-仲夏夜之梦",
"干将莫邪-久胜战神",
"宫本武藏-地狱之眼",
"后羿-黄金射手座",
"花木兰-冠军飞将",
"刘备-时之恋人",
"梦奇-胖达荣荣",
"孙尚香-末日机甲",
"孙悟空-地狱火",
"武则天-海洋之心",
"虞姬-云霓雀翎"
};
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mianwindow.cpp 要说的可能就是概率,我本来是想100里面随机到0-20算20%,后来发现这样根本不准,我要是商家我就亏大了,我把100换成了较大的数,这个概率数据才能算是正确的。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QTime>
#include<qdebug.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
int number_1=0;
int number_2=0;
int number_y = GameRand(77);
for(int j =0;j<500000000;j++)
{
}
ui->label_2->setText("恭喜你");
for(int i =0; i<1000;i++)
{
number_1 = GameRand(1000);
//number_1 = str.toInt();
//288 70%
if(number_1>=200)
{
number_2 = GameRand(77);
//显示图片 显示文字
ui->label_4->setText(str288[number_2]);
ui->label_3->setText("获得288皮肤:");
QString str_1 = str288[number_2];
QString str_2 = "border-image: url(:/lib/img288/"+str_1+".jpg)";
qDebug()<<str_2;
ui->label->setStyleSheet(str_2);
break;
}
//488 20%
if(number_1>=90 && number_1<200)
{
number_2 = GameRand(13);
ui->label_4->setText(str488[number_2]);
ui->label_3->setText("获得488皮肤:");
QString str_1 = str488[number_2];
QString str_2 = "border-image: url(:/lib/img488/"+str_1+".jpg)";
ui->label->setStyleSheet(str_2);
qDebug()<<str_2;
break;
}
//588 6%
if(number_1>=30&&number_1<90)
{
number_2 = GameRand(3);
ui->label_4->setText(str588[number_2]);
ui->label_3->setText("获得588皮肤:");
QString str_1 = str588[number_2];
QString str_2 = "border-image: url(:/lib/img588/"+str_1+".jpg)";
ui->label->setStyleSheet(str_2);
qDebug()<<str_2;
break;
}
//888 3%
if(number_1>=5&&number_1<30)
{
number_2 = GameRand(52);
ui->label_4->setText(str888[number_2]);
ui->label_3->setText("获得888皮肤:");
QString str_1 = str888[number_2];
QString str_2 = "border-image: url(:/lib/img888/"+str_1+".jpg)";
ui->label->setStyleSheet(str_2);
qDebug()<<str_2;
break;
}
//传说 1%
if(number_1>=0&&number_1<5)
{
number_2 = GameRand(13);
ui->label_4->setText(strcs[number_2]);
ui->label_3->setText("获得传说皮肤:");
QString str_1 = strcs[number_2];
QString str_2 = "border-image: url(:/lib/imgcs/"+str_1+".jpg)";
ui->label->setStyleSheet(str_2);
qDebug()<<str_2;
break;
}
}
}
int MainWindow::GameRand(int num) //生成随机数
{
QTime time;
time = QTime::currentTime();
qsrand(time.msec()+time.second()*1000);
return qrand()%num+0;
}