diff --git a/lesson_gui_2.cpp b/lesson_gui_2.cpp index 553f8f7..b8385ce 100644 --- a/lesson_gui_2.cpp +++ b/lesson_gui_2.cpp @@ -6,51 +6,198 @@ #include #include #include +#include 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("说明:这是一个抽卡游戏,你可以通过抽卡来获得各种等级的卡牌。\n有普通稀有传说,并且还可以查看稀有度分配,\n每抽一次花费10金币。若金币不够,可以去菜单增加金币,\n或者减少抽卡遍数。并且抽卡遍数最高100。请点击回菜单。"); + result_box->label("说明:这是一个抽卡游戏,你可以通过抽卡来获得各种等级的卡牌。\nR SR SSR UR TR USR,\n每抽一次花费10金币。若金币不够,可以去菜单增加金币,\n或者减少抽卡遍数。并且抽卡遍数最高10。请点击回菜单。"); result_box->labelcolor(FL_BLACK); } - -void menu_callback(Fl_Widget * widget, void *data) { - result_box->label(""); +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 couka_callback(Fl_Widget * widget, void *data) { - int a = std::rand() % 111; - if (a < 50) result_box->label("你抽到了R卡牌"); - else if (a < 80) result_box->label("你抽到了SR卡牌"); - else if (a < 100) result_box->label("你抽到了SSR卡牌"); - else if (a < 105) result_box->label("你抽到了UR卡牌"); - else if (a < 109) result_box->label("你抽到了TR卡牌"); - else result_box->label("你抽到了USR卡牌"); - 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课"); - Fl_Button* btn_menu = new Fl_Button(100, 40, 140, 50, "回菜单"); + 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); - Fl_Button* btn = new Fl_Button(300, 40, 140, 50, "说明"); + 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); - Fl_Button* couka = new Fl_Button(500, 40, 140, 50, "抽卡"); + couka = new Fl_Button(500, 40, 140, 50, "抽卡"); couka->labelsize(18); - couka->callback(couka_callback); + 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); - Fl_Box* coins_box = new Fl_Box(0, 0, 140, 50, "金币:"); + 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();