survivor

graphical action game for the linux terminal
git clone https://git.ce9e.org/survivor.git

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    -1 
   78    -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