33 const rules::GameState&
state,
int square)
noexcept
35 const auto owner =
state.squares[
static_cast<std::size_t
>(square)].owner;
53 const rules::GameState&
state,
int deed)
noexcept
55 int delta = deed -
static_cast<int>(
56 state.players[
state.currentPlayer].currentSquare);
59 return ((6.0 - std::abs(
delta - 7)) / 36.0) * 100.0;
69 int square =
static_cast<int>(
state.players[
nextPlayer].currentSquare) + 2;
70 for (
int i = 0;
i < 11; ++
i)
73 if (square != deed)
continue;
78 return static_cast<std::int64_t
>(
79 static_cast<double>(rent) *
93 int square =
static_cast<int>(
state.players[player].currentSquare) + 2;
94 std::int64_t
total = 0;
95 for (
int turn = 0; turn < std::max(turns, 0); ++turn)
97 std::int64_t maximum = 0;
98 for (
int step = 0; step < 11; ++step)
101 const auto owner =
state.squares[
static_cast<std::size_t
>(square)].owner;
121 std::int64_t
total = 0;
122 for (
int turn = 1; turn <= std::max(turns, 0); ++turn)
125 static_cast<int>(
state.currentPlayer) + turn);
136 std::int64_t maximum = 0;
137 for (
int step = 0; step < 11; ++step)
140 if (
state.squares[
static_cast<std::size_t
>(square)].owner == player)
156 -> std::expected<rules::PlayerNumber, std::string>
159 return std::unexpected(
160 "UDStats calculator requires a valid player");
161 return selection.player;
165 -> std::expected<int, std::string>
168 return std::unexpected(
169 "UDStats calculator requires a board deed");
170 return selection.deed;
179 return std::unexpected(deed.error());
181 return std::unexpected(
182 "UDStats calculator has no current player");
190 return std::unexpected(player.error());
191 return money(
static_cast<double>(
199 return std::unexpected(deed.error());
201 return std::unexpected(
202 "UDStats calculator has no current player");
211 return std::unexpected(deed.error());
214 return std::unexpected(player.error());
216 state, *player, *deed,
true)));
223 return std::unexpected(player.error());
225 state, *player, selection.turns)));
232 return std::unexpected(player.error());
236 return money(
static_cast<double>(
237 static_cast<std::int64_t
>(
value)));
244 return std::unexpected(player.error());
246 state, *player, selection.turns)));
253 return std::unexpected(player.error());
254 return money(
static_cast<double>(
259 return std::unexpected(
"UDStats calculator function is out of range");
double averageRentReceived(const rules::GameState &state, rules::PlayerNumber player, std::int64_t startSquare, bool dontCountDevelopedMonopolies, double cashCowMultiplier, rules::board::PropertySet propertiesOwned) noexcept
std::int64_t potentialIncome(const rules::GameState &state, rules::PlayerNumber player) noexcept
double landingFrequency(SquareType square) noexcept
std::int64_t rentIfSteppedOn(const rules::GameState &state, SquareType square, rules::board::PropertySet propertiesOwned) noexcept
std::int64_t totalWorth(const rules::GameState &state, rules::PlayerNumber player) noexcept
rules::board::PropertySet propertiesOwnedByPlayer(const rules::GameState &state, rules::PlayerNumber player) noexcept
constexpr PlayerNumber BankPlayer
std::uint8_t PlayerNumber
constexpr PlayerNumber MaxPlayers
std::expected< CalculatorResult, std::string > calculate(CalculatorFunction function, const rules::GameState &state, const CalculatorSelection &selection) noexcept