Skip to main content

rpgdk/player/
mod.rs

1use super::dice;
2
3/// # State container for the player.
4pub struct Player {
5    pub name: String,
6    pub level: i16,
7    pub x: i16,
8    pub y: i16,
9}
10
11/// # Actions the Player can take in a given turn.
12impl Player {
13    pub fn move_xy(&mut self, x: i16, y: i16) {
14        self.x += x;
15        self.y += y;
16        println!("{} has moved to {}, {}", self.name, self.x, self.y);
17    }
18
19    pub fn search(&self, difficulty:i16) -> bool {
20        let roll = dice::roll(dice::Dice::D20(1, self.level));
21        println!("Searching...");
22        if roll > difficulty {
23            println!("After searching around, {} found something!", self.name);
24            return true;
25        }
26        println!("Hmmm, there doesn't seem to be anything here.");
27        return false;
28    }
29}
30
31#[cfg(test)]
32mod test {
33    use super::*;
34
35    #[test]
36    fn player_creates() {
37        let p = Player {
38            name: String::from("TestName"), 
39            level: 1, 
40            x: 0,
41            y: 0,
42        };
43
44        assert_eq!(p.name, "TestName", "name: {}", p.name);
45        assert_eq!(p.level, 1, "level: {}", p.level);
46        assert!(p.x == 0, "x: {}", p.x);
47        assert!(p.y == 0, "y: {}", p.y);
48    }
49
50    #[test]
51    fn player_moves_xy() {
52        let mut p = Player {
53            name: String::from("TestName"), 
54            level: 1, 
55            x: 0,
56            y: 0,
57        };
58
59        p.move_xy(2, 3);
60
61        assert!(p.x == 2, "x: {}", p.x);
62        assert!(p.y == 3, "y: {}", p.y);
63    }
64
65    #[test]
66    fn player_searches_success() {
67         let p = Player {
68            name: String::from("TestName"), 
69            level: 1, 
70            x: 0,
71            y: 0,
72        };
73
74        let s = p.search(1);
75
76        assert!(s, "search result: {}", s);
77    }
78
79    #[test]
80    fn player_searches_fail() {
81         let p = Player {
82            name: String::from("TestName"), 
83            level: 1, 
84            x: 0,
85            y: 0,
86        };
87
88        let s = p.search(22);
89
90        assert!(!s, "search result: {}", s);
91    }
92}