This commit is contained in:
ntr 2018-08-20 19:48:26 +10:00
parent 8a946acc11
commit d8c4ff987c
3 changed files with 46 additions and 35 deletions

0
README.md Normal file → Executable file
View File

View File

@ -71,12 +71,12 @@ mod tests {
#[test] #[test]
fn pve_test() { fn pve_test() {
let player = Cryp::new() // let player = Cryp::new()
.named("ca phe sua da".to_string()) // .named("ca phe sua da".to_string())
.level(2) // .level(2)
.create(); // .create();
levelling(player); // levelling(player);
return; return;
} }

View File

@ -1,23 +1,36 @@
use uuid::Uuid; use uuid::Uuid;
use rand::prelude::*; use rand::prelude::*;
#[derive(Debug)]
pub enum Attribute {
Dmg,
Def,
}
pub struct Roll { pub struct Roll {
pub value: u64,
pub roll: u64, pub roll: u64,
pub result: u64, pub result: u64,
pub att: Attribute // pub stat: Stat,
} }
fn att_roll(value: u64, att: Attribute) -> Roll { #[derive(Debug,Clone)]
let mut rng = thread_rng(); pub struct Stat {
let roll: u64 = rng.gen(); value: u64,
return Roll { att, value, roll, result: value & roll }; }
type Dmg = Stat;
type Def = Stat;
type Stam = Stat;
type Hp = Stat;
impl Stat {
fn roll(&self) -> Roll {
let mut rng = thread_rng();
let roll: u64 = rng.gen();
return Roll { roll, result: self.value & roll };
}
}
impl Hp {
fn dmg(&mut self, dmg: u64) -> Hp {
Hp {
value: self.value.saturating_sub(dmg)
}
}
} }
fn print_roll(r: &Roll) { fn print_roll(r: &Roll) {
@ -38,10 +51,10 @@ pub struct Cryp {
pub id: Uuid, pub id: Uuid,
// todo // todo
// make attributes hold this value // make attributes hold this value
pub dmg: u64, pub dmg: Dmg,
pub def: u64, pub def: Def,
pub stam: u64, pub stam: Stam,
pub hp: u64, pub hp: Hp,
pub xp: u64, pub xp: u64,
pub lvl: u8, pub lvl: u8,
pub name: String, pub name: String,
@ -57,10 +70,10 @@ impl Cryp {
let id = Uuid::new_v4(); let id = Uuid::new_v4();
return Cryp { return Cryp {
id, id,
dmg: 0, dmg: Dmg { value: 0},
def: 0, def: Def { value: 0},
stam: 0, stam: Stam { value: 0},
hp: 0, hp: Hp { value: 0},
lvl: 0, lvl: 0,
xp: 0, xp: 0,
name: String::new() name: String::new()
@ -92,8 +105,8 @@ impl Cryp {
pub fn turn(&self) -> Turn { pub fn turn(&self) -> Turn {
// println!("{:?}'s turn:", c.name); // println!("{:?}'s turn:", c.name);
let dmg = att_roll(self.dmg, Attribute::Dmg); let dmg = self.dmg.roll();
let def = att_roll(self.def, Attribute::Def); let def = self.def.roll();
print_roll(&dmg); print_roll(&dmg);
print_roll(&def); print_roll(&def);
@ -101,7 +114,6 @@ impl Cryp {
return Turn { dmg, def } return Turn { dmg, def }
} }
pub fn create(mut self) -> Cryp { pub fn create(mut self) -> Cryp {
let mut rng = thread_rng(); let mut rng = thread_rng();
let lvl_as_two_pwr = 2_u64.pow(self.lvl.into()); let lvl_as_two_pwr = 2_u64.pow(self.lvl.into());
@ -112,9 +124,9 @@ impl Cryp {
self.xp = lvl_as_two_pwr; self.xp = lvl_as_two_pwr;
self.dmg = rng.gen_range(1, max); self.dmg = Dmg { value: rng.gen_range(1, max) };
self.def = rng.gen_range(1, max); self.def = Def { value: rng.gen_range(1, max) };
self.stam = rng.gen_range(1, max); self.stam = Stam { value: rng.gen_range(1, max) };
self.hp = self.stam; self.hp = self.stam;
self self
} }
@ -122,7 +134,6 @@ impl Cryp {
pub fn assign_dmg(&mut self, opp: &Cryp, plr_t: &Turn, opp_t: &Turn) -> &mut Cryp { pub fn assign_dmg(&mut self, opp: &Cryp, plr_t: &Turn, opp_t: &Turn) -> &mut Cryp {
let final_dmg = opp_t.dmg.result.saturating_sub(plr_t.def.result); let final_dmg = opp_t.dmg.result.saturating_sub(plr_t.def.result);
let blocked = opp_t.dmg.result.saturating_sub(final_dmg); let blocked = opp_t.dmg.result.saturating_sub(final_dmg);
let hp = self.hp.saturating_sub(final_dmg);
println!("{:?} deals {:?} dmg to {:?} ({:?} blocked / {:?} hp remaining)" println!("{:?} deals {:?} dmg to {:?} ({:?} blocked / {:?} hp remaining)"
,opp.name ,opp.name
@ -148,9 +159,9 @@ mod tests {
.named("hatchling".to_string()) .named("hatchling".to_string())
.level(2) .level(2)
.create(); .create();
assert!(level_two.dmg <= 2_u64.pow(2)); // assert!(level_two.dmg <= 2_u64.pow(2));
assert!(level_two.def <= 2_u64.pow(2)); // assert!(level_two.def <= 2_u64.pow(2));
assert!(level_two.stam < 2_u64.pow(2)); // assert!(level_two.stam < 2_u64.pow(2));
println!("{:?}", level_two); println!("{:?}", level_two);
return; return;
} }