2222#include " screen.hh"
2323#include " sprite.hh"
2424#include " invader_sprite.hh"
25+ #include " ship_sprite.hh"
2526#include " png.hh"
2627
2728static controls_t *player_controls[3 ];
@@ -30,7 +31,7 @@ static int player_lives[2];
3031static int number_players;
3132static int current_player;
3233
33- static sprite_t ship_sprite;
34+ static ship_sprite_t ship_sprite;
3435static sprite_t ship_missile_sprite;
3536static std::vector<invader_sprite_t > invader_sprites[2 ];
3637static sprite_t invader_missile_sprite;
@@ -60,6 +61,7 @@ static uint32_t frames_till_shot;
6061
6162static std::default_random_engine generator;
6263static std::uniform_int_distribution<unsigned int > invader_distribution (0 ,5 );
64+ static std::uniform_int_distribution<unsigned int > shot_distribution (45 ,75 );
6365
6466static void reset_invaders (int for_player) {
6567 invader_sprites[for_player].clear ();
@@ -109,7 +111,10 @@ static bool reset_round(void) {
109111static void reset_game (int with_number_players) {
110112 ship_sprite.set_active (true );
111113 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 );
113118
114119 reset_invaders (0 );
115120 reset_invaders (1 );
@@ -203,8 +208,8 @@ void render_game(Screen *screen) {
203208 sprite_t invader_sprite = invader_sprites[current_player][invader_column];
204209 invader_missile_sprite.set_position (invader_sprite.get_x_position (), invader_sprite.get_y_position ());
205210 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) ;
208213 }
209214
210215 if (game_state == game_state_t ::Attract) {
@@ -288,7 +293,7 @@ void render_game(Screen *screen) {
288293
289294 if (ship_sprite.test_collision (invader_missile_sprite)) {
290295 game_state = game_state_t ::NewShip;
291- ship_sprite.set_active ( false );
296+ ship_sprite.destroy_sprite ( );
292297 player_lives[current_player]--;
293298 frames_in_state = 0 ;
294299 }
@@ -338,7 +343,7 @@ static void init_sdl(void) {
338343 exit (1 );
339344 }
340345
341- startup_bong = Mix_LoadWAV (" /root /startup.wav" );
346+ startup_bong = Mix_LoadWAV (" bin /startup.wav" );
342347 if (startup_bong == NULL ) {
343348 fprintf (stderr, " Unable to load startup.wav: %s\n " , Mix_GetError ());
344349 exit (1 );
@@ -372,7 +377,7 @@ const char ** argv
372377
373378 ledscape_t * const leds = ledscape_init (config, 0 );
374379
375- sprite_sheet.read_file (" /root /Invaders.png" );
380+ sprite_sheet.read_file (" bin /Invaders.png" );
376381
377382 player_controls[0 ] = new controls_t (1 );
378383 player_controls[1 ] = new controls_t (2 );
0 commit comments