survivor

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

commit
fd227f524b6c610ee8ddb524360d9d12fd192e32
parent
d223b08f56b9f2ddb2cadca2e34cfa689733cd0a
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2023-04-17 16:55
allow to vary spwan rates per wave

Diffstat

M src/enemies.rs 71 ++++++++++++++++++++++++++++---------------------------------
M src/game.rs 35 ++++++++++++++++++++---------------

2 files changed, 52 insertions, 54 deletions


diff --git a/src/enemies.rs b/src/enemies.rs

@@ -137,46 +137,39 @@ const SHADOW: EnemyType = EnemyType {
  137   137     sprite: &sprites::SHADOW,
  138   138 };
  139   139 
  140    -1 pub fn get_enemy(x: f32, y: f32, i: usize) -> Enemy {
   -1   140 pub fn get_wave(i: usize) -> Vec<(&'static EnemyType, f32)> {
  141   141     let waves = [
  142    -1         vec![&SNAKE],
  143    -1         vec![&SNAKE, &SKELETON],
  144    -1         vec![&SNAKE, &SKELETON],
  145    -1         vec![&BAT],
  146    -1         vec![&ZOMBIE],
  147    -1         vec![&ZOMBIE],
  148    -1         vec![&BAT, &SKELETON],
  149    -1         vec![&BAT, &SKELETON],
  150    -1         vec![&BAT, &EYE],
  151    -1         vec![&GHOST],
  152    -1         vec![&GHOST],
  153    -1         vec![&BAT2, &ZOMBIE],
  154    -1         vec![&BAT2, &ZOMBIE],
  155    -1         vec![&MUMMY, &ZOMBIE],
  156    -1         vec![&MUMMY, &ZOMBIE],
  157    -1         vec![&HOOD],
  158    -1         vec![&HOOD, &EYE],
  159    -1         vec![&SNAKE, &PLANTGUY],
  160    -1         vec![&SNAKE, &PLANTGUY],
  161    -1         vec![&HOOD2],
  162    -1         vec![&HOOD2, &HOOD],
  163    -1         vec![&HOOD2],
  164    -1         vec![&SNAKE, &RADDISH],
  165    -1         vec![&RADDISH, &PLANTGUY],
  166    -1         vec![&SKELETON2, &CRAWL],
  167    -1         vec![&SKELETON2, &CRAWL],
  168    -1         vec![&CRAWL],
  169    -1         vec![&SHADOW],
  170    -1         vec![&SHADOW],
  171    -1         vec![&SHADOW],
   -1   142         vec![(&SNAKE, 4.0)],
   -1   143         vec![(&SNAKE, 2.0), (&SKELETON, 2.0)],
   -1   144         vec![(&SNAKE, 2.0), (&SKELETON, 2.0)],
   -1   145         vec![(&BAT, 4.0)],
   -1   146         vec![(&ZOMBIE, 4.0)],
   -1   147         vec![(&ZOMBIE, 4.0)],
   -1   148         vec![(&BAT, 2.0), (&SKELETON, 2.0)],
   -1   149         vec![(&BAT, 2.0), (&SKELETON, 2.0)],
   -1   150         vec![(&BAT, 2.0), (&EYE, 2.0)],
   -1   151         vec![(&GHOST, 4.0)],
   -1   152         vec![(&GHOST, 4.0)],
   -1   153         vec![(&BAT2, 2.0), (&ZOMBIE, 2.0)],
   -1   154         vec![(&BAT2, 2.0), (&ZOMBIE, 2.0)],
   -1   155         vec![(&MUMMY, 2.0), (&ZOMBIE, 2.0)],
   -1   156         vec![(&MUMMY, 2.0), (&ZOMBIE, 2.0)],
   -1   157         vec![(&HOOD, 4.0)],
   -1   158         vec![(&HOOD, 2.0), (&EYE, 2.0)],
   -1   159         vec![(&SNAKE, 2.0), (&PLANTGUY, 2.0)],
   -1   160         vec![(&SNAKE, 2.0), (&PLANTGUY, 2.0)],
   -1   161         vec![(&HOOD2, 4.0)],
   -1   162         vec![(&HOOD2, 2.0), (&HOOD, 2.0)],
   -1   163         vec![(&HOOD2, 4.0)],
   -1   164         vec![(&SNAKE, 2.0), (&RADDISH, 2.0)],
   -1   165         vec![(&RADDISH, 2.0), (&PLANTGUY, 2.0)],
   -1   166         vec![(&SKELETON2, 2.0), (&CRAWL, 2.0)],
   -1   167         vec![(&SKELETON2, 2.0), (&CRAWL, 2.0)],
   -1   168         vec![(&CRAWL, 4.0)],
   -1   169         vec![(&SHADOW, 4.0)],
   -1   170         vec![(&SHADOW, 4.0)],
   -1   171         vec![(&SHADOW, 4.0)],
  172   172     ];
  173   173 
  174    -1     let wave = &waves[(i / 100) % waves.len()];
  175    -1     let t = wave[i % wave.len()];
  176    -1 
  177    -1     return Enemy {
  178    -1         p: Pos { x: x, y: y },
  179    -1         health: t.health,
  180    -1         t: t,
  181    -1     };
   -1   174     return waves[(i / 100) % waves.len()].clone();
  182   175 }

diff --git a/src/game.rs b/src/game.rs

@@ -192,21 +192,26 @@ impl Game {
  192   192         let sprite_height = win::iconvert_y(sprites::HEIGHT);
  193   193         let sprite_width = win::iconvert_x(sprites::WIDTH);
  194   194 
  195    -1         if self.enemies.len() < MAX_ENEMIES && self.rng.gen_f32() < dt * 4.0 {
  196    -1             let (spawn_x, spawn_y) = match self.rng.gen_range(0, 4) {
  197    -1                 0 => (self.rng.gen_f32() * width, -sprite_height),
  198    -1                 1 => (width + sprite_width, self.rng.gen_f32() * height),
  199    -1                 2 => (self.rng.gen_f32() * width, height + sprite_height),
  200    -1                 3 => (-sprite_width, self.rng.gen_f32() * height),
  201    -1                 _ => unreachable!(),
  202    -1             };
  203    -1 
  204    -1             self.enemies.push(enemies::get_enemy(
  205    -1                 spawn_x + self.player.p.x - width / 2.0,
  206    -1                 spawn_y + self.player.p.y - height / 2.0,
  207    -1                 self.i_enemy,
  208    -1             ));
  209    -1             self.i_enemy += 1;
   -1   195         for (t, p) in enemies::get_wave(self.i_enemy) {
   -1   196             if self.enemies.len() < MAX_ENEMIES && self.rng.gen_f32() < dt * p {
   -1   197                 let (spawn_x, spawn_y) = match self.rng.gen_range(0, 4) {
   -1   198                     0 => (self.rng.gen_f32() * width, -sprite_height),
   -1   199                     1 => (width + sprite_width, self.rng.gen_f32() * height),
   -1   200                     2 => (self.rng.gen_f32() * width, height + sprite_height),
   -1   201                     3 => (-sprite_width, self.rng.gen_f32() * height),
   -1   202                     _ => unreachable!(),
   -1   203                 };
   -1   204 
   -1   205                 self.enemies.push(enemies::Enemy {
   -1   206                     p: Pos {
   -1   207                         x: spawn_x + self.player.p.x - width / 2.0,
   -1   208                         y: spawn_y + self.player.p.y - height / 2.0,
   -1   209                     },
   -1   210                     health: t.health,
   -1   211                     t: t,
   -1   212                 });
   -1   213                 self.i_enemy += 1;
   -1   214             }
  210   215         }
  211   216     }
  212   217