From d82c9330cc0e027a5e29b75a34d52ba4b268c54c Mon Sep 17 00:00:00 2001 From: Hourier Date: Wed, 20 May 2020 19:37:28 +0900 Subject: [PATCH] [Refactor] #40275 Separated monster_arena_comm() from building.c to arena.c/h --- src/market/arena.c | 120 ++++++++++++++++++++++++++++++++++++++++++++++ src/market/arena.h | 1 + src/market/building.c | 129 -------------------------------------------------- 3 files changed, 121 insertions(+), 129 deletions(-) diff --git a/src/market/arena.c b/src/market/arena.c index 57e3b5447..2c2ec3395 100644 --- a/src/market/arena.c +++ b/src/market/arena.c @@ -252,3 +252,123 @@ void update_gambling_monsters(player_type *player_ptr) break; } } + +/*! + * @brief モンスター闘技場のメインルーチン + * @param player_ptr プレーヤーへの参照ポインタ + * @return 賭けを開始したか否か + */ +bool monster_arena_comm(player_type *player_ptr) +{ + PRICE maxbet; + PRICE wager; + char out_val[160], tmp_str[80]; + concptr p; + + if ((current_world_ptr->game_turn - current_world_ptr->arena_start_turn) > TURNS_PER_TICK * 250) { + update_gambling_monsters(player_ptr); + current_world_ptr->arena_start_turn = current_world_ptr->game_turn; + } + + screen_save(); + + /* No money */ + if (player_ptr->au <= 1) { + msg_print(_("おい!おまえ一文なしじゃないか!こっから出ていけ!", "Hey! You don't have gold - get out of here!")); + msg_print(NULL); + screen_load(); + return FALSE; + } + + clear_bldg(4, 10); + + prt(_("モンスター 倍率", + "Monsters Odds"), + 4, 4); + for (int i = 0; i < 4; i++) { + char buf[80]; + monster_race *r_ptr = &r_info[battle_mon[i]]; + + sprintf(buf, _("%d) %-58s %4ld.%02ld倍", "%d) %-58s %4ld.%02ld"), i + 1, + _(format("%s%s", r_name + r_ptr->name, (r_ptr->flags1 & RF1_UNIQUE) ? "もどき" : " "), + format("%s%s", (r_ptr->flags1 & RF1_UNIQUE) ? "Fake " : "", r_name + r_ptr->name)), + (long int)mon_odds[i] / 100, (long int)mon_odds[i] % 100); + prt(buf, 5 + i, 1); + } + + prt(_("どれに賭けますか:", "Which monster: "), 0, 0); + while (TRUE) { + int i = inkey(); + + if (i == ESCAPE) { + screen_load(); + return FALSE; + } + + if (i >= '1' && i <= '4') { + sel_monster = i - '1'; + battle_odds = mon_odds[sel_monster]; + break; + } + + else + bell(); + } + + clear_bldg(4, 4); + for (int i = 0; i < 4; i++) + if (i != sel_monster) + clear_bldg(i + 5, i + 5); + + maxbet = player_ptr->lev * 200; + + /* We can't bet more than we have */ + maxbet = MIN(maxbet, player_ptr->au); + + /* Get the wager */ + strcpy(out_val, ""); + sprintf(tmp_str, _("賭け金 (1-%ld)?", "Your wager (1-%ld) ? "), (long int)maxbet); + + /* + * Use get_string() because we may need more than + * the s16b value returned by get_quantity(). + */ + if (!get_string(tmp_str, out_val, 32)) { + screen_load(); + return FALSE; + } + + for (p = out_val; *p == ' '; p++) + ; + + wager = atol(p); + if (wager > player_ptr->au) { + msg_print(_("おい!金が足りないじゃないか!出ていけ!", "Hey! You don't have the gold - get out of here!")); + + msg_print(NULL); + screen_load(); + return FALSE; + } else if (wager > maxbet) { + msg_format(_("%ldゴールドだけ受けよう。残りは取っときな。", "I'll take %ld gold of that. Keep the rest."), (long int)maxbet); + + wager = maxbet; + } else if (wager < 1) { + msg_print(_("OK、1ゴールドでいこう。", "Ok, we'll start with 1 gold.")); + wager = 1; + } + + msg_print(NULL); + battle_odds = MAX(wager + 1, wager * battle_odds / 100); + kakekin = wager; + player_ptr->au -= wager; + reset_tim_flags(player_ptr); + + prepare_change_floor_mode(player_ptr, CFM_SAVE_FLOORS); + + player_ptr->phase_out = TRUE; + player_ptr->leaving = TRUE; + player_ptr->leave_bldg = TRUE; + + screen_load(); + return TRUE; +} diff --git a/src/market/arena.h b/src/market/arena.h index 174582ac2..8c50ca2be 100644 --- a/src/market/arena.h +++ b/src/market/arena.h @@ -2,3 +2,4 @@ void arena_comm(player_type *player_ptr, int cmd); void update_gambling_monsters(player_type *player_ptr); +bool monster_arena_comm(player_type *player_ptr); diff --git a/src/market/building.c b/src/market/building.c index c853b5ad1..703ba95db 100644 --- a/src/market/building.c +++ b/src/market/building.c @@ -265,135 +265,6 @@ static void show_building(player_type *player_ptr, building_type* bldg) /*! - * @brief モンスター闘技場のメインルーチン - * @param player_ptr プレーヤーへの参照ポインタ - * @return 賭けを開始したか否か - */ -static bool monster_arena_comm(player_type *player_ptr) -{ - PRICE maxbet; - PRICE wager; - char out_val[160], tmp_str[80]; - concptr p; - - if ((current_world_ptr->game_turn - current_world_ptr->arena_start_turn) > TURNS_PER_TICK * 250) - { - update_gambling_monsters(player_ptr); - current_world_ptr->arena_start_turn = current_world_ptr->game_turn; - } - - screen_save(); - - /* No money */ - if (player_ptr->au <= 1) - { - msg_print(_("おい!おまえ一文なしじゃないか!こっから出ていけ!", "Hey! You don't have gold - get out of here!")); - msg_print(NULL); - screen_load(); - return FALSE; - } - - clear_bldg(4, 10); - - prt(_("モンスター 倍率", - "Monsters Odds"), 4, 4); - for (int i = 0; i < 4; i++) - { - char buf[80]; - monster_race *r_ptr = &r_info[battle_mon[i]]; - - sprintf(buf, _("%d) %-58s %4ld.%02ld倍", "%d) %-58s %4ld.%02ld"), i + 1, - _(format("%s%s", r_name + r_ptr->name, (r_ptr->flags1 & RF1_UNIQUE) ? "もどき" : " "), - format("%s%s", (r_ptr->flags1 & RF1_UNIQUE) ? "Fake " : "", r_name + r_ptr->name)), - (long int)mon_odds[i] / 100, (long int)mon_odds[i] % 100); - prt(buf, 5 + i, 1); - } - - prt(_("どれに賭けますか:", "Which monster: "), 0, 0); - while (TRUE) - { - int i = inkey(); - - if (i == ESCAPE) - { - screen_load(); - return FALSE; - } - - if (i >= '1' && i <= '4') - { - sel_monster = i - '1'; - battle_odds = mon_odds[sel_monster]; - break; - } - - else bell(); - } - - clear_bldg(4, 4); - for (int i = 0; i < 4; i++) - if (i != sel_monster) clear_bldg(i + 5, i + 5); - - maxbet = player_ptr->lev * 200; - - /* We can't bet more than we have */ - maxbet = MIN(maxbet, player_ptr->au); - - /* Get the wager */ - strcpy(out_val, ""); - sprintf(tmp_str, _("賭け金 (1-%ld)?", "Your wager (1-%ld) ? "), (long int)maxbet); - - /* - * Use get_string() because we may need more than - * the s16b value returned by get_quantity(). - */ - if (!get_string(tmp_str, out_val, 32)) - { - screen_load(); - return FALSE; - } - - for (p = out_val; *p == ' '; p++); - - wager = atol(p); - if (wager > player_ptr->au) - { - msg_print(_("おい!金が足りないじゃないか!出ていけ!", "Hey! You don't have the gold - get out of here!")); - - msg_print(NULL); - screen_load(); - return FALSE; - } - else if (wager > maxbet) - { - msg_format(_("%ldゴールドだけ受けよう。残りは取っときな。", "I'll take %ld gold of that. Keep the rest."), (long int)maxbet); - - wager = maxbet; - } - else if (wager < 1) - { - msg_print(_("OK、1ゴールドでいこう。", "Ok, we'll start with 1 gold.")); - wager = 1; - } - - msg_print(NULL); - battle_odds = MAX(wager + 1, wager * battle_odds / 100); - kakekin = wager; - player_ptr->au -= wager; - reset_tim_flags(player_ptr); - - prepare_change_floor_mode(player_ptr, CFM_SAVE_FLOORS); - - player_ptr->phase_out = TRUE; - player_ptr->leaving = TRUE; - player_ptr->leave_bldg = TRUE; - - screen_load(); - return TRUE; -} - - -/*! * @brief 本日の賞金首情報を表示する。 * @param player_ptr プレーヤーへの参照ポインタ * @return なし -- 2.11.0