This commit is contained in:
bel
2025-03-13 21:11:52 -06:00
parent 5b60e34801
commit 262c962d5d
7 changed files with 17 additions and 1 deletions

0
src/rust/Cargo.lock generated Normal file → Executable file
View File

0
src/rust/Cargo.toml Normal file → Executable file
View File

0
src/rust/src/lib.rs Normal file → Executable file
View File

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