Liar's Dice 0.1
Loading...
Searching...
No Matches
ai_player.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <boost/random/mersenne_twister.hpp>
4#include <boost/random/uniform_int_distribution.hpp>
5#include <boost/random/uniform_real_distribution.hpp>
6#include <chrono>
7#include <liarsdice/core/player.hpp>
8#include <thread>
9
10namespace liarsdice::ai {
11
12 // Base AI player with configurable strategy
13 class AIPlayer : public core::Player {
14 public:
15 struct Strategy {
16 double risk_tolerance = 0.5; // 0.0 = conservative, 1.0 = aggressive
17 double bluff_frequency = 0.2; // How often to bluff
18 double call_threshold = 0.7; // Probability threshold to call liar
19 unsigned int think_time_ms = 1000; // Simulated thinking time
20 };
21
22 AIPlayer(unsigned int id, const std::string& name, const Strategy& strategy);
23
24 core::Guess make_guess(const std::optional<core::Guess>& last_guess) override;
25 bool decide_call_liar(const core::Guess& last_guess) override;
26
27 protected:
28 [[nodiscard]] double calculate_probability(const core::Guess& guess, size_t total_dice) const;
30 const std::optional<core::Guess>& last_guess) const;
32 const std::optional<core::Guess>& last_guess) const;
33
34 void simulate_thinking() const;
35
36 protected:
41 };
42
43 // Predefined AI personalities
44 class EasyAI : public AIPlayer {
45 public:
46 explicit EasyAI(unsigned int id);
47 };
48
49 class MediumAI : public AIPlayer {
50 public:
51 explicit MediumAI(unsigned int id);
52 };
53
54 class HardAI : public AIPlayer {
55 public:
56 explicit HardAI(unsigned int id);
57
58 // Hard AI tracks opponent patterns
59 core::Guess make_guess(const std::optional<core::Guess>& last_guess) override;
60 bool decide_call_liar(const core::Guess& last_guess) override;
61
62 private:
65 double average_bluff_rate = 0.0;
66 std::map<unsigned int, double> face_preferences;
67 };
68
70
71 void update_opponent_model(const core::Guess& guess);
72 [[nodiscard]] double calculate_adjusted_probability(const core::Guess& guess,
73 size_t total_dice) const;
74 };
75
76} // namespace liarsdice::ai
Definition ai_player.hpp:13
core::Guess generate_bluff_guess(const std::optional< core::Guess > &last_guess) const
Definition ai_player.cpp:127
void simulate_thinking() const
Definition ai_player.cpp:146
boost::random::mt19937 rng_
Definition ai_player.hpp:38
core::Guess make_guess(const std::optional< core::Guess > &last_guess) override
Definition ai_player.cpp:19
double calculate_probability(const core::Guess &guess, size_t total_dice) const
Definition ai_player.cpp:59
Strategy strategy_
Definition ai_player.hpp:37
AIPlayer(unsigned int id, const std::string &name, const Strategy &strategy)
Definition ai_player.cpp:9
bool decide_call_liar(const core::Guess &last_guess) override
Definition ai_player.cpp:35
boost::random::uniform_real_distribution probability_dist_
Definition ai_player.hpp:39
core::Guess generate_safe_guess(const std::optional< core::Guess > &last_guess) const
Definition ai_player.cpp:86
boost::random::uniform_int_distribution face_dist_
Definition ai_player.hpp:40
Definition ai_player.hpp:44
EasyAI(unsigned int id)
Definition ai_player.cpp:153
Definition ai_player.hpp:54
bool decide_call_liar(const core::Guess &last_guess) override
Definition ai_player.cpp:172
void update_opponent_model(const core::Guess &guess)
Definition ai_player.cpp:197
core::Guess make_guess(const std::optional< core::Guess > &last_guess) override
Definition ai_player.cpp:162
HardAI(unsigned int id)
Definition ai_player.cpp:159
double calculate_adjusted_probability(const core::Guess &guess, size_t total_dice) const
Definition ai_player.cpp:213
Definition ai_player.hpp:49
MediumAI(unsigned int id)
Definition ai_player.cpp:156
Definition player.hpp:23
Core game logic and entities.
Definition player.hpp:11
Main namespace for the Liar's Dice game.
Definition ai_player.cpp:7
Definition ai_player.hpp:15
double risk_tolerance
Definition ai_player.hpp:16
double bluff_frequency
Definition ai_player.hpp:17
unsigned int think_time_ms
Definition ai_player.hpp:19
double call_threshold
Definition ai_player.hpp:18
Definition ai_player.hpp:63
double average_bluff_rate
Definition ai_player.hpp:65
std::vector< core::Guess > guess_history
Definition ai_player.hpp:64
Definition player.hpp:13