114 lines
1.9 KiB
Rust
Executable File
114 lines
1.9 KiB
Rust
Executable File
use rand::prelude::*;
|
|
use cryp::Cryp;
|
|
use battle::Battle;
|
|
use skill::Skill;
|
|
|
|
struct Encounter {
|
|
mob: Cryp,
|
|
success: bool,
|
|
player: Cryp,
|
|
}
|
|
|
|
|
|
pub fn battle(a: &Cryp, b: &Cryp) -> Battle {
|
|
let mut battle = Battle::new(a, b);
|
|
loop {
|
|
battle.next();
|
|
if battle.finished() {
|
|
break battle
|
|
}
|
|
}
|
|
}
|
|
|
|
fn pve(plr: Cryp) -> Encounter {
|
|
let mut rng = thread_rng();
|
|
let mob_lvl: u8 = rng.gen_range(1, plr.lvl);
|
|
|
|
let mob = Cryp::new()
|
|
.named("bamboo basher".to_string())
|
|
.level(mob_lvl)
|
|
.create();
|
|
|
|
let outcome = battle(&plr, &mob);
|
|
|
|
let success = match outcome.winner() {
|
|
Some(c) => c.id == plr.id,
|
|
None => false,
|
|
};
|
|
|
|
return Encounter {
|
|
mob: mob,
|
|
success,
|
|
player: plr,
|
|
};
|
|
}
|
|
|
|
pub fn levelling(mut c: Cryp) -> Cryp {
|
|
loop {
|
|
let enc = pve(c);
|
|
c = enc.player;
|
|
|
|
if !enc.success {
|
|
println!("{:?} has been KO'd", c.name);
|
|
break c;
|
|
}
|
|
|
|
println!("{:?} rekt {:?}", c.name, enc.mob.name);
|
|
c = c.add_xp();
|
|
println!("{:?} now has {:?} xp and is lvl {:?}", c.name, c.xp, c.lvl);
|
|
|
|
// LEVEL CAP
|
|
if c.lvl == 12 {
|
|
break c;
|
|
}
|
|
|
|
continue;
|
|
}
|
|
}
|
|
|
|
pub fn test_battle() {
|
|
let mut a = Cryp::new()
|
|
.named("pronounced \"creeep\"".to_string())
|
|
.level(8)
|
|
.learn(Skill::Stoney)
|
|
.create();
|
|
|
|
let b = Cryp::new()
|
|
.named("lemongrass tea".to_string())
|
|
.level(8)
|
|
.create();
|
|
|
|
let outcome = battle(&a, &b);
|
|
|
|
match outcome.winner() {
|
|
Some(w) => println!("{:?} is the winner with {:?} hp remaining", w.name, w.hp),
|
|
None => println!("{:?} was a draw", outcome),
|
|
};
|
|
|
|
return
|
|
}
|
|
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn pve_test() {
|
|
let player = Cryp::new()
|
|
.named("ca phe sua da".to_string())
|
|
.level(2)
|
|
.create();
|
|
|
|
levelling(player);
|
|
return;
|
|
}
|
|
|
|
#[test]
|
|
fn battle_test() {
|
|
test_battle();
|
|
return;
|
|
}
|
|
|
|
}
|