From 6a82252b0115e7fbfe5e970c290fbace2446c944 Mon Sep 17 00:00:00 2001 From: Hourier <66951241+Hourier@users.noreply.github.com> Date: Sun, 18 Aug 2024 10:23:11 +0900 Subject: [PATCH 01/11] =?UTF-8?q?[Fix]=20#4496=20=E3=82=AC=E3=83=A9?= =?UTF-8?q?=E3=82=B9=E3=81=AE=E5=BA=8A=E3=81=AB=E3=81=97=E3=81=AA=E3=81=91?= =?UTF-8?q?=E3=82=8C=E3=81=B0=E3=81=84=E3=81=91=E3=81=AA=E3=81=84=E7=AE=87?= =?UTF-8?q?=E6=89=80=E3=81=8C=E5=A3=81=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=9F=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/room/rooms-special.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/room/rooms-special.cpp b/src/room/rooms-special.cpp index 707c5d0804..6aec8441e1 100644 --- a/src/room/rooms-special.cpp +++ b/src/room/rooms-special.cpp @@ -28,7 +28,7 @@ namespace { void place_floor_glass(PlayerType *player_ptr, Grid &grid) { place_grid(player_ptr, &grid, GB_FLOOR); - grid.feat = feat_glass_wall; + grid.feat = feat_glass_floor; } void place_outer_glass(PlayerType *player_ptr, Grid &grid) From 0a1258bf492072c5b2c7e22369bb10a7f7f7b485 Mon Sep 17 00:00:00 2001 From: Hourier <66951241+Hourier@users.noreply.github.com> Date: Wed, 14 Aug 2024 20:30:44 +0900 Subject: [PATCH 02/11] =?UTF-8?q?[Refactor]=20#4489=20melee=5Farena=5Fcomm?= =?UTF-8?q?()=20=E3=81=AEMeleeArena=20=E3=81=AB=E9=96=A2=E3=81=99=E3=82=8B?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=82=92=E6=9C=80=E9=81=A9=E5=8C=96=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/market/melee-arena.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/market/melee-arena.cpp b/src/market/melee-arena.cpp index 24c5fa0eda..0fccc0e82a 100644 --- a/src/market/melee-arena.cpp +++ b/src/market/melee-arena.cpp @@ -20,6 +20,8 @@ #include "view/display-messages.h" #include "world/world.h" #include +#include +#include /*! * @brief モンスター闘技場のメインルーチン @@ -51,18 +53,16 @@ bool melee_arena_comm(PlayerType *player_ptr) const auto &melee_arena = MeleeArena::get_instance(); for (auto i = 0; i < NUM_GLADIATORS; i++) { const auto &gladiator = melee_arena.get_gladiator(i); - const auto &monrace = monraces_info[gladiator.monrace_id]; //@ 後でシングルトンに差し替え. - std::string name; + const auto &monrace = gladiator.get_monrace(); + std::stringstream ss; if (monrace.kind_flags.has(MonsterKindType::UNIQUE)) { - name = _(monrace.name, "Fake "); - name.append(_("もどき", monrace.name)); + ss << _(monrace.name, "Fake ") << _("もどき", monrace.name); } else { - name = monrace.name; - name.append(_(" ", "")); + ss << monrace.name << _(" ", ""); } constexpr auto fmt = _("%d) %-58s %4d.%02d倍", "%d) %-58s %4d.%02d"); - prt(format(fmt, i + 1, name.data(), gladiator.odds / 100, gladiator.odds % 100), 5 + i, 1); + prt(format(fmt, i + 1, ss.str().data(), gladiator.odds / 100, gladiator.odds % 100), 5 + i, 1); } prt(_("どれに賭けますか:", "Which monster: "), 0, 0); From 763703cd3a66816506cc5dd160c985907584218d Mon Sep 17 00:00:00 2001 From: Hourier <66951241+Hourier@users.noreply.github.com> Date: Wed, 14 Aug 2024 20:41:54 +0900 Subject: [PATCH 03/11] =?UTF-8?q?[Refactor]=20#4489=20MeleeArena::build=5F?= =?UTF-8?q?gladiators=5Fnames()=20=E3=82=92=E5=AE=9F=E8=A3=85=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/market/melee-arena.cpp | 13 +++---------- src/system/building-type-definition.cpp | 18 ++++++++++++++++++ src/system/building-type-definition.h | 2 ++ 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/market/melee-arena.cpp b/src/market/melee-arena.cpp index 0fccc0e82a..0c3ed1be06 100644 --- a/src/market/melee-arena.cpp +++ b/src/market/melee-arena.cpp @@ -51,18 +51,11 @@ bool melee_arena_comm(PlayerType *player_ptr) prt(_("モンスター 倍率", "Monsters Odds"), 4, 4); const auto &melee_arena = MeleeArena::get_instance(); + const auto names = melee_arena.build_gladiators_names(); for (auto i = 0; i < NUM_GLADIATORS; i++) { - const auto &gladiator = melee_arena.get_gladiator(i); - const auto &monrace = gladiator.get_monrace(); - std::stringstream ss; - if (monrace.kind_flags.has(MonsterKindType::UNIQUE)) { - ss << _(monrace.name, "Fake ") << _("もどき", monrace.name); - } else { - ss << monrace.name << _(" ", ""); - } - constexpr auto fmt = _("%d) %-58s %4d.%02d倍", "%d) %-58s %4d.%02d"); - prt(format(fmt, i + 1, ss.str().data(), gladiator.odds / 100, gladiator.odds % 100), 5 + i, 1); + const auto &gladiator = melee_arena.get_gladiator(i); + prt(format(fmt, i + 1, names[i].data(), gladiator.odds / 100, gladiator.odds % 100), 5 + i, 1); } prt(_("どれに賭けますか:", "Which monster: "), 0, 0); diff --git a/src/system/building-type-definition.cpp b/src/system/building-type-definition.cpp index 2882a9e9d1..6fa8c17020 100644 --- a/src/system/building-type-definition.cpp +++ b/src/system/building-type-definition.cpp @@ -51,6 +51,24 @@ const std::array &MeleeArena::get_gladiators() c return this->gladiators; } +std::vector MeleeArena::build_gladiators_names() const +{ + std::vector names; + for (const auto &gladiator : this->gladiators) { + const auto &monrace = gladiator.get_monrace(); + std::stringstream ss; + if (monrace.kind_flags.has(MonsterKindType::UNIQUE)) { + ss << _(monrace.name, "Fake ") << _("もどき", monrace.name); + } else { + ss << monrace.name << _(" ", ""); + } + + names.push_back(ss.str()); + } + + return names; +} + /*! * @brief モンスター闘技場に参加するモンスターを更新する。 * @param player_ptr プレイヤーへの参照ポインタ diff --git a/src/system/building-type-definition.h b/src/system/building-type-definition.h index 0924d08080..ac5be96fac 100644 --- a/src/system/building-type-definition.h +++ b/src/system/building-type-definition.h @@ -2,6 +2,7 @@ #include #include +#include #include struct building_type { @@ -56,6 +57,7 @@ class MeleeArena { const MeleeGladiator &get_gladiator(int n) const; void set_gladiator(int n, const MeleeGladiator &gladiator); const std::array &get_gladiators() const; //!< @detail セーブデータへの書き込みにしか使わないこと. + std::vector build_gladiators_names() const; //!< @detail 要素数は常にNUM_GLADIATORSと同じ. void update_gladiators(PlayerType *player_ptr); private: From eb8ddc3f230c6f34522bdee61bc5607f018acca3 Mon Sep 17 00:00:00 2001 From: Hourier <66951241+Hourier@users.noreply.github.com> Date: Wed, 14 Aug 2024 20:59:15 +0900 Subject: [PATCH 04/11] =?UTF-8?q?[Refactor]=20#4489=20melee=5Farena=5Fcomm?= =?UTF-8?q?()=20display=5Fgladiators()=20=E3=82=92=E5=88=86=E9=9B=A2?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/market/melee-arena.cpp | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/market/melee-arena.cpp b/src/market/melee-arena.cpp index 0c3ed1be06..5dc6a2e988 100644 --- a/src/market/melee-arena.cpp +++ b/src/market/melee-arena.cpp @@ -23,6 +23,22 @@ #include #include +namespace { +void display_gladiators() +{ + prt(_("モンスター 倍率", "Monsters Odds"), 4, 4); + const auto &melee_arena = MeleeArena::get_instance(); + const auto names = melee_arena.build_gladiators_names(); + for (auto i = 0; i < NUM_GLADIATORS; i++) { + constexpr auto fmt = _("%d) %-58s %4d.%02d倍", "%d) %-58s %4d.%02d"); + const auto &gladiator = melee_arena.get_gladiator(i); + prt(format(fmt, i + 1, names[i].data(), gladiator.odds / 100, gladiator.odds % 100), 5 + i, 1); + } + + prt(_("どれに賭けますか:", "Which monster: "), 0, 0); +} +} + /*! * @brief モンスター闘技場のメインルーチン * @param player_ptr プレイヤーへの参照ポインタ @@ -48,17 +64,8 @@ bool melee_arena_comm(PlayerType *player_ptr) } clear_bldg(4, 10); - - prt(_("モンスター 倍率", "Monsters Odds"), 4, 4); - const auto &melee_arena = MeleeArena::get_instance(); - const auto names = melee_arena.build_gladiators_names(); - for (auto i = 0; i < NUM_GLADIATORS; i++) { - constexpr auto fmt = _("%d) %-58s %4d.%02d倍", "%d) %-58s %4d.%02d"); - const auto &gladiator = melee_arena.get_gladiator(i); - prt(format(fmt, i + 1, names[i].data(), gladiator.odds / 100, gladiator.odds % 100), 5 + i, 1); - } - - prt(_("どれに賭けますか:", "Which monster: "), 0, 0); + display_gladiators(); + auto &melee_arena = MeleeArena::get_instance(); while (true) { const auto i = inkey(); if (i == ESCAPE) { From 4b04d403f24f6f96cce953417db79ca2f07d97d9 Mon Sep 17 00:00:00 2001 From: Hourier <66951241+Hourier@users.noreply.github.com> Date: Wed, 14 Aug 2024 21:13:46 +0900 Subject: [PATCH 05/11] =?UTF-8?q?[Refactor]=20#4489=20bet=5Fnumber=20?= =?UTF-8?q?=E3=82=92MeleeArena=20=E3=82=AF=E3=83=A9=E3=82=B9=E3=81=AE?= =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=BC=E3=83=AB=E3=83=89=E3=81=B8=E7=B9=B0?= =?UTF-8?q?=E3=82=8A=E8=BE=BC=E3=82=93=E3=81=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/market/melee-arena.cpp | 6 +++--- src/system/building-type-definition.cpp | 1 - src/system/building-type-definition.h | 3 ++- src/world/world-turn-processor.cpp | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/market/melee-arena.cpp b/src/market/melee-arena.cpp index 5dc6a2e988..4c8627bf44 100644 --- a/src/market/melee-arena.cpp +++ b/src/market/melee-arena.cpp @@ -74,8 +74,8 @@ bool melee_arena_comm(PlayerType *player_ptr) } if (i >= '1' && i <= '4') { - bet_number = i - '1'; - battle_odds = melee_arena.get_gladiator(bet_number).odds; + melee_arena.bet_number = i - '1'; + battle_odds = melee_arena.get_gladiator(melee_arena.bet_number).odds; break; } @@ -86,7 +86,7 @@ bool melee_arena_comm(PlayerType *player_ptr) clear_bldg(4, 4); for (auto i = 0; i < NUM_GLADIATORS; i++) { - if (i != bet_number) { + if (i != melee_arena.bet_number) { clear_bldg(i + 5, i + 5); } } diff --git a/src/system/building-type-definition.cpp b/src/system/building-type-definition.cpp index 6fa8c17020..bfa437d973 100644 --- a/src/system/building-type-definition.cpp +++ b/src/system/building-type-definition.cpp @@ -11,7 +11,6 @@ std::array buildings; int battle_odds; int wager_melee; -int bet_number; MeleeGladiator::MeleeGladiator(MonsterRaceId monrace_id, uint32_t odds) : monrace_id(monrace_id) diff --git a/src/system/building-type-definition.h b/src/system/building-type-definition.h index ac5be96fac..96c4992860 100644 --- a/src/system/building-type-definition.h +++ b/src/system/building-type-definition.h @@ -39,7 +39,6 @@ class MeleeGladiator { extern int battle_odds; extern int wager_melee; -extern int bet_number; //!< モンスター闘技場定義. constexpr auto NUM_GLADIATORS = 4; @@ -53,6 +52,8 @@ class MeleeArena { MeleeArena &operator=(MeleeArena &&) = delete; static MeleeArena &get_instance(); + int bet_number = 0; + MeleeGladiator &get_gladiator(int n); const MeleeGladiator &get_gladiator(int n) const; void set_gladiator(int n, const MeleeGladiator &gladiator); diff --git a/src/world/world-turn-processor.cpp b/src/world/world-turn-processor.cpp index 536c29ca54..b71d0792df 100644 --- a/src/world/world-turn-processor.cpp +++ b/src/world/world-turn-processor.cpp @@ -178,7 +178,7 @@ void WorldTurnProcessor::process_monster_arena_winner(int win_m_idx) msg_format(_("%sが勝利した!", "%s won!"), m_name.data()); msg_print(nullptr); - if (win_m_idx == (bet_number + 1)) { + if (win_m_idx == MeleeArena::get_instance().bet_number + 1) { msg_print(_("おめでとうございます。", "Congratulations.")); msg_format(_("%d$を受け取った。", "You received %d gold."), battle_odds); this->player_ptr->au += battle_odds; From 1403cccb8a897ca782f7c176feb048c645afb174 Mon Sep 17 00:00:00 2001 From: Hourier <66951241+Hourier@users.noreply.github.com> Date: Wed, 14 Aug 2024 21:17:57 +0900 Subject: [PATCH 06/11] =?UTF-8?q?[Refactor]=20#4489=20wager=5Fmelee=20?= =?UTF-8?q?=E3=82=92MeleeArena=20=E3=82=AF=E3=83=A9=E3=82=B9=E3=81=AE?= =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=BC=E3=83=AB=E3=83=89=E3=81=B8=E7=B9=B0?= =?UTF-8?q?=E3=82=8A=E8=BE=BC=E3=82=93=E3=81=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/market/melee-arena.cpp | 2 +- src/system/building-type-definition.cpp | 11 ++++++++++- src/system/building-type-definition.h | 5 +++-- src/world/world-turn-processor.cpp | 2 +- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/market/melee-arena.cpp b/src/market/melee-arena.cpp index 4c8627bf44..2f55ec5d5f 100644 --- a/src/market/melee-arena.cpp +++ b/src/market/melee-arena.cpp @@ -109,7 +109,7 @@ bool melee_arena_comm(PlayerType *player_ptr) msg_print(nullptr); battle_odds = std::max(*wager + 1, *wager * battle_odds / 100); - wager_melee = *wager; + melee_arena.set_wager(*wager); player_ptr->au -= *wager; reset_tim_flags(player_ptr); diff --git a/src/system/building-type-definition.cpp b/src/system/building-type-definition.cpp index bfa437d973..14d6a812a4 100644 --- a/src/system/building-type-definition.cpp +++ b/src/system/building-type-definition.cpp @@ -10,7 +10,6 @@ std::array buildings; int battle_odds; -int wager_melee; MeleeGladiator::MeleeGladiator(MonsterRaceId monrace_id, uint32_t odds) : monrace_id(monrace_id) @@ -30,6 +29,16 @@ MeleeArena &MeleeArena::get_instance() return instance; } +int MeleeArena::get_wager() const +{ + return this->wager; +} + +void MeleeArena::set_wager(int value) +{ + this->wager = value; +} + MeleeGladiator &MeleeArena::get_gladiator(int n) { return this->gladiators.at(n); diff --git a/src/system/building-type-definition.h b/src/system/building-type-definition.h index 96c4992860..c749a09ed7 100644 --- a/src/system/building-type-definition.h +++ b/src/system/building-type-definition.h @@ -38,7 +38,6 @@ class MeleeGladiator { }; extern int battle_odds; -extern int wager_melee; //!< モンスター闘技場定義. constexpr auto NUM_GLADIATORS = 4; @@ -53,7 +52,8 @@ class MeleeArena { static MeleeArena &get_instance(); int bet_number = 0; - + int get_wager() const; + void set_wager(int value); MeleeGladiator &get_gladiator(int n); const MeleeGladiator &get_gladiator(int n) const; void set_gladiator(int n, const MeleeGladiator &gladiator); @@ -65,6 +65,7 @@ class MeleeArena { MeleeArena() = default; static MeleeArena instance; + int wager = 0; //!< @detail 引き分け時の払い戻しに必要. std::array gladiators{}; int decide_max_level() const; diff --git a/src/world/world-turn-processor.cpp b/src/world/world-turn-processor.cpp index b71d0792df..e8a3ba7c6b 100644 --- a/src/world/world-turn-processor.cpp +++ b/src/world/world-turn-processor.cpp @@ -200,7 +200,7 @@ void WorldTurnProcessor::process_monster_arena_draw() } msg_print(_("申し訳ありませんが、この勝負は引き分けとさせていただきます。", "Sorry, but this battle ended in a draw.")); - this->player_ptr->au += wager_melee; + this->player_ptr->au += MeleeArena::get_instance().get_wager(); msg_print(nullptr); this->player_ptr->energy_need = 0; auto &melee_arena = MeleeArena::get_instance(); From 5cfdb2e6577d1039e3ff7409eea1ac90a942cfb9 Mon Sep 17 00:00:00 2001 From: Hourier <66951241+Hourier@users.noreply.github.com> Date: Wed, 14 Aug 2024 21:29:01 +0900 Subject: [PATCH 07/11] =?UTF-8?q?[Refactor]=20#4489=20battle=5Fodds=20?= =?UTF-8?q?=E3=82=92MeleeArena=20=E3=82=AF=E3=83=A9=E3=82=B9=E3=81=AE?= =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=BC=E3=83=AB=E3=83=89=E3=81=B8=E7=B9=B0?= =?UTF-8?q?=E3=82=8A=E8=BE=BC=E3=82=93=E3=81=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Notes: odds は本来「倍率」の意味だが、何故か「払戻金」の意味で使っている箇所があり意味不明なので修正する --- src/market/melee-arena.cpp | 4 ++-- src/system/building-type-definition.cpp | 16 +++++++++++++++- src/system/building-type-definition.h | 6 ++++-- src/world/world-turn-processor.cpp | 11 ++++++----- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/market/melee-arena.cpp b/src/market/melee-arena.cpp index 2f55ec5d5f..d3bf21f240 100644 --- a/src/market/melee-arena.cpp +++ b/src/market/melee-arena.cpp @@ -75,7 +75,7 @@ bool melee_arena_comm(PlayerType *player_ptr) if (i >= '1' && i <= '4') { melee_arena.bet_number = i - '1'; - battle_odds = melee_arena.get_gladiator(melee_arena.bet_number).odds; + melee_arena.update_odds(); break; } @@ -108,7 +108,7 @@ bool melee_arena_comm(PlayerType *player_ptr) } msg_print(nullptr); - battle_odds = std::max(*wager + 1, *wager * battle_odds / 100); + melee_arena.set_odds(*wager); melee_arena.set_wager(*wager); player_ptr->au -= *wager; reset_tim_flags(player_ptr); diff --git a/src/system/building-type-definition.cpp b/src/system/building-type-definition.cpp index 14d6a812a4..0090e68ed6 100644 --- a/src/system/building-type-definition.cpp +++ b/src/system/building-type-definition.cpp @@ -9,7 +9,6 @@ #include std::array buildings; -int battle_odds; MeleeGladiator::MeleeGladiator(MonsterRaceId monrace_id, uint32_t odds) : monrace_id(monrace_id) @@ -39,6 +38,21 @@ void MeleeArena::set_wager(int value) this->wager = value; } +int MeleeArena::get_odds() const +{ + return this->odds; +} + +void MeleeArena::set_odds(int input_wager) +{ + this->odds = std::max(input_wager + 1, input_wager * this->get_odds() / 100); +} + +void MeleeArena::update_odds() +{ + this->odds = this->get_gladiator(this->bet_number).odds; +} + MeleeGladiator &MeleeArena::get_gladiator(int n) { return this->gladiators.at(n); diff --git a/src/system/building-type-definition.h b/src/system/building-type-definition.h index c749a09ed7..7f36d04da5 100644 --- a/src/system/building-type-definition.h +++ b/src/system/building-type-definition.h @@ -37,8 +37,6 @@ class MeleeGladiator { const MonsterRaceInfo &get_monrace() const; }; -extern int battle_odds; - //!< モンスター闘技場定義. constexpr auto NUM_GLADIATORS = 4; class PlayerType; //!< @todo 暫定、後で消す. @@ -54,6 +52,9 @@ class MeleeArena { int bet_number = 0; int get_wager() const; void set_wager(int value); + int get_odds() const; + void set_odds(int input_wager); + void update_odds(); MeleeGladiator &get_gladiator(int n); const MeleeGladiator &get_gladiator(int n) const; void set_gladiator(int n, const MeleeGladiator &gladiator); @@ -66,6 +67,7 @@ class MeleeArena { static MeleeArena instance; int wager = 0; //!< @detail 引き分け時の払い戻しに必要. + int odds = 0; std::array gladiators{}; int decide_max_level() const; diff --git a/src/world/world-turn-processor.cpp b/src/world/world-turn-processor.cpp index e8a3ba7c6b..a253922a19 100644 --- a/src/world/world-turn-processor.cpp +++ b/src/world/world-turn-processor.cpp @@ -178,18 +178,19 @@ void WorldTurnProcessor::process_monster_arena_winner(int win_m_idx) msg_format(_("%sが勝利した!", "%s won!"), m_name.data()); msg_print(nullptr); - if (win_m_idx == MeleeArena::get_instance().bet_number + 1) { + auto &melee_arena = MeleeArena::get_instance(); + if (win_m_idx == melee_arena.bet_number + 1) { msg_print(_("おめでとうございます。", "Congratulations.")); - msg_format(_("%d$を受け取った。", "You received %d gold."), battle_odds); - this->player_ptr->au += battle_odds; + const auto odds = melee_arena.get_odds(); + msg_format(_("%d$を受け取った。", "You received %d gold."), odds); + this->player_ptr->au += odds; } else { msg_print(_("残念でした。", "You lost gold.")); } msg_print(nullptr); this->player_ptr->energy_need = 0; - auto &melee_arena = MeleeArena::get_instance(); - melee_arena.update_gladiators(player_ptr); + melee_arena.update_gladiators(this->player_ptr); } void WorldTurnProcessor::process_monster_arena_draw() From 4ad1c3fa9b06ca6e640b56cbf63de37572906bbc Mon Sep 17 00:00:00 2001 From: Hourier <66951241+Hourier@users.noreply.github.com> Date: Thu, 15 Aug 2024 12:57:23 +0900 Subject: [PATCH 08/11] =?UTF-8?q?[Refactor]=20#4489=20MeleeArena::bet=5Fnu?= =?UTF-8?q?mber=20=E3=82=92=E3=82=AB=E3=83=97=E3=82=BB=E3=83=AB=E5=8C=96?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/market/melee-arena.cpp | 4 ++-- src/system/building-type-definition.cpp | 10 ++++++++++ src/system/building-type-definition.h | 4 +++- src/world/world-turn-processor.cpp | 2 +- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/market/melee-arena.cpp b/src/market/melee-arena.cpp index d3bf21f240..498fbc280a 100644 --- a/src/market/melee-arena.cpp +++ b/src/market/melee-arena.cpp @@ -74,7 +74,7 @@ bool melee_arena_comm(PlayerType *player_ptr) } if (i >= '1' && i <= '4') { - melee_arena.bet_number = i - '1'; + melee_arena.set_bet_number(i - '1'); melee_arena.update_odds(); break; } @@ -86,7 +86,7 @@ bool melee_arena_comm(PlayerType *player_ptr) clear_bldg(4, 4); for (auto i = 0; i < NUM_GLADIATORS; i++) { - if (i != melee_arena.bet_number) { + if (!melee_arena.matches_bet_number(i)) { clear_bldg(i + 5, i + 5); } } diff --git a/src/system/building-type-definition.cpp b/src/system/building-type-definition.cpp index 0090e68ed6..6358f84b1b 100644 --- a/src/system/building-type-definition.cpp +++ b/src/system/building-type-definition.cpp @@ -28,6 +28,16 @@ MeleeArena &MeleeArena::get_instance() return instance; } +bool MeleeArena::matches_bet_number(int value) const +{ + return this->bet_number == value; +} + +void MeleeArena::set_bet_number(int value) +{ + this->bet_number = value; +} + int MeleeArena::get_wager() const { return this->wager; diff --git a/src/system/building-type-definition.h b/src/system/building-type-definition.h index 7f36d04da5..8b414dc01a 100644 --- a/src/system/building-type-definition.h +++ b/src/system/building-type-definition.h @@ -49,7 +49,8 @@ class MeleeArena { MeleeArena &operator=(MeleeArena &&) = delete; static MeleeArena &get_instance(); - int bet_number = 0; + bool matches_bet_number(int value) const; + void set_bet_number(int value); int get_wager() const; void set_wager(int value); int get_odds() const; @@ -66,6 +67,7 @@ class MeleeArena { MeleeArena() = default; static MeleeArena instance; + int bet_number = 0; int wager = 0; //!< @detail 引き分け時の払い戻しに必要. int odds = 0; std::array gladiators{}; diff --git a/src/world/world-turn-processor.cpp b/src/world/world-turn-processor.cpp index a253922a19..f4377d06ea 100644 --- a/src/world/world-turn-processor.cpp +++ b/src/world/world-turn-processor.cpp @@ -179,7 +179,7 @@ void WorldTurnProcessor::process_monster_arena_winner(int win_m_idx) msg_print(nullptr); auto &melee_arena = MeleeArena::get_instance(); - if (win_m_idx == melee_arena.bet_number + 1) { + if (melee_arena.matches_bet_number(win_m_idx - 1)) { msg_print(_("おめでとうございます。", "Congratulations.")); const auto odds = melee_arena.get_odds(); msg_format(_("%d$を受け取った。", "You received %d gold."), odds); From 3d53de13dc8ca1bd63d29d3608fedf3cb682166f Mon Sep 17 00:00:00 2001 From: Hourier <66951241+Hourier@users.noreply.github.com> Date: Thu, 15 Aug 2024 13:03:01 +0900 Subject: [PATCH 09/11] =?UTF-8?q?[Fix]=20#4489=20=E8=B3=AD=E3=81=91?= =?UTF-8?q?=E9=87=91=E3=81=AE=E5=80=8D=E7=8E=87=E3=81=A8=E6=89=95=E6=88=BB?= =?UTF-8?q?=E9=87=91=E3=81=8C=E5=90=8C=E4=B8=80=E5=A4=89=E6=95=B0=E3=81=A7?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84=E3=81=9F?= =?UTF-8?q?=E8=A8=AD=E8=A8=88=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E3=81=97=E3=80=81=E5=88=A5=E3=80=85=E3=81=AE=E3=83=95?= =?UTF-8?q?=E3=82=A3=E3=83=BC=E3=83=AB=E3=83=89=E3=81=A8=E3=81=97=E3=81=A6?= =?UTF-8?q?=E5=86=8D=E5=AE=9A=E7=BE=A9=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/market/melee-arena.cpp | 8 +++----- src/system/building-type-definition.cpp | 8 ++++---- src/system/building-type-definition.h | 5 +++-- src/world/world-turn-processor.cpp | 2 +- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/market/melee-arena.cpp b/src/market/melee-arena.cpp index 498fbc280a..ef9ac59872 100644 --- a/src/market/melee-arena.cpp +++ b/src/market/melee-arena.cpp @@ -73,15 +73,13 @@ bool melee_arena_comm(PlayerType *player_ptr) return false; } - if (i >= '1' && i <= '4') { + if ((i >= '1') && (i <= '4')) { melee_arena.set_bet_number(i - '1'); melee_arena.update_odds(); break; } - else { - bell(); - } + bell(); } clear_bldg(4, 4); @@ -108,7 +106,7 @@ bool melee_arena_comm(PlayerType *player_ptr) } msg_print(nullptr); - melee_arena.set_odds(*wager); + melee_arena.set_payback(*wager); melee_arena.set_wager(*wager); player_ptr->au -= *wager; reset_tim_flags(player_ptr); diff --git a/src/system/building-type-definition.cpp b/src/system/building-type-definition.cpp index 6358f84b1b..863f4bfe07 100644 --- a/src/system/building-type-definition.cpp +++ b/src/system/building-type-definition.cpp @@ -48,14 +48,14 @@ void MeleeArena::set_wager(int value) this->wager = value; } -int MeleeArena::get_odds() const +int MeleeArena::get_payback() const { - return this->odds; + return this->payback; } -void MeleeArena::set_odds(int input_wager) +void MeleeArena::set_payback(int input_wager) { - this->odds = std::max(input_wager + 1, input_wager * this->get_odds() / 100); + this->payback = std::max(input_wager + 1, input_wager * this->odds / 100); } void MeleeArena::update_odds() diff --git a/src/system/building-type-definition.h b/src/system/building-type-definition.h index 8b414dc01a..787fbd17dd 100644 --- a/src/system/building-type-definition.h +++ b/src/system/building-type-definition.h @@ -53,8 +53,8 @@ class MeleeArena { void set_bet_number(int value); int get_wager() const; void set_wager(int value); - int get_odds() const; - void set_odds(int input_wager); + int get_payback() const; + void set_payback(int input_wager); void update_odds(); MeleeGladiator &get_gladiator(int n); const MeleeGladiator &get_gladiator(int n) const; @@ -70,6 +70,7 @@ class MeleeArena { int bet_number = 0; int wager = 0; //!< @detail 引き分け時の払い戻しに必要. int odds = 0; + int payback = 0; std::array gladiators{}; int decide_max_level() const; diff --git a/src/world/world-turn-processor.cpp b/src/world/world-turn-processor.cpp index f4377d06ea..8f3f61dac9 100644 --- a/src/world/world-turn-processor.cpp +++ b/src/world/world-turn-processor.cpp @@ -181,7 +181,7 @@ void WorldTurnProcessor::process_monster_arena_winner(int win_m_idx) auto &melee_arena = MeleeArena::get_instance(); if (melee_arena.matches_bet_number(win_m_idx - 1)) { msg_print(_("おめでとうございます。", "Congratulations.")); - const auto odds = melee_arena.get_odds(); + const auto odds = melee_arena.get_payback(); msg_format(_("%d$を受け取った。", "You received %d gold."), odds); this->player_ptr->au += odds; } else { From a8e5daa3756ac3e633c8421d88b5fd929d867ab5 Mon Sep 17 00:00:00 2001 From: Hourier <66951241+Hourier@users.noreply.github.com> Date: Thu, 15 Aug 2024 18:54:32 +0900 Subject: [PATCH 10/11] =?UTF-8?q?[Refactor]=20#4489=20odds=E3=83=95?= =?UTF-8?q?=E3=82=A3=E3=83=BC=E3=83=AB=E3=83=89=E3=81=8C=E4=BA=8C=E9=87=8D?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84=E3=81=9F?= =?UTF-8?q?=E3=81=AE=E3=81=A7MeleeArena=20=E3=81=AE=E6=96=B9=E3=81=8B?= =?UTF-8?q?=E3=82=89=E3=81=AF=E6=B6=88=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/market/melee-arena.cpp | 1 - src/system/building-type-definition.cpp | 8 ++------ src/system/building-type-definition.h | 2 -- src/world/world-turn-processor.cpp | 6 +++--- 4 files changed, 5 insertions(+), 12 deletions(-) diff --git a/src/market/melee-arena.cpp b/src/market/melee-arena.cpp index ef9ac59872..1512e59c01 100644 --- a/src/market/melee-arena.cpp +++ b/src/market/melee-arena.cpp @@ -75,7 +75,6 @@ bool melee_arena_comm(PlayerType *player_ptr) if ((i >= '1') && (i <= '4')) { melee_arena.set_bet_number(i - '1'); - melee_arena.update_odds(); break; } diff --git a/src/system/building-type-definition.cpp b/src/system/building-type-definition.cpp index 863f4bfe07..cb8c6180ee 100644 --- a/src/system/building-type-definition.cpp +++ b/src/system/building-type-definition.cpp @@ -55,12 +55,8 @@ int MeleeArena::get_payback() const void MeleeArena::set_payback(int input_wager) { - this->payback = std::max(input_wager + 1, input_wager * this->odds / 100); -} - -void MeleeArena::update_odds() -{ - this->odds = this->get_gladiator(this->bet_number).odds; + const int odds = this->get_gladiator(this->bet_number).odds; + this->payback = std::max(input_wager + 1, input_wager * odds / 100); } MeleeGladiator &MeleeArena::get_gladiator(int n) diff --git a/src/system/building-type-definition.h b/src/system/building-type-definition.h index 787fbd17dd..912f9e023d 100644 --- a/src/system/building-type-definition.h +++ b/src/system/building-type-definition.h @@ -55,7 +55,6 @@ class MeleeArena { void set_wager(int value); int get_payback() const; void set_payback(int input_wager); - void update_odds(); MeleeGladiator &get_gladiator(int n); const MeleeGladiator &get_gladiator(int n) const; void set_gladiator(int n, const MeleeGladiator &gladiator); @@ -69,7 +68,6 @@ class MeleeArena { int bet_number = 0; int wager = 0; //!< @detail 引き分け時の払い戻しに必要. - int odds = 0; int payback = 0; std::array gladiators{}; diff --git a/src/world/world-turn-processor.cpp b/src/world/world-turn-processor.cpp index 8f3f61dac9..7c0003bf32 100644 --- a/src/world/world-turn-processor.cpp +++ b/src/world/world-turn-processor.cpp @@ -181,9 +181,9 @@ void WorldTurnProcessor::process_monster_arena_winner(int win_m_idx) auto &melee_arena = MeleeArena::get_instance(); if (melee_arena.matches_bet_number(win_m_idx - 1)) { msg_print(_("おめでとうございます。", "Congratulations.")); - const auto odds = melee_arena.get_payback(); - msg_format(_("%d$を受け取った。", "You received %d gold."), odds); - this->player_ptr->au += odds; + const auto payback = melee_arena.get_payback(); + msg_format(_("%d$を受け取った。", "You received %d gold."), payback); + this->player_ptr->au += payback; } else { msg_print(_("残念でした。", "You lost gold.")); } From 617472f1eadc70e48144a8944e8357497eff059a Mon Sep 17 00:00:00 2001 From: Hourier <66951241+Hourier@users.noreply.github.com> Date: Wed, 21 Aug 2024 22:38:25 +0900 Subject: [PATCH 11/11] =?UTF-8?q?[Refactor]=20#4489=20=E6=89=95=E6=88=BB?= =?UTF-8?q?=E3=81=97=E3=81=AF=E3=82=AA=E3=83=83=E3=82=BA=E3=81=8C=E4=BF=9D?= =?UTF-8?q?=E6=8C=81=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84=E3=82=8B=E3=81=AE?= =?UTF-8?q?=E3=81=A7=E8=B3=AD=E3=81=91=E9=87=91=E3=81=8B=E3=82=89=E8=A8=88?= =?UTF-8?q?=E7=AE=97=E3=81=A7=E3=81=8D=E3=80=81=E3=82=88=E3=81=A3=E3=81=A6?= =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=BC=E3=83=AB=E3=83=89=E3=81=AB=E3=81=99?= =?UTF-8?q?=E3=82=8B=E5=BF=85=E8=A6=81=E3=81=8C=E3=81=AA=E3=81=84=E3=81=AE?= =?UTF-8?q?=E3=81=A7payback=E3=82=92=E5=89=8A=E9=99=A4=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/market/melee-arena.cpp | 1 - src/system/building-type-definition.cpp | 16 +++++----------- src/system/building-type-definition.h | 7 ++----- src/world/world-turn-processor.cpp | 2 +- 4 files changed, 8 insertions(+), 18 deletions(-) diff --git a/src/market/melee-arena.cpp b/src/market/melee-arena.cpp index 1512e59c01..e0fb18cc95 100644 --- a/src/market/melee-arena.cpp +++ b/src/market/melee-arena.cpp @@ -105,7 +105,6 @@ bool melee_arena_comm(PlayerType *player_ptr) } msg_print(nullptr); - melee_arena.set_payback(*wager); melee_arena.set_wager(*wager); player_ptr->au -= *wager; reset_tim_flags(player_ptr); diff --git a/src/system/building-type-definition.cpp b/src/system/building-type-definition.cpp index cb8c6180ee..c75e61b13c 100644 --- a/src/system/building-type-definition.cpp +++ b/src/system/building-type-definition.cpp @@ -38,25 +38,19 @@ void MeleeArena::set_bet_number(int value) this->bet_number = value; } -int MeleeArena::get_wager() const -{ - return this->wager; -} - void MeleeArena::set_wager(int value) { this->wager = value; } -int MeleeArena::get_payback() const +int MeleeArena::get_payback(bool is_draw) const { - return this->payback; -} + if (is_draw) { + return this->wager; + } -void MeleeArena::set_payback(int input_wager) -{ const int odds = this->get_gladiator(this->bet_number).odds; - this->payback = std::max(input_wager + 1, input_wager * odds / 100); + return std::max(this->wager + 1, this->wager * odds / 100); } MeleeGladiator &MeleeArena::get_gladiator(int n) diff --git a/src/system/building-type-definition.h b/src/system/building-type-definition.h index 912f9e023d..e39fc56e55 100644 --- a/src/system/building-type-definition.h +++ b/src/system/building-type-definition.h @@ -51,10 +51,8 @@ class MeleeArena { bool matches_bet_number(int value) const; void set_bet_number(int value); - int get_wager() const; void set_wager(int value); - int get_payback() const; - void set_payback(int input_wager); + int get_payback(bool is_draw = false) const; MeleeGladiator &get_gladiator(int n); const MeleeGladiator &get_gladiator(int n) const; void set_gladiator(int n, const MeleeGladiator &gladiator); @@ -67,8 +65,7 @@ class MeleeArena { static MeleeArena instance; int bet_number = 0; - int wager = 0; //!< @detail 引き分け時の払い戻しに必要. - int payback = 0; + int wager = 0; std::array gladiators{}; int decide_max_level() const; diff --git a/src/world/world-turn-processor.cpp b/src/world/world-turn-processor.cpp index 7c0003bf32..1d62b8f4b9 100644 --- a/src/world/world-turn-processor.cpp +++ b/src/world/world-turn-processor.cpp @@ -201,7 +201,7 @@ void WorldTurnProcessor::process_monster_arena_draw() } msg_print(_("申し訳ありませんが、この勝負は引き分けとさせていただきます。", "Sorry, but this battle ended in a draw.")); - this->player_ptr->au += MeleeArena::get_instance().get_wager(); + this->player_ptr->au += MeleeArena::get_instance().get_payback(true); msg_print(nullptr); this->player_ptr->energy_need = 0; auto &melee_arena = MeleeArena::get_instance();