- commit
- e3e811e867ac71cf9b108928f258f0a2d7842afe
- parent
- 8c2f6384e6adcf1e6dbfcd1d1faa50752ec5386e
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2023-02-19 19:13
xp perk
Diffstat
| M | README.md | 1 | + |
| M | src/game.rs | 48 | ++++++++++++++++++++---------------------------- |
| M | src/main.rs | 5 | ++--- |
3 files changed, 23 insertions, 31 deletions
diff --git a/README.md b/README.md
@@ -15,6 +15,7 @@ the player receives a random perk: 15 15 - Movement speed is increased by 10% 16 16 - Damage radius is increased by 10% 17 17 - Pickup radius is increased by 10% -1 18 - Experience from diamonds is increased by 10% 18 19 - Full health is restored 19 20 - The player recovers +0.2HP per second 20 21
diff --git a/src/game.rs b/src/game.rs
@@ -12,6 +12,7 @@ const PERK_RADIUS: usize = 3; 12 12 const PERK_HEAL: usize = 4; 13 13 const PERK_RECOVER: usize = 5; 14 14 const PERK_ATTRACT: usize = 6; -1 15 const PERK_XP: usize = 7; 15 16 16 17 #[derive(PartialEq)] 17 18 pub enum Dir { @@ -39,9 +40,10 @@ pub struct Player { 39 40 pub power: f32, 40 41 pub damage_radius: f32, 41 42 pub diamond_radius: f32,42 -1 pub xp: usize,43 -1 pub last_level: usize,44 -1 pub next_level: usize,-1 43 pub xp: f32, -1 44 pub xp_factor: f32, -1 45 pub last_level: f32, -1 46 pub next_level: f32, 45 47 } 46 48 47 49 impl Player { @@ -58,9 +60,10 @@ impl Player { 58 60 power: 10.0, 59 61 damage_radius: 30.0, 60 62 diamond_radius: 15.0,61 -1 xp: 0,62 -1 last_level: 0,63 -1 next_level: 10,-1 63 xp: 0.0, -1 64 xp_factor: 1.0, -1 65 last_level: 0.0, -1 66 next_level: 10.0, 64 67 }; 65 68 } 66 69 } @@ -73,28 +76,17 @@ impl Player { 73 76 pub fn levelup(&mut self, rng: &mut random::Rng) { 74 77 while self.xp >= self.next_level { 75 78 self.last_level = self.next_level;76 -1 self.next_level *= 2;77 -178 -1 match rng.gen_range(0, 7) {79 -1 PERK_POWER => {80 -1 self.power *= 1.1;81 -1 }82 -1 PERK_HEALTH => {83 -1 self.health_max *= 1.1;84 -1 }85 -1 PERK_SPEED => {86 -1 self.speed *= 1.1;87 -1 }88 -1 PERK_RADIUS => {89 -1 self.damage_radius *= 1.1;90 -1 }91 -1 PERK_HEAL => {92 -1 self.health = self.health_max;93 -1 }-1 79 self.next_level *= 2.0; -1 80 -1 81 match rng.gen_range(0, 8) { -1 82 PERK_POWER => self.power *= 1.1, -1 83 PERK_HEALTH => self.health_max *= 1.1, -1 84 PERK_SPEED => self.speed *= 1.1, -1 85 PERK_RADIUS => self.damage_radius *= 1.1, -1 86 PERK_HEAL => self.health = self.health_max, 94 87 PERK_RECOVER => self.health_recover += 0.2,95 -1 PERK_ATTRACT => {96 -1 self.diamond_radius *= 1.1;97 -1 }-1 88 PERK_ATTRACT => self.diamond_radius *= 1.1, -1 89 PERK_XP => self.xp_factor *= 1.1, 98 90 _ => unreachable!(), 99 91 } 100 92 } @@ -238,7 +230,7 @@ impl Game { 238 230 let dy = self.player.p.y - diamond.y; 239 231 let d = dx * dx + dy * dy; 240 232 if d < self.player.diamond_radius * self.player.diamond_radius {241 -1 self.player.xp += 1;-1 233 self.player.xp += self.player.xp_factor; 242 234 return false; 243 235 } else { 244 236 return true;
diff --git a/src/main.rs b/src/main.rs
@@ -34,8 +34,7 @@ fn render_bar(screen: &mut term::Screen, value: f32, y0: usize, color: [u8; 3]) 34 34 } 35 35 36 36 fn render_xp_bar(player: &game::Player, screen: &mut term::Screen) {37 -1 let value =38 -1 (player.xp - player.last_level) as f32 / (player.next_level - player.last_level) as f32;-1 37 let value = (player.xp - player.last_level) / (player.next_level - player.last_level); 39 38 render_bar(screen, value, 0, BLUE); 40 39 } 41 40 @@ -96,7 +95,7 @@ fn main() { 96 95 print!("{:?}", 1.0 / dt); 97 96 98 97 if game.player.health < 0.0 {99 -1 println!("\nyou died (score: {})", game.player.xp);-1 98 println!("\nyou died (score: {})", game.player.xp as usize); 100 99 break; 101 100 } 102 101