c++ 实现狼人游戏

发布时间:2026/6/2 19:04:29

c++ 实现狼人游戏 更多技术博客 http://vilins.top/题目Task实现一个简单的“狼人游戏”通知机制Details角色有村民狼人预言家女巫猎人Uninitialized只用于默认构造函数法官呼叫“狼人/预言家/女巫/猎人”相应角色进行回答法官呼叫“村民”全体角色回答HintsobjA.on(objB)表示将objB作为objA的监听者事件订阅者知识点观察者模式类与类的关系关联C enum类静态变量One more step将构造函数和初始化操作Player();和void init(std::string name, Role role);分离出来有何优缺点judge.hpp中const Player*能改为const Player吗为什么enum类型Role定义在Player类的public部分有何好处Role为什么定义成enum类型定义成string数组合适吗kMaxCountOfPlayers为什么要作为类静态变量如果类静态变量为double类型还能在类定义中初始化吗代码实现//main.cpp#include judge.hpp #include player.hpp #include cassert #include iostream #include string using std::cin; void RunAllTests() { Judge judge; Player players[Judge::kMaxCountOfPlayers]; std::string name; Player::Role role; for (int i 0; i Judge::kMaxCountOfPlayers; i) { switch (i) { case 0: case 1: case 2: { role Player::Villager; break; } case 3: case 4: case 5: { role Player::Werewolf; break; } case 6: { role Player::Seer; break; } case 7: { role Player::Witch; break; } case 8: { role Player::Hunter; break; } default: assert(false); } cin name; players[i].init(name, role); judge.on(players[i]); } int role_index; cin role_index; judge.call(static_castPlayer::Role(role_index)); } int main() { RunAllTests(); return 0; } /* Two probable tests: input0: Kathy Julie Kenneth Albert William Jack Lisa Carol Harold 2 output0: Calling: Werewolf Albert: Shh... I am a Werewolf. William: Shh... I am a Werewolf. Jack: Shh... I am a Werewolf. input1: Lisa Albert Julie Harold Jack Carol William Kenneth Kathy 1 output1: Calling: Villager Lisa: I am the villager!! Albert: I am the villager!! Julie: I am the villager!! Harold: I am the villager!! Jack: I am the villager!! Carol: I am the villager!! William: I am the villager!! Kenneth: I am the villager!! Kathy: I am the villager!! *///judge.hpp#ifndef JUDGE_HPP_ #define JUDGE_HPP_ #include player.hpp class Judge { public: static const int kMaxCountOfPlayers 9; Judge(); ~Judge(); void on(const Player* player); void call(Player::Role role); private: const Player* m_players[kMaxCountOfPlayers]; int m_players_count; }; #endif//judge.cpp#include iostream #include string #include judge.hpp #include player.hpp using namespace std; Judge::Judge() { m_players_count0; } Judge::~Judge() { } void Judge::on(const Player* player) { m_players[m_players_count]player; m_players_count; } void Judge::call(Player::Role role) { if(rolePlayer::Werewolf) { cout Calling: Werewolf endl; } else if(rolePlayer::Villager) { cout Calling: Villager endl; } else if(rolePlayer::Seer){ cout Calling: Seer endl; } else if(rolePlayer::Witch) { cout Calling: Witch endl; } else if(rolePlayer::Hunter) { cout Calling: Hunter endl; } if(rolePlayer::Villager) { for(int i0;im_players_count;i) { m_players[i]-pretend(); } return; } for(int i0;im_players_count;i) { if(rolem_players[i]-role()) { m_players[i]-answer(); } } }//play.hpp#ifndef PLAYER_HPP_ #define PLAYER_HPP_ #include string class Player { public: enum Role { Uninitialized, Villager, Werewolf, Seer, Witch, Hunter }; Player(); void init(std::string name, Role role); ~Player(); Role role() const; void answer() const; void pretend() const; private: Role m_role; std::string m_name; }; #endif//player.cpp#include iostream #include string #include player.hpp using namespace std; Player::Player() { m_roleUninitialized; m_name; } void Player::init(string name, Role role) { m_namename; m_rolerole; } Player::~Player() { ; } Player::Role Player::role() const { return m_role; } void Player::answer() const { if(m_roleWerewolf) { cout m_name : Shh... I am a Werewolf. endl; } else if(m_roleVillager) { cout m_name : Shh... I am the villager!! endl; } else if(m_roleSeer){ cout m_name : Shh... I am a Seer. endl; } else if(m_roleWitch) { cout m_name : Shh... I am a Witch. endl; } else if(m_roleHunter) { cout m_name : Shh... I am a Hunter. endl; } } void Player::pretend() const { cout m_name : I am the villager!! endl; }1.更多技术博客 http://vilins.top/Written by Vilin.↩︎

相关新闻