hrrmmm
This commit is contained in:
0
src/rust/Cargo.lock
generated
Normal file → Executable file
0
src/rust/Cargo.lock
generated
Normal file → Executable file
0
src/rust/Cargo.toml
Normal file → Executable file
0
src/rust/Cargo.toml
Normal file → Executable file
0
src/rust/src/lib.rs
Normal file → Executable file
0
src/rust/src/lib.rs
Normal file → Executable file
@@ -1,137 +0,0 @@
|
||||
pub mod mon {
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub struct Species {
|
||||
pub name: String,
|
||||
pub hp: i32,
|
||||
pub atk: i32,
|
||||
pub def: i32,
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod species_tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_literal() {
|
||||
let _: Species = Species{
|
||||
name: "".to_string(),
|
||||
hp: 1,
|
||||
atk: 2,
|
||||
def: 3,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub enum Dex {
|
||||
Pika,
|
||||
Mari,
|
||||
}
|
||||
|
||||
impl Dex {
|
||||
pub fn new(&self) -> Species {
|
||||
self.clone().into()
|
||||
}
|
||||
}
|
||||
|
||||
impl Into<Species> for Dex {
|
||||
fn into(self) -> Species {
|
||||
match self {
|
||||
Dex::Pika => Species{
|
||||
name: "Pika".to_string(),
|
||||
hp: 10,
|
||||
atk: 11,
|
||||
def: 9,
|
||||
},
|
||||
Dex::Mari => Species{
|
||||
name: "Mari".to_string(),
|
||||
hp: 10,
|
||||
atk: 8,
|
||||
def: 12,
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod dex_tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_dex_to_species() {
|
||||
let dex = Dex::Pika;
|
||||
let _: Species = dex.new();
|
||||
let _: Species = dex.into();
|
||||
let _: Species = Dex::Pika.new();
|
||||
let _: Species = Dex::Pika.into();
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Instance {
|
||||
pub species: Species,
|
||||
pub damage: i32,
|
||||
}
|
||||
|
||||
impl Instance {
|
||||
pub fn roll(dex: Dex) -> Instance {
|
||||
Instance{
|
||||
species: dex.into(),
|
||||
damage: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod instance_tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_instance_roll() {
|
||||
let i: Instance = Instance::roll(Dex::Pika);
|
||||
assert_eq!(0, i.damage);
|
||||
assert_eq!(Dex::Pika.new(), i.species);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub mod battler {
|
||||
use super::*;
|
||||
|
||||
pub fn attack(w: &mut mon::Instance, r: &mut mon::Instance) {
|
||||
let atk_delta = r.species.atk - 10;
|
||||
let def_delta = w.species.def - 10;
|
||||
|
||||
let power = match atk_delta - def_delta {
|
||||
v if v < 1 => 1,
|
||||
v => v,
|
||||
};
|
||||
|
||||
w.damage = match w.damage + power {
|
||||
v if v < w.species.hp => v,
|
||||
_ => w.species.hp,
|
||||
};
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod species_tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_attack() {
|
||||
let mut pika = mon::Instance::roll(mon::Dex::Pika);
|
||||
let mut mari = mon::Instance::roll(mon::Dex::Mari);
|
||||
|
||||
attack(&mut pika, &mut mari);
|
||||
assert_eq!(1, pika.damage);
|
||||
|
||||
attack(&mut mari, &mut pika);
|
||||
assert_eq!(1, mari.damage);
|
||||
|
||||
for i in 0..pika.species.hp+5 {
|
||||
attack(&mut pika, &mut mari);
|
||||
}
|
||||
assert_eq!(pika.species.hp, pika.damage);
|
||||
assert_eq!(1, mari.damage);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user