el_diablo/src/player.rs

62 lines
1.4 KiB
Rust

use std::cmp::{max, min};
use crate::position::Position;
pub struct Player {
name: String,
position: Position,
life: i16,
max_life: i16,
}
impl Player {
pub fn new(name: &str, max_life: i16) -> Player {
Player {
name: name.to_string(),
position: Position::new(0, 0, 0),
life: max_life,
max_life,
}
}
pub fn get_name(&self) -> String {
return self.name.clone();
}
pub fn get_life(&self) -> i16 { self.life }
pub fn get_max_life(&self) -> i16 { self.max_life }
pub fn change_life(&mut self, by: i16) {
self.life = max(0, min(self.max_life, self.life + by));
}
pub fn get_position(&self) -> Position {
self.position
}
pub fn change_position(&mut self, dx: i8, dy: i8) {
self.position.change(dx, dy);
}
}
#[test]
fn test_get_name() {
let p = Player {
name: "Teddy Tester".to_string(),
position: Position::new(0, 1, 1),
life: 5,
max_life: 10,
};
assert_eq!(p.get_name(), "Teddy Tester");
}
#[test]
fn test_change_life() {
let mut p = Player {
name: "Teddy Tester".to_string(),
position: Position::new(0, 1, 1),
life: 5,
max_life: 10,
};
assert_eq!(p.life, 5);
p.change_life(-2);
assert_eq!(p.life, 3);
p.change_life(10);
assert_eq!(p.life, 10);
p.change_life(-12);
assert_eq!(p.life, 0);
}