mnml/server/src/combat.rs
2018-09-13 18:58:42 +10:00

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;
}
}