// ===================================================================== // 第 4 课:十连抽 —— 老师完整答案 // ===================================================================== #include #include #include #include #include #include #include #include Fl_Box *result_box; Fl_Box *info_box; void draw_one_callback(Fl_Widget *w, void *data) { int r = std::rand() % 100; char info[50]; std::sprintf(info, "单抽 | 点数:%d", r); info_box->label(info); if (r < 70) { result_box->label("☆ 普通卡 ☆"); result_box->labelcolor(fl_rgb_color(128, 128, 128)); } else if (r < 95) { result_box->label("★ 稀有卡 ★"); result_box->labelcolor(FL_BLUE); } else { result_box->label("★★★ 超稀有卡!! ★★★"); result_box->labelcolor(FL_RED); } result_box->labelsize(28); } void draw_ten_callback(Fl_Widget *w, void *data) { std::string all = ""; int rare_count = 0; int super_count = 0; for (int i = 1; i <= 10; i++) { int r = std::rand() % 100; all += "第" + std::to_string(i) + "抽:"; if (r < 70) { all += "普通"; } else if (r < 95) { all += "★稀有★"; rare_count++; } else { all += "★★★超稀有★★★"; super_count++; } all += "\n"; } char stats[100]; std::sprintf(stats, "十连抽结果 | 稀有:%d 超稀有:%d", rare_count, super_count); info_box->label(stats); if (super_count > 0) { info_box->labelcolor(FL_RED); } else if (rare_count > 0) { info_box->labelcolor(FL_BLUE); } else { info_box->labelcolor(fl_rgb_color(128, 128, 128)); } result_box->labelsize(16); result_box->label(all.c_str()); result_box->labelcolor(FL_BLACK); } int main() { std::srand(std::time(nullptr)); Fl_Window *window = new Fl_Window(420, 480, "抽卡世界 - 第4课"); Fl_Button *btn1 = new Fl_Button(50, 20, 140, 50, "抽一张"); btn1->labelsize(18); btn1->callback(draw_one_callback); Fl_Button *btn10 = new Fl_Button(230, 20, 140, 50, "十连抽"); btn10->labelsize(18); btn10->callback(draw_ten_callback); info_box = new Fl_Box(30, 80, 360, 30, ""); info_box->labelsize(14); result_box = new Fl_Box(30, 120, 360, 330, "点击按钮开始抽卡!"); result_box->labelsize(20); result_box->align(FL_ALIGN_TOP | FL_ALIGN_LEFT); window->end(); window->show(); return Fl::run(); }