weightlifter role and test
This commit is contained in:
parent
da580a459e
commit
f034656bef
|
|
@ -59,11 +59,6 @@ impl GameSettings {
|
|||
}
|
||||
|
||||
pub fn village_roles_count(&self) -> usize {
|
||||
log::warn!(
|
||||
"wolves: {} total: {}",
|
||||
self.wolves_count(),
|
||||
self.roles.len()
|
||||
);
|
||||
self.roles.len() - self.wolves_count()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -111,6 +111,12 @@ impl Village {
|
|||
pub fn is_game_over(&self) -> Option<GameOver> {
|
||||
let wolves = self.living_wolves_count();
|
||||
let villagers = self.living_villager_count();
|
||||
let weightlifters = self
|
||||
.living_characters_by_role(RoleTitle::Weightlifter)
|
||||
.len();
|
||||
if weightlifters > 0 && wolves == 1 && villagers == 1 {
|
||||
return Some(GameOver::VillageWins);
|
||||
}
|
||||
|
||||
if wolves == 0 {
|
||||
return Some(GameOver::VillageWins);
|
||||
|
|
|
|||
|
|
@ -7,3 +7,4 @@ mod mason;
|
|||
mod pyremaster;
|
||||
mod scapegoat;
|
||||
mod shapeshifter;
|
||||
mod weightlifter;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,47 @@
|
|||
use core::num::NonZeroU8;
|
||||
#[allow(unused)]
|
||||
use pretty_assertions::{assert_eq, assert_ne, assert_str_eq};
|
||||
|
||||
use crate::{
|
||||
diedto::DiedTo,
|
||||
game::{Game, GameSettings, OrRandom, SetupRole},
|
||||
game_test::{
|
||||
ActionPromptTitleExt, ActionResultExt, AlignmentExt, GameExt, ServerToHostMessageExt,
|
||||
SettingsExt, gen_players,
|
||||
},
|
||||
message::{
|
||||
host::{HostDayMessage, HostGameMessage, ServerToHostMessage},
|
||||
night::{ActionPrompt, ActionPromptTitle, ActionResult},
|
||||
},
|
||||
role::Role,
|
||||
};
|
||||
|
||||
#[test]
|
||||
fn mayor_win() {
|
||||
let players = gen_players(1..4);
|
||||
let weightlifter_player_id = players[0].player_id;
|
||||
let wolf_player_id = players[1].player_id;
|
||||
|
||||
let mut settings = GameSettings::empty();
|
||||
settings.add_and_assign(SetupRole::Weightlifter, weightlifter_player_id);
|
||||
settings.add_and_assign(SetupRole::Werewolf, wolf_player_id);
|
||||
|
||||
settings.fill_remaining_slots_with_villagers(3);
|
||||
let mut game = Game::new(&players, settings).unwrap();
|
||||
game.r#continue().r#continue();
|
||||
assert_eq!(game.next().title(), ActionPromptTitle::WolvesIntro);
|
||||
game.r#continue().sleep();
|
||||
|
||||
game.next_expect_day();
|
||||
game.execute().title().wolf_pack_kill();
|
||||
game.mark(game.living_villager().character_id());
|
||||
game.r#continue().sleep();
|
||||
|
||||
assert_eq!(
|
||||
game.process(HostGameMessage::Night(
|
||||
crate::message::host::HostNightMessage::Next
|
||||
))
|
||||
.unwrap(),
|
||||
ServerToHostMessage::GameOver(crate::game::GameOver::VillageWins)
|
||||
);
|
||||
}
|
||||
Loading…
Reference in New Issue