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 {
|
pub fn village_roles_count(&self) -> usize {
|
||||||
log::warn!(
|
|
||||||
"wolves: {} total: {}",
|
|
||||||
self.wolves_count(),
|
|
||||||
self.roles.len()
|
|
||||||
);
|
|
||||||
self.roles.len() - self.wolves_count()
|
self.roles.len() - self.wolves_count()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -111,6 +111,12 @@ impl Village {
|
||||||
pub fn is_game_over(&self) -> Option<GameOver> {
|
pub fn is_game_over(&self) -> Option<GameOver> {
|
||||||
let wolves = self.living_wolves_count();
|
let wolves = self.living_wolves_count();
|
||||||
let villagers = self.living_villager_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 {
|
if wolves == 0 {
|
||||||
return Some(GameOver::VillageWins);
|
return Some(GameOver::VillageWins);
|
||||||
|
|
|
||||||
|
|
@ -7,3 +7,4 @@ mod mason;
|
||||||
mod pyremaster;
|
mod pyremaster;
|
||||||
mod scapegoat;
|
mod scapegoat;
|
||||||
mod shapeshifter;
|
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