#include #include #include #include #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* sell_question; Fl_Button* add_coins; Fl_Button* btn; Fl_Button* sell; Fl_Button* couka; Fl_Button* couone; Fl_Button* couten; Fl_Button* rarity; Fl_Button* collection_box; int coins = 0; int a = std::rand() % 111; void collection_callback(Fl_Widget * widget, void *data) { result_box->label(collection.c_str()); result_box->labelcolor(FL_BLACK); } void sell_callback(Fl_Widget * widget, void *data) { } void sell_question_callback(Fl_Widget * widget, void *data) { result_box->label("售卖:请选择要售卖的卡牌,售卖后会获得金币。"); result_box->labelcolor(FL_BLACK); } 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 9.01% TR 0.81% USR 0.09%\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(); sell->show(); collection_box->show(); rarity->show(); return; } chou10_result = ""; for(int i = 0; i < 10; i++) { int a = std::rand() %1110; if(a < 500){ chou10_result += "R "; collection += "R "; } else if(a < 800) { chou10_result += "SR "; collection += "SR "; } else if(a < 1000) { chou10_result += "SSR "; collection += "SSR "; } else if(a < 1100) { chou10_result += "UR "; collection += "UR "; } else if(a < 1109) { 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(); sell->show(); collection_box->show(); rarity->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(); collection_box->show(); rarity->show(); sell->show(); return; } int a = std::rand() % 111; if (a < 50) {result_box->label("你抽到了R卡牌金币减10"); collection += "R "; } else if (a < 80) {result_box->label("你抽到了SR卡牌金币减10"); collection += "SR "; } else if (a < 100) {result_box->label("你抽到了SSR卡牌金币减10"); collection += "SSR "; } else if (a < 105) {result_box->label("你抽到了UR卡牌金币减10"); collection += "UR "; } else if (a < 109) {result_box->label("你抽到了TR卡牌金币减10"); collection += "TR "; } else {result_box->label("你抽到了USR卡牌金币减10"); collection += "USR "; } 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(); sell->show(); collection_box->show(); rarity->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(); sell->hide(); collection_box->hide(); rarity->hide(); } 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); collection_box = new Fl_Button(300, 700, 140, 50, "仓库"); collection_box->labelsize(18); collection_box->callback(collection_callback); sell = new Fl_Button(500,700,140,50,"售卖"); collection_box->labelsize(18); collection_box->callback(sell_callback); sell_question = new Fl_Button(150,0,35,35,"?"); sell_question->labelsize(10); sell_question->callback(sell_question_callback); sell_question->hide(); 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(); }