22
22
#include " screen.hh"
23
23
#include " sprite.hh"
24
24
#include " invader_sprite.hh"
25
+ #include " ship_sprite.hh"
25
26
#include " png.hh"
26
27
27
28
static controls_t *player_controls[3 ];
@@ -30,7 +31,7 @@ static int player_lives[2];
30
31
static int number_players;
31
32
static int current_player;
32
33
33
- static sprite_t ship_sprite;
34
+ static ship_sprite_t ship_sprite;
34
35
static sprite_t ship_missile_sprite;
35
36
static std::vector<invader_sprite_t > invader_sprites[2 ];
36
37
static sprite_t invader_missile_sprite;
@@ -60,6 +61,7 @@ static uint32_t frames_till_shot;
60
61
61
62
static std::default_random_engine generator;
62
63
static std::uniform_int_distribution<unsigned int > invader_distribution (0 ,5 );
64
+ static std::uniform_int_distribution<unsigned int > shot_distribution (45 ,75 );
63
65
64
66
static void reset_invaders (int for_player) {
65
67
invader_sprites[for_player].clear ();
@@ -109,7 +111,10 @@ static bool reset_round(void) {
109
111
static void reset_game (int with_number_players) {
110
112
ship_sprite.set_active (true );
111
113
ship_sprite.set_position (28 , 55 );
112
- ship_sprite.set_image (168 ,0 ,7 ,7 ,&sprite_sheet);
114
+ ship_sprite.set_image (168 ,0 ,7 ,7 ,&sprite_sheet, 0 );
115
+ ship_sprite.set_image (168 +7 ,0 ,7 ,7 ,&sprite_sheet, 1 );
116
+ ship_sprite.set_image (168 +14 ,0 ,7 ,7 ,&sprite_sheet, 2 );
117
+ ship_sprite.set_image (168 +28 ,0 ,7 ,7 ,&sprite_sheet, 3 );
113
118
114
119
reset_invaders (0 );
115
120
reset_invaders (1 );
@@ -203,8 +208,8 @@ void render_game(Screen *screen) {
203
208
sprite_t invader_sprite = invader_sprites[current_player][invader_column];
204
209
invader_missile_sprite.set_position (invader_sprite.get_x_position (), invader_sprite.get_y_position ());
205
210
invader_missile_sprite.set_image (196 ,0 ,7 ,7 ,&sprite_sheet);
206
- invader_missile_sprite.set_speed (0 .0f , 2 .0f );
207
- frames_till_shot=30 ;
211
+ invader_missile_sprite.set_speed (0 .0f , 1 .0f );
212
+ frames_till_shot=shot_distribution (generator) ;
208
213
}
209
214
210
215
if (game_state == game_state_t ::Attract) {
@@ -288,7 +293,7 @@ void render_game(Screen *screen) {
288
293
289
294
if (ship_sprite.test_collision (invader_missile_sprite)) {
290
295
game_state = game_state_t ::NewShip;
291
- ship_sprite.set_active ( false );
296
+ ship_sprite.destroy_sprite ( );
292
297
player_lives[current_player]--;
293
298
frames_in_state = 0 ;
294
299
}
@@ -338,7 +343,7 @@ static void init_sdl(void) {
338
343
exit (1 );
339
344
}
340
345
341
- startup_bong = Mix_LoadWAV (" /root /startup.wav" );
346
+ startup_bong = Mix_LoadWAV (" bin /startup.wav" );
342
347
if (startup_bong == NULL ) {
343
348
fprintf (stderr, " Unable to load startup.wav: %s\n " , Mix_GetError ());
344
349
exit (1 );
@@ -372,7 +377,7 @@ const char ** argv
372
377
373
378
ledscape_t * const leds = ledscape_init (config, 0 );
374
379
375
- sprite_sheet.read_file (" /root /Invaders.png" );
380
+ sprite_sheet.read_file (" bin /Invaders.png" );
376
381
377
382
player_controls[0 ] = new controls_t (1 );
378
383
player_controls[1 ] = new controls_t (2 );
0 commit comments