Make output optional
This commit is contained in:
parent
fad9798aed
commit
ecec35b20f
3 changed files with 28 additions and 16 deletions
|
|
@ -9,7 +9,7 @@ fn compare(player_builders: &[Box<dyn PlayerBuilder>], games: usize) {
|
||||||
let r = (0..games)
|
let r = (0..games)
|
||||||
.into_par_iter()
|
.into_par_iter()
|
||||||
.map_init(SmallRng::from_entropy, |rng, _| {
|
.map_init(SmallRng::from_entropy, |rng, _| {
|
||||||
herzen(player_builders, 0, rng)
|
herzen::<false>(player_builders, 0, rng)
|
||||||
})
|
})
|
||||||
.fold(
|
.fold(
|
||||||
|| vec![[0_u64; 13]; player_builders.len()],
|
|| vec![[0_u64; 13]; player_builders.len()],
|
||||||
|
|
@ -48,11 +48,11 @@ fn compare(player_builders: &[Box<dyn PlayerBuilder>], games: usize) {
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let player: Vec<Box<dyn PlayerBuilder>> = vec![
|
let player: Vec<Box<dyn PlayerBuilder>> = vec![
|
||||||
Box::new(player::random::Random { seed: 0 }),
|
Box::new(player::highest::Highest {}),
|
||||||
Box::new(player::random::Random { seed: 0 }),
|
Box::new(player::highest::Highest {}),
|
||||||
Box::new(player::random::Random { seed: 0 }),
|
Box::new(player::highest::Highest {}),
|
||||||
Box::new(player::random::Random { seed: 0 }),
|
Box::new(player::highest::Highest {}),
|
||||||
];
|
];
|
||||||
|
|
||||||
compare(&player, 10000);
|
compare(&player, 10000000);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
14
src/game.rs
14
src/game.rs
|
|
@ -89,7 +89,7 @@ pub fn playeble(card: Card, hand: &[Card], stack_color: Option<Color>) -> bool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn herzen(
|
pub fn herzen<const OUTPUT: bool>(
|
||||||
player_builders: &[Box<dyn PlayerBuilder>],
|
player_builders: &[Box<dyn PlayerBuilder>],
|
||||||
starting_player: usize,
|
starting_player: usize,
|
||||||
rng: &mut impl Rng,
|
rng: &mut impl Rng,
|
||||||
|
|
@ -125,12 +125,16 @@ pub fn herzen(
|
||||||
for i in 0..hand_size {
|
for i in 0..hand_size {
|
||||||
let mut stack = Vec::with_capacity(player.len());
|
let mut stack = Vec::with_capacity(player.len());
|
||||||
|
|
||||||
|
if OUTPUT {
|
||||||
println!("## Round {i}:");
|
println!("## Round {i}:");
|
||||||
|
}
|
||||||
|
|
||||||
for j in 0..player.len() {
|
for j in 0..player.len() {
|
||||||
let index = (round_starting_player + j) % player.len();
|
let index = (round_starting_player + j) % player.len();
|
||||||
|
|
||||||
|
if OUTPUT {
|
||||||
println!("# Player {index}");
|
println!("# Player {index}");
|
||||||
|
}
|
||||||
|
|
||||||
let ai = AdditionalInformation {};
|
let ai = AdditionalInformation {};
|
||||||
|
|
||||||
|
|
@ -146,7 +150,9 @@ pub fn herzen(
|
||||||
|
|
||||||
hands[index].remove(card_index);
|
hands[index].remove(card_index);
|
||||||
|
|
||||||
|
if OUTPUT {
|
||||||
println!("# Player {index} played {played_card:?}");
|
println!("# Player {index} played {played_card:?}");
|
||||||
|
}
|
||||||
stack.push(played_card);
|
stack.push(played_card);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -166,9 +172,11 @@ pub fn herzen(
|
||||||
|
|
||||||
let cost = stack.iter().map(|c| c.cost()).sum::<u8>();
|
let cost = stack.iter().map(|c| c.cost()).sum::<u8>();
|
||||||
|
|
||||||
|
if OUTPUT {
|
||||||
println!(
|
println!(
|
||||||
"## Player {winner} takes the stack {stack:?} with {winning_card:?}, {cost} points"
|
"## Player {winner} takes the stack {stack:?} with {winning_card:?}, {cost} points"
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
points[winner] += cost;
|
points[winner] += cost;
|
||||||
|
|
||||||
|
|
@ -178,13 +186,17 @@ pub fn herzen(
|
||||||
let remainder = &full_deck[hand_size * player.len()..];
|
let remainder = &full_deck[hand_size * player.len()..];
|
||||||
let remainder_cost = remainder.iter().map(|c| c.cost()).sum::<u8>();
|
let remainder_cost = remainder.iter().map(|c| c.cost()).sum::<u8>();
|
||||||
|
|
||||||
|
if OUTPUT {
|
||||||
println!(
|
println!(
|
||||||
"## Player {round_starting_player} takes the remaining cards {remainder:?}, {remainder_cost} points"
|
"## Player {round_starting_player} takes the remaining cards {remainder:?}, {remainder_cost} points"
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
points[round_starting_player] += remainder_cost;
|
points[round_starting_player] += remainder_cost;
|
||||||
|
|
||||||
|
if OUTPUT {
|
||||||
println!("## Game ended. Points: {points:?}");
|
println!("## Game ended. Points: {points:?}");
|
||||||
|
}
|
||||||
|
|
||||||
points
|
points
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -130,5 +130,5 @@ fn main() {
|
||||||
|
|
||||||
let mut rng = SmallRng::from_entropy();
|
let mut rng = SmallRng::from_entropy();
|
||||||
|
|
||||||
game::herzen(&player, 0, &mut rng);
|
game::herzen::<true>(&player, 0, &mut rng);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue