Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
AIUtility.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "BoardRules.hpp"
4#include "CardTypes.hpp"
5
6#include <array>
7#include <cstddef>
8#include <cstdint>
9#include <span>
10
11namespace monopoly::ai
12{
14 {
15 std::uint8_t begin{};
16 std::uint8_t endExclusive{};
17 };
18
20 {
21 std::array<rules::board::SquareType, 4> squares{};
22 std::size_t count{};
23 };
24
30
32 {
33 std::array<rules::board::SquareType, 8> representatives{};
34 std::size_t count{};
35 };
36
37 enum class MonopolyStage : std::uint8_t
38 {
39 Buying = 0,
43 };
44
45 enum class TokenReaction : std::uint8_t
46 {
47 Happy = 0,
48 Sad,
49 Neutral,
50 Angry
51 };
52
53 inline constexpr int HappyReactionRent = 250;
54 inline constexpr int SadReactionRent = 100;
55 inline constexpr int AngryReactionRent = 500;
56 inline constexpr int CriticalUnownedSquares = 2;
57
58 inline constexpr std::array<rules::board::SquareType, 8>
67
71 const rules::GameState& state, rules::PlayerNumber player) noexcept;
73 rules::board::SquareType square) noexcept;
75 rules::board::PropertySet properties) noexcept;
78 rules::board::SquareType square) noexcept;
80 rules::board::SquareType square) noexcept;
83 rules::board::SquareType square) noexcept;
86 rules::board::SquareType square) noexcept;
91 bool mortgageCounts) noexcept;
95 bool countBaltic) noexcept;
96 [[nodiscard]] bool anyMonopoly(
97 const rules::GameState& state) noexcept;
100 rules::PlayerNumber player,
101 rules::board::SquareType square) noexcept;
103 const rules::GameState& state,
104 rules::board::SquareType square) noexcept;
106 const rules::GameState& state,
107 rules::PlayerNumber player,
109 bool mortgageCounts,
111 [[nodiscard]] std::int64_t rentIfSteppedOn(
112 const rules::GameState& state,
115 [[nodiscard]] std::uint8_t freeHouses(
116 const rules::GameState& state) noexcept;
117 [[nodiscard]] std::uint8_t freeHotels(
118 const rules::GameState& state) noexcept;
119 [[nodiscard]] bool housingShortage(
120 const rules::GameState& state,
121 std::uint8_t criticalLevel) noexcept;
122 [[nodiscard]] std::int64_t liquidAssetsForProperties(
123 const rules::GameState& state,
124 rules::board::PropertySet properties,
125 bool countHouses,
126 bool countMonopolies) noexcept;
127 [[nodiscard]] std::int64_t liquidAssets(
128 const rules::GameState& state,
129 rules::PlayerNumber player,
130 bool countHouses,
131 bool countMonopolies,
132 std::int64_t moneyOwed = 0) noexcept;
134 const rules::GameState& state,
135 rules::PlayerNumber excludedPlayer,
136 bool countMonopolies,
137 std::span<const std::int64_t> moneyOwed = {}) noexcept;
138 [[nodiscard]] std::int64_t totalWorth(
139 const rules::GameState& state,
140 rules::PlayerNumber player) noexcept;
142 const rules::GameState& state,
143 rules::board::SquareType square) noexcept;
145 const rules::GameState& state,
148 std::int64_t minDistance,
149 std::int64_t maxDistance) noexcept;
151 const rules::GameState& state,
152 rules::PlayerNumber player,
153 const MonopolyLots& monopoly,
154 std::int64_t minDistance = 2,
155 std::int64_t maxDistance = 12) noexcept;
157 const rules::GameState& state,
158 rules::board::SquareType square) noexcept;
160 rules::board::SquareType square) noexcept;
162 rules::board::SquareType square) noexcept;
164 const rules::GameState& state,
165 rules::PlayerNumber player,
166 std::int64_t startSquare,
168 double cashCowMultiplier,
169 rules::board::PropertySet propertiesOwned) noexcept;
171 const rules::GameState& state,
172 rules::PlayerNumber player,
173 std::int64_t startSquare,
177 const rules::GameState& state,
178 rules::PlayerNumber player) noexcept;
180 const rules::GameState& state,
181 rules::PlayerNumber player) noexcept;
182 [[nodiscard]] rules::PlayerNumber mostExpensivePotentialIncome(
183 const rules::GameState& state) noexcept;
185 const rules::GameState& state,
186 rules::PlayerNumber player) noexcept;
187 [[nodiscard]] rules::PlayerNumber bestCurrentRent(
188 const rules::GameState& state) noexcept;
190 rules::board::PropertySet properties) noexcept;
192 const rules::GameState& state,
193 std::span<const rules::PlayerNumber> players,
194 rules::board::SquareType extraProperty =
195 rules::board::SquareType::Go) noexcept;
196 [[nodiscard]] std::size_t removePlayersFromList(
197 std::span<rules::PlayerNumber> players,
198 std::size_t playerCount,
199 std::span<const rules::PlayerNumber> remove) noexcept;
200 [[nodiscard]] rules::board::PropertySet xorProperties(
201 rules::board::PropertySet properties,
202 std::span<const rules::board::SquareType> squares) noexcept;
204 const rules::GameState& state,
205 rules::PlayerNumber player,
208 const rules::GameState& state) noexcept;
210 const rules::GameState& state,
211 rules::PlayerNumber player) noexcept;
213 rules::GameState& state,
215 rules::board::SquareType testSquare) noexcept;
216 [[nodiscard]] rules::board::SquareType findLowestRentProperty(
217 const rules::GameState& state,
218 rules::PlayerNumber player,
219 rules::board::PropertySet properties) noexcept;
220 [[nodiscard]] rules::board::SquareType findHighestRentMortgaged(
221 const rules::GameState& state,
222 rules::PlayerNumber player,
223 rules::board::PropertySet properties,
226 const rules::GameState& state,
227 rules::PlayerNumber player,
228 rules::board::SquareType landSquare,
229 rules::CardType card = rules::CardType::None) noexcept;
230}
std::array< rules::PlayerNumber, rules::MaxPlayers > players
std::uint16_t group
unsigned state
unsigned index
double averageRentReceived(const rules::GameState &state, rules::PlayerNumber player, std::int64_t startSquare, bool dontCountDevelopedMonopolies, double cashCowMultiplier, rules::board::PropertySet propertiesOwned) noexcept
MonopolyStage monopolyStage(const rules::GameState &state, rules::PlayerNumber player) noexcept
std::int64_t potentialIncome(const rules::GameState &state, rules::PlayerNumber player) noexcept
bool someoneCloseToMonopoly(const rules::GameState &state, rules::PlayerNumber player, const MonopolyLots &monopoly, std::int64_t minDistance, std::int64_t maxDistance) noexcept
int housesOnMonopoly(const rules::GameState &state, SquareType square) noexcept
MonopolyLots monopolyLots(SquareType square) noexcept
std::uint8_t freeHouses(const rules::GameState &state) noexcept
int propertyCount(rules::board::PropertySet properties) noexcept
Definition AIUtility.cpp:77
std::int64_t minimumCalculatedExpenses(const rules::GameState &state, rules::PlayerNumber player) noexcept
double landingFrequency(SquareType square) noexcept
bool playerOwnsMonopoly(const rules::GameState &state, rules::PlayerNumber player, bool countBaltic) noexcept
std::size_t removePlayersFromList(std::span< rules::PlayerNumber > players, std::size_t playerCount, std::span< const rules::PlayerNumber > remove) noexcept
rules::board::PropertySet monopolySet(SquareType square) noexcept
Definition AIUtility.cpp:63
bool isCashCow(SquareType square) noexcept
bool testForMonopoly(rules::board::PropertySet properties, SquareType square) noexcept
Definition AIUtility.cpp:89
bool ownsMonopoly(const rules::GameState &state, rules::PlayerNumber player, SquareType square, bool mortgageCounts) noexcept
constexpr int SadReactionRent
Definition AIUtility.hpp:54
SquareType findLowestRentProperty(const rules::GameState &state, rules::PlayerNumber player, rules::board::PropertySet properties) noexcept
constexpr int CriticalUnownedSquares
Definition AIUtility.hpp:56
std::int64_t rentIfSteppedOn(const rules::GameState &state, SquareType square, rules::board::PropertySet propertiesOwned) noexcept
int numberRailroadsUtilitiesOwned(const rules::GameState &state, rules::PlayerNumber player, SquareGroup group, bool mortgageCounts, rules::board::PropertySet propertiesOwned) noexcept
void testSellHouses(rules::GameState &state, const MonopolyLots &monopoly, SquareType testSquare) noexcept
rules::board::PropertySet xorProperties(rules::board::PropertySet properties, std::span< const rules::board::SquareType > squares) noexcept
std::int64_t mostLiquidAssets(const rules::GameState &state, rules::PlayerNumber excludedPlayer, bool countMonopolies, std::span< const std::int64_t > moneyOwed) noexcept
std::int64_t totalWorth(const rules::GameState &state, rules::PlayerNumber player) noexcept
int monopoliesBetweenPlayers(const rules::GameState &state, std::span< const rules::PlayerNumber > players, rules::board::SquareType extraProperty) noexcept
int monopoliesInSet(rules::board::PropertySet properties) noexcept
int propertiesLeftToBuy(const rules::GameState &state) noexcept
std::int64_t liquidAssets(const rules::GameState &state, rules::PlayerNumber player, bool countHouses, bool countMonopolies, std::int64_t moneyOwed) noexcept
bool isMonopoly(const rules::GameState &state, SquareType square) noexcept
bool housingShortage(const rules::GameState &state, std::uint8_t criticalLevel) noexcept
constexpr std::array< rules::board::SquareType, 8 > ExpensiveMonopolySquares
Definition AIUtility.hpp:59
std::int64_t liquidAssetsForProperties(const rules::GameState &state, rules::board::PropertySet properties, bool countHouses, bool countMonopolies) noexcept
rules::PlayerNumber firstOwnerInMonopoly(const rules::GameState &state, SquareType square) noexcept
bool playerCloseToProperty(const rules::GameState &state, rules::PlayerNumber ignorePlayer, SquareType property, std::int64_t minDistance, std::int64_t maxDistance) noexcept
HighestRentResult highestRentSquare(const rules::GameState &state, rules::PlayerNumber player) noexcept
MonopolyCollection monopoliesOwned(const rules::GameState &state, rules::PlayerNumber player, bool mortgageCounts) noexcept
bool anyMonopoly(const rules::GameState &state) noexcept
std::int64_t averageRentPaid(const rules::GameState &state, rules::PlayerNumber player, std::int64_t startSquare, bool considerDevelopedMonopolies, double cashCowMultiplier) noexcept
rules::PlayerNumber bestCurrentRent(const rules::GameState &state) noexcept
std::uint8_t freeHotels(const rules::GameState &state) noexcept
std::int64_t costUnmortgageMonopoly(const rules::GameState &state, SquareType square) noexcept
std::int64_t housesCanBuyOnMonopoly(const rules::GameState &state, SquareType square) noexcept
GroupRange groupRange(SquareGroup group) noexcept
Definition AIUtility.cpp:41
SquareType findHighestRentMortgaged(const rules::GameState &state, rules::PlayerNumber player, rules::board::PropertySet properties, std::int64_t topUnmortgageCost) noexcept
rules::board::PropertySet propertiesOwnedByPlayer(const rules::GameState &state, rules::PlayerNumber player) noexcept
Definition AIUtility.cpp:49
TokenReaction squareMoveReaction(const rules::GameState &state, rules::PlayerNumber player, SquareType landSquare, rules::CardType card) noexcept
bool ownsPropertyFromMonopoly(const rules::GameState &state, rules::PlayerNumber player, SquareType square) noexcept
constexpr int HappyReactionRent
Definition AIUtility.hpp:53
rules::PlayerNumber mostExpensivePotentialIncome(const rules::GameState &state) noexcept
constexpr int AngryReactionRent
Definition AIUtility.hpp:55
std::uint32_t PropertySet
std::uint8_t PlayerNumber
Definition RuleTypes.hpp:12
std::uint8_t endExclusive
Definition AIUtility.hpp:16
rules::board::SquareType square
Definition AIUtility.hpp:27
std::array< rules::board::SquareType, 8 > representatives
Definition AIUtility.hpp:33
std::array< rules::board::SquareType, 4 > squares
Definition AIUtility.hpp:21