@@ -94,6 +94,8 @@ <h1>Player Shooting</h1>
9494 args.state.player.bullet_size ||= 3
9595 args.state.player.bullet_speed ||= 1.5
9696 args.state.player.bullet_path ||= 'sprites/circle-violet.png'
97+
98+ args.state.enemies ||= []
9799 end
98100
99101 def render args, player
@@ -120,15 +122,17 @@ <h1>Player Shooting</h1>
120122 player.y = player.y.greater(args.grid.bottom)
121123 player.y = player.y.lesser(args.grid.top - player.h)
122124
123- player.bullets = player.bullets.select do |bullet|
124- # Remove bullets that go off screen
125- # If you remove this line of code
126- # The label will show you how many bullets
127- # are still being rendered
128- bullet.intersect_rect? args.grid
129- end.each do |bullet|
130- # Move the player 's bullets up the screen
125+ player.bullets = player.bullets.find_all do |bullet|
126+ bullet.intersect_rect? args.grid.rect
127+ end
128+
129+ player.bullets.each do |bullet|
131130 bullet.y + = player.bullet_speed
131+ # Remove all enemies
132+ args.state.enemies.reject! do |enemy|
133+ # That a bullet is touching
134+ bullet.intersect_rect? enemy[:rect]
135+ end
132136 end
133137 end
134138
@@ -197,6 +201,10 @@ <h1>Enemies</h1>
197201 spawn_enemies args
198202 update_enemies args
199203 # Move each bullet
204+ args.state.enemy_bullets.reject! do |bullet|
205+ !bullet.intersect_rect? args.grid.rect
206+ end
207+
200208 args.state.enemy_bullets.each do | bullet |
201209 bullet.y - = args.state.enemy_bullet_speed
202210 end
@@ -329,6 +337,10 @@ <h1>Bringing it all together</h1>
329337 spawn_enemies args
330338 update_enemies args
331339
340+ args.state.enemy_bullets.reject! do |bullet|
341+ !bullet.intersect_rect? args.grid.rect
342+ end
343+
332344 args.state.enemy_bullets.each do | bullet |
333345 bullet.y - = args.state.enemy_bullet_speed
334346 end
@@ -342,9 +354,11 @@ <h1>Bringing it all together</h1>
342354 end
343355
344356 def update_player_bullets args, player
345- player.bullets = player.bullets.select do |bullet|
346- bullet.intersect_rect? args.grid
347- end.each do |bullet|
357+ player.bullets = player.bullets.find_all do |bullet|
358+ bullet.intersect_rect? args.grid.rect
359+ end
360+
361+ player.bullets.each do |bullet|
348362 bullet.y + = player.bullet_speed
349363 end
350364 end
@@ -502,6 +516,10 @@ <h1>Adding collisions</h1>
502516 player.h,
503517 ]
504518
519+ args.state.enemy_bullets.reject! do |bullet|
520+ !bullet.intersect_rect? args.grid.rect
521+ end
522+
505523 args.state.enemy_bullets.each do | bullet |
506524 bullet.y - = args.state.enemy_bullet_speed
507525 # Reset the game
@@ -518,9 +536,11 @@ <h1>Adding collisions</h1>
518536 end
519537
520538 def update_player_bullets args, player
521- player.bullets = player.bullets.select do |bullet|
522- bullet.intersect_rect? args.grid
523- end.each do |bullet|
539+ player.bullets = player.bullets.find_all do |bullet|
540+ bullet.intersect_rect? args.grid.rect
541+ end
542+
543+ player.bullets.each do |bullet|
524544 bullet.y + = player.bullet_speed
525545 # Remove all enemies
526546 args.state.enemies.reject! do |enemy|
0 commit comments