Formatting convention corrections, some cleanup.

This commit is contained in:
Cutieguwu
2024-12-06 14:38:55 -05:00
parent 62b4e76d45
commit 558b9fc162
4 changed files with 115 additions and 116 deletions

View File

@@ -5,7 +5,7 @@ use crate::Gamemode;
#[derive(Debug, Clone)]
pub struct Character {
pub name: &'static str,
pub standing: Standing
pub standing: Standing,
}
impl Character {
@@ -47,7 +47,7 @@ pub struct Standing {
pub society: i8,
pub court: i8,
pub friends: Vec<&'static People>,
pub enemies: Vec<&'static People>
pub enemies: Vec<&'static People>,
}
impl Standing {
@@ -90,7 +90,7 @@ pub enum People {
SarahGood(Option<Character>),
SusannaWalcott(Option<Character>),
ThomasPutnam(Option<Character>),
Tituba(Option<Character>)
Tituba(Option<Character>),
}
impl People {
@@ -109,7 +109,7 @@ impl People {
enemies: vec![
&People::ElizabethProctor(None),
&People::JohnProctor(None),
&People::ReverendJohnHale(None)
&People::ReverendJohnHale(None),
]
}
})),
@@ -122,12 +122,12 @@ impl People {
&People::BettyParris(None),
&People::ThomasPutnam(None),
&People::ReverendParris(None),
&People::MercyLewis(None)
&People::MercyLewis(None),
],
enemies: vec![
&People::ElizabethProctor(None),
&People::JohnProctor(None),
&People::RebeccaNurse(None)
&People::RebeccaNurse(None),
]
}
})),
@@ -138,11 +138,11 @@ impl People {
court: 10,
friends: vec![
&People::AbigailWilliams(None),
&People::ReverendParris(None)
&People::ReverendParris(None),
],
enemies: vec![
&People::JohnProctor(None),
&People::ElizabethProctor(None)
&People::ElizabethProctor(None),
]
}
})),
@@ -156,7 +156,7 @@ impl People {
&People::JudgeHathorne(None),
&People::ReverendParris(None),
&People::EzekielCheever(None),
&People::MarshalHerrick(None)
&People::MarshalHerrick(None),
],
enemies: vec![
&People::ElizabethProctor(None),
@@ -164,7 +164,7 @@ impl People {
&People::ReverendJohnHale(None),
&People::FrancisNurse(None),
&People::GilesCorey(None),
&People::MarthaCorey(None)
&People::MarthaCorey(None),
]
}
})),
@@ -178,12 +178,12 @@ impl People {
&People::GilesCorey(None),
&People::JohnProctor(None),
&People::RebeccaNurse(None),
&People::ReverendJohnHale(None)
&People::ReverendJohnHale(None),
],
enemies: vec![
&People::AbigailWilliams(None),
&People::DeputyGovernorDanforth(None),
&People::EzekielCheever(None)
&People::EzekielCheever(None),
]
}
})),
@@ -197,14 +197,14 @@ impl People {
&People::DeputyGovernorDanforth(None),
&People::ReverendParris(None),
&People::ReverendJohnHale(None),
&People::JudgeHathorne(None)
&People::JudgeHathorne(None),
],
enemies: vec![
&People::ElizabethProctor(None),
&People::JohnProctor(None),
&People::FrancisNurse(None),
&People::GilesCorey(None)
&People::GilesCorey(None),
]
}
})),
@@ -223,7 +223,7 @@ impl People {
&People::AbigailWilliams(None),
&People::ReverendJohnHale(None),
&People::JudgeHathorne(None),
&People::ThomasPutnam(None)
&People::ThomasPutnam(None),
]
}
})),
@@ -237,7 +237,7 @@ impl People {
&People::FrancisNurse(None),
&People::JohnProctor(None),
&People::MarthaCorey(None),
&People::GilesCorey(None)
&People::GilesCorey(None),
],
enemies: vec![
&People::ThomasPutnam(None),
@@ -246,7 +246,7 @@ impl People {
&People::JudgeHathorne(None),
&People::EzekielCheever(None),
&People::MarshalHerrick(None),
&People::AbigailWilliams(None)
&People::AbigailWilliams(None),
]
}
})),
@@ -264,7 +264,7 @@ impl People {
&People::EzekielCheever(None),
&People::JudgeHathorne(None),
&People::ReverendJohnHale(None),
&People::MarshalHerrick(None)
&People::MarshalHerrick(None),
]
}
})),
@@ -296,7 +296,7 @@ impl Distribution<People> for Standard {
19 => People::SusannaWalcott(None),
20 => People::ThomasPutnam(None),
21 => People::Tituba(None),
_ => unreachable!()
_ => unreachable!(),
}
}
}
@@ -305,5 +305,5 @@ impl Distribution<People> for Standard {
pub enum SurvivalStatus {
PlayerMassacred,
PlayerLived,
PlayerDied
PlayerDied,
}

View File

@@ -2,26 +2,22 @@ use std::i8;
use rand::{
distributions::{Distribution, Standard},
rngs::ThreadRng
rngs::ThreadRng,
};
use crate::characters::{
Character,
People,
SurvivalStatus
SurvivalStatus,
};
pub fn get_event() -> Events {
Events::Trial(Trial)
}
#[allow(unused_variables)]
pub trait EventHandle {
fn handle<'main>(
fn handle<'a>(
self: &Self,
rng: &'main ThreadRng,
player: &'main mut Character,
characters: &'main mut Vec<People>
rng: &'a ThreadRng,
player: &'a mut Character,
characters: &'a mut Vec<People>,
) -> EventReturn {
EventReturn::None
}
@@ -31,13 +27,13 @@ pub trait EventHandle {
pub struct Trial;
impl EventHandle for Trial {
fn handle<'main>(
fn handle<'a>(
self: &Self,
rng: &'main ThreadRng,
player: &'main mut Character,
characters: &'main mut Vec<People>
rng: &'a ThreadRng,
player: &'a mut Character,
characters: &'a mut Vec<People>,
) -> EventReturn {
let mut player_status = SurvivalStatus::PlayerDied;
let mut player_status: SurvivalStatus = SurvivalStatus::PlayerDied;
println!("You have been summoned before the court.\n");
@@ -53,11 +49,11 @@ impl EventHandle for Trial {
pub struct WildAccusation;
impl EventHandle for WildAccusation {
fn handle<'main>(
fn handle<'a>(
self: &Self,
rng: &'main ThreadRng,
player: &'main mut Character,
characters: &'main mut Vec<People>
rng: &'a ThreadRng,
player: &'a mut Character,
characters: &'a mut Vec<People>,
) -> EventReturn {
EventReturn::None
}
@@ -65,15 +61,15 @@ impl EventHandle for WildAccusation {
#[derive(Debug)]
pub enum Events {
Trial(Trial)
Trial(Trial),
}
impl Distribution<Events> for Standard {
fn sample<R: rand::Rng + ?Sized>(&self, rng: &mut R) -> Events {
match rng.gen_range(0..=0) {
0 => Events::Trial(Trial),
1 => Events::Trial(Trial),
_ => unreachable!()
1 => todo!(),
_ => unreachable!(),
}
}
}
@@ -81,5 +77,5 @@ impl Distribution<Events> for Standard {
#[derive(Debug)]
pub enum EventReturn {
Survival(SurvivalStatus),
None
None,
}

View File

@@ -5,76 +5,85 @@ mod utils;
use characters::{
Character,
People,
SurvivalStatus
SurvivalStatus,
};
use events::{
get_event, EventHandle, EventReturn, Events, Trial
EventHandle,
EventReturn,
Events,
Trial,
};
use rand::{
random,
thread_rng
thread_rng,
rngs::ThreadRng
};
use utils::{
fmt_args,
ArgType,
FlagType
FlagType,
};
//Number of game rounds.
const ROUNDS: u8 = 15;
fn main() {
let cmd_args = dbg!(fmt_args());
let mut characters = People::build_characters();
let mut rng = thread_rng();
let cmd_args: Vec<ArgType> = fmt_args();
let mut characters: Vec<People> = People::build_characters();
let rng: ThreadRng = thread_rng();
// Set player default values based on gamemode.
let mut player: Character = dbg!(Character::build_player(Gamemode::get(&cmd_args)));
let mut end_status = SurvivalStatus::PlayerLived;
let mut player: Character = Character::build_player(Gamemode::get(&cmd_args));
let mut end_status: SurvivalStatus = SurvivalStatus::PlayerLived;
// Game loop.
for r in 0..=ROUNDS {
let random_event: Events = random();
end_status = run_event(
&rng,
&mut player,
&mut characters,
random(),
);
match random_event {
Events::Trial(trial) => match trial.handle(&rng, &mut player, &mut characters) {
EventReturn::Survival(state) => match state {
SurvivalStatus::PlayerLived => (),
_ => {end_status = state}
}
_ => unreachable!()
}
}
match end_status {
SurvivalStatus::PlayerLived => (),
_ => break
}
// If player's standing is too low, bring to court.
if player.standing.clone().calculate() <= 0 {
match Trial.handle(&rng, &mut player, &mut characters) {
EventReturn::Survival(state) => match state {
SurvivalStatus::PlayerLived => (),
_ => {end_status = state}
},
_ => unreachable!()
};
};
if r == ROUNDS {
end_status = SurvivalStatus::PlayerLived
};
if matches!(end_status, SurvivalStatus::PlayerLived) { break }
if characters.len() == 0 {
end_status = SurvivalStatus::PlayerMassacred
} else if r == ROUNDS {
end_status = SurvivalStatus::PlayerLived
} else if player.standing.clone().calculate() <= 0 {
//Standing too low, bring to court.
end_status = run_event(
&rng,
&mut player,
&mut characters,
Events::Trial(Trial),
)
};
};
match end_status {
SurvivalStatus::PlayerDied => println!("You died. And for what?"),
SurvivalStatus::PlayerLived => println!("You survived, but at what cost? How many died to save you?"),
SurvivalStatus::PlayerMassacred => println!("You killed everyone. I ask, at what end will you yield. Care you not for the life of others?")
SurvivalStatus::PlayerMassacred => println!("You killed everyone. I ask, at what end will you yield. Care you not for the life of others?"),
};
}
fn run_event<'main>(
rng: &ThreadRng ,
player: &mut Character,
characters: &mut Vec<People>,
event: Events,
) -> SurvivalStatus {
match event {
Events::Trial(trial) => match trial.handle(rng, player, characters) {
EventReturn::Survival(state) => state,
_ => unreachable!(),
},
}
}
@@ -87,34 +96,34 @@ pub enum Gamemode {
//Hard
JohnProctor,
//Just dead.
GoodyOsborne
GoodyOsborne,
}
impl Gamemode {
fn get(cmd_args: &Vec<ArgType>) -> Gamemode {
if cmd_args.len() != 1 {
match &cmd_args[1] {
ArgType::Command(c) => match c.as_str() {
ArgType::Command(command) => match command.as_str() {
"abigail" => Gamemode::Abigail,
"john_proctor" => Gamemode::JohnProctor,
"goody_osborne" => Gamemode::GoodyOsborne,
_ => Gamemode::MaryWarren
_ => Gamemode::MaryWarren,
},
ArgType::Flag(f) => match f {
FlagType::Long(l) => match l.as_str() {
ArgType::Flag(flag) => match flag {
FlagType::Long(flag_long) => match flag_long.as_str() {
"abigail" => Gamemode::Abigail,
"john-proctor" => Gamemode::JohnProctor,
"goody-osborne" => Gamemode::GoodyOsborne,
_ => Gamemode::MaryWarren
_ => Gamemode::MaryWarren,
},
FlagType::Short(s) => match s.as_str() {
FlagType::Short(flag_short) => match flag_short.as_str() {
"a" => Gamemode::Abigail,
"j" => Gamemode::JohnProctor,
"o" => Gamemode::GoodyOsborne,
_ => Gamemode::MaryWarren
}
_ => Gamemode::MaryWarren,
},
},
_ => Gamemode::MaryWarren
_ => Gamemode::MaryWarren,
}
} else {
Gamemode::MaryWarren

View File

@@ -1,42 +1,38 @@
use std::env::args;
use std::io;
use std::{
env::args,
io,
};
const DASH:char = 45 as u8 as char;
const DASH: char = 45 as u8 as char;
#[derive(Debug, Clone)]
pub enum ArgType {
#[allow(dead_code)]
Binary(String),
Command(String),
Flag(FlagType)
Flag(FlagType),
}
#[derive(Debug, Clone)]
pub enum FlagType {
//Currently only handles single flags. eg. "-S", "-y"
Short(String),
Long(String)
Long(String),
}
pub fn fmt_args() -> Vec<ArgType> {
let mut args_vec:Vec<ArgType> = Vec::new();
for x in args() {
match try_flag(x.clone()) {
None => args_vec.push(ArgType::Command(x)),
Some(f) => args_vec.push(ArgType::Flag(f))
}
}
for obj in args() { match try_flag(obj.clone()) {
None => args_vec.push(ArgType::Command(obj)),
Some(flag) => args_vec.push(ArgType::Flag(flag)),
}}
args_vec[0] = {
ArgType::Binary({
match args_vec[0].clone() {
ArgType::Command(c) => c,
err => panic!("Expected ArgType::Command at args_vec[0], found {:?}", err)
}
})
};
args_vec[0] = ArgType::Binary(match args_vec[0].clone() {
ArgType::Command(command) => command,
err => panic!("Expected ArgType::Command at args_vec[0], found {:?}", err)
});
args_vec
}
@@ -59,15 +55,13 @@ fn break_flag_short(mut arg: String) -> String {
}
fn break_flag_long(mut arg: String) -> String {
for _ in 1..=2 {
arg.remove(0);
};
for _ in 1..=2 { arg.remove(0); };
arg
}
pub fn input() -> String {
let mut input_buffer = String::new();
let mut input_buffer: String = String::new();
io::stdin()
.read_line( &mut input_buffer)