1use super::dice;
2
3pub struct Player {
5 pub name: String,
6 pub level: i16,
7 pub x: i16,
8 pub y: i16,
9}
10
11impl 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}