205 lines
6.1 KiB
C++
205 lines
6.1 KiB
C++
|
|
#include <FL/Fl.H>
|
|
#include <FL/Fl_Window.H>
|
|
#include <FL/Fl_Box.H>
|
|
#include <FL/Fl_Button.H>
|
|
#include <cstdlib>
|
|
#include <ctime>
|
|
#include <iostream>
|
|
#include <FL/Fl_Input.H>
|
|
Fl_Box* result_box;
|
|
Fl_Box* coins_box;
|
|
Fl_Input* input_coins_box;
|
|
std::string input_coins_box_value;
|
|
std::string collection = "收藏:";
|
|
Fl_Button* btn_menu;
|
|
Fl_Button* add_coins;
|
|
Fl_Button* btn;
|
|
Fl_Button* couka;
|
|
Fl_Button* couone;
|
|
Fl_Button* couten;
|
|
Fl_Button* rarity;
|
|
int coins = 0;
|
|
int a = std::rand() % 111;
|
|
void draw_callback(Fl_Widget * widget, void *data) {
|
|
result_box->label("说明:这是一个抽卡游戏,你可以通过抽卡来获得各种等级的卡牌。\nR SR SSR UR TR USR,\n每抽一次花费10金币。若金币不够,可以去菜单增加金币,\n或者减少抽卡遍数。并且抽卡遍数最高10。请点击回菜单。");
|
|
result_box->labelcolor(FL_BLACK);
|
|
}
|
|
void rarity_callback(Fl_Widget * widget, void *data) {
|
|
result_box->label("稀有度分配:R 45.05% SR 27.03% SSR 18.02%\n UR 4.50% TR 3.60% USR 1.80%\n请按回菜单。");
|
|
result_box->labelcolor(FL_BLACK);
|
|
}
|
|
void menu_callback(Fl_Widget * widget, void *data) {
|
|
|
|
result_box->label("");
|
|
int add = std::atoi(input_coins_box->value());
|
|
if(add > 9999) {
|
|
result_box->label("增加金币数量不能超过9999");
|
|
add = 0;
|
|
input_coins_box->value("");
|
|
input_coins_box->hide();
|
|
return;
|
|
}
|
|
coins += add;
|
|
input_coins_box_value = ("金币:" + std::to_string(coins));
|
|
coins_box->label(input_coins_box_value.c_str());
|
|
input_coins_box->value("");
|
|
input_coins_box->hide();
|
|
}
|
|
|
|
std::string chou10_result;
|
|
void couka_callback3(Fl_Widget * widget, void *data) {
|
|
if(coins < 100) {
|
|
result_box->label("金币不足100,无法抽卡");
|
|
couone->hide();
|
|
couten->hide();
|
|
couka->show();
|
|
add_coins->show();
|
|
btn_menu->show();
|
|
btn->show();
|
|
return;
|
|
}
|
|
|
|
chou10_result = "";
|
|
for(int i = 0; i < 10; i++)
|
|
{
|
|
int a = std::rand() % 111;
|
|
if(a < 50){
|
|
chou10_result += "R ";
|
|
std::string name = "R";
|
|
int num = 1;
|
|
collection += name + " ";
|
|
}
|
|
else if(a < 80)
|
|
{
|
|
chou10_result += "SR ";
|
|
collection += "SR ";
|
|
}
|
|
else if(a < 100)
|
|
{
|
|
chou10_result += "SSR ";
|
|
collection += "SSR ";
|
|
}
|
|
else if(a < 105)
|
|
{
|
|
chou10_result += "UR ";
|
|
collection += "UR ";
|
|
}
|
|
else if(a < 109)
|
|
{
|
|
chou10_result += "TR ";
|
|
collection += "TR ";
|
|
}
|
|
else{
|
|
chou10_result += "USR ";
|
|
collection += "USR ";
|
|
}
|
|
}
|
|
|
|
chou10_result += " 金币减100";
|
|
coins -= 100;
|
|
input_coins_box_value = ("金币:" + std::to_string(coins));
|
|
coins_box->label(input_coins_box_value.c_str());
|
|
result_box->label(chou10_result.c_str());
|
|
couone->hide();
|
|
couten->hide();
|
|
couka->show();
|
|
add_coins->show();
|
|
btn_menu->show();
|
|
btn->show();
|
|
}
|
|
|
|
void couka_callback2(Fl_Widget * widget, void *data) {
|
|
if(coins < 10) {
|
|
result_box->label("金币不足10,无法抽卡");
|
|
couone->hide();
|
|
couten->hide();
|
|
couka->show();
|
|
add_coins->show();
|
|
btn_menu->show();
|
|
btn->show();
|
|
return;
|
|
}
|
|
int a = std::rand() % 111;
|
|
if (a < 50) {result_box->label("你抽到了R卡牌金币减10");
|
|
}
|
|
else if (a < 80) result_box->label("你抽到了SR卡牌金币减10");
|
|
else if (a < 100) result_box->label("你抽到了SSR卡牌金币减10");
|
|
else if (a < 105) result_box->label("你抽到了UR卡牌金币减10");
|
|
else if (a < 109) result_box->label("你抽到了TR卡牌金币减10");
|
|
else result_box->label("你抽到了USR卡牌金币减10");
|
|
result_box->labelcolor(FL_BLACK);
|
|
coins -= 10;
|
|
input_coins_box_value = ("金币:" + std::to_string(coins));
|
|
coins_box->label(input_coins_box_value.c_str());
|
|
couone->hide();
|
|
couten->hide();
|
|
couka->show();
|
|
add_coins->show();
|
|
btn_menu->show();
|
|
btn->show();
|
|
}
|
|
void couka_callback1(Fl_Widget * widget, void *data) {
|
|
input_coins_box->hide();
|
|
result_box->label("");
|
|
btn_menu->hide();
|
|
add_coins->hide();
|
|
btn->hide();
|
|
couka->hide();
|
|
couone->show();
|
|
couten->show();
|
|
}
|
|
void add_coins_callback(Fl_Widget * widget, void *data) {
|
|
result_box->label("请输入增加金币数量(最多9999)");
|
|
input_coins_box->show();
|
|
|
|
}
|
|
int main() {
|
|
std::srand(std::time(nullptr));
|
|
Fl_Window *window = new Fl_Window(1024, 768, "抽卡世界 - 第2课");
|
|
btn_menu = new Fl_Button(100, 40, 140, 50, "回菜单");
|
|
btn_menu->labelsize(18);
|
|
btn_menu->callback(menu_callback);
|
|
add_coins = new Fl_Button(700, 40, 140, 50, "增加金币");
|
|
add_coins->labelsize(18);
|
|
add_coins->callback(add_coins_callback);
|
|
|
|
rarity = new Fl_Button(100, 700, 140, 50, "稀有度分配");
|
|
rarity->labelsize(18);
|
|
rarity->callback(rarity_callback);
|
|
|
|
btn = new Fl_Button(300, 40, 140, 50, "说明");
|
|
btn->labelsize(18);
|
|
btn->callback(draw_callback);
|
|
|
|
couka = new Fl_Button(500, 40, 140, 50, "抽卡");
|
|
couka->labelsize(18);
|
|
couka->callback(couka_callback1);
|
|
|
|
couone = new Fl_Button(250, 350, 140, 50, "抽一次");
|
|
couone->labelsize(18);
|
|
couone->callback(couka_callback2);
|
|
couone->hide();
|
|
|
|
couten = new Fl_Button(550, 350, 140, 50, "抽十次");
|
|
couten->labelsize(18);
|
|
couten->callback(couka_callback3);
|
|
couten->hide();
|
|
|
|
result_box = new Fl_Box(50, 130, 900, 450, "");
|
|
result_box->labelsize(20);
|
|
|
|
coins_box = new Fl_Box(0, 0, 140, 50, "金币:");
|
|
coins_box->labelsize(30);
|
|
coins_box->label(("金币:" + std::to_string(coins)).c_str());
|
|
coins_box->labelcolor(FL_BLACK);
|
|
|
|
input_coins_box = new Fl_Input(200, 130, 140, 50, "输入增加金币数量");
|
|
input_coins_box->labelsize(18);
|
|
input_coins_box->hide();
|
|
|
|
window->end();
|
|
window->show();
|
|
return Fl::run();
|
|
}
|