From 0db41de73fb65bdbe2e412f79704cff1874c7312 Mon Sep 17 00:00:00 2001 From: Luis Ferro <luis.ferro@eggplant.io> Date: Mon, 11 Nov 2019 20:02:55 +0100 Subject: Add char generation and positioning in first room of the dungeon --- src/character.rs | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) (limited to 'src/character.rs') diff --git a/src/character.rs b/src/character.rs index 04b31a8..76f4414 100644 --- a/src/character.rs +++ b/src/character.rs @@ -1,5 +1,8 @@ use std::cmp; +use crate::world::Point; + +#[derive(Default)] pub struct Character { pub name: String, pub class: String, @@ -8,7 +11,8 @@ pub struct Character { attack: i32, dodge: i32, luck: i32, - xp: i32 + xp: i32, + location: Point } pub trait Player { @@ -18,9 +22,12 @@ pub trait Player { health: i32, attack: i32, dodge: i32, - luck: i32 + luck: i32, + location: Point ) -> Character; + fn place(&mut self, location: Point); + fn select(&self, player_name: String, player_luck: i32) -> Self; fn damage(&mut self, damage_amount: i32); @@ -34,8 +41,16 @@ pub trait Player { fn info(&self) -> String; fn stats(&self) -> String; + + fn walk(&mut self, dir: Direction); } +pub enum Direction { + North, + South, + East, + West +} impl Player for Character { fn new( @@ -44,7 +59,8 @@ impl Player for Character { health: i32, attack: i32, dodge: i32, - luck: i32 + luck: i32, + location: Point ) -> Character { Character { name: name, @@ -55,9 +71,14 @@ impl Player for Character { dodge: dodge, luck: luck, xp: 0, + location: location } } + fn place(&mut self, location: Point) { + self.location = location; + } + fn select(&self, player_name: String, player_luck: i32) -> Self { Self::new( player_name, @@ -65,10 +86,20 @@ impl Player for Character { self.health, self.attack, self.dodge, - self.luck + player_luck + self.luck + player_luck, + (0,0) ) } + fn walk(&mut self, dir: Direction) { + match dir { + Direction::North => { (); }, + Direction::South => { (); }, + Direction::East => { (); }, + Direction::West => { (); } + } + } + fn damage(&mut self, damage_amount: i32) { self.health = cmp::max(0, self.health - damage_amount); self.xp += 2; @@ -109,7 +140,7 @@ mod tests { use super::*; fn test_attack() { - let player = Character::new("".to_string(), "Rogue".to_string(), 1, 4, 1, 4); + let player = Character::new("".to_string(), "Rogue".to_string(), 1, 4, 1, 4, (0,0)); assert_eq!(player.attack(), 6); } -- cgit v1.2.3