You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
im trying to make my aliens take multiple hits individualy not as a group and idk how to do this
`import sys
from time import sleep
import pygame
from bullet import Bullet
from alien import Alien
def get_number_aliens_x(ai_settings, alien_width):
"""determine the number of aliens that fit in a row"""
avaliable_space_x = ai_settings.screen_width - 2 * alien_width
number_aliens_x = int(avaliable_space_x / (2 * alien_width))
return number_aliens_x
def get_number_rows(ai_settings, ship_height, alien_height):
""" determine the number of rows of aliens fit on the screen"""
avaliable_space_y = (ai_settings.screen_height -
(3 * alien_height) - ship_height)
number_rows = int(avaliable_space_y / (2 * alien_height))
return number_rows
def create_alien(ai_settings, screen, aliens, alien_number, row_number):
"""create an alien and place it in a row"""
alien = Alien(ai_settings, screen)
alien_width = alien.rect.width
alien.x = alien_width + 2 * alien_width * alien_number
alien.rect.x = alien.x
alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
aliens.add(alien)
def create_fleet(ai_settings, screen, ship, aliens):
"""creates a full fleet of aliens"""
#create an alien and find the number of aliens in a row
alien = Alien(ai_settings, screen)
number_aliens_x = get_number_aliens_x(ai_settings, alien.rect.width)
number_rows = get_number_rows(ai_settings, ship.rect.height,
alien.rect.height)
#creates the fleet of aliens
for row_number in range(number_rows):
for alien_number in range(number_aliens_x):
create_alien(ai_settings, screen, aliens, alien_number,
row_number)
def fire_bullet(ai_settings, screen, ship, bullets):
"""fire a bullet if limit not reached yet"""
# create a new bullet and add it to the bullets group
if len(bullets) < ai_settings.bullets_allowed:
new_bullet = Bullet(ai_settings, screen, ship)
bullets.add(new_bullet)
#watch for keyboard and mouse events
def check_events(ai_settings, screen, stats, sb, play_button, ship, aliens,
bullets):
""" responds to key and mouse events """
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
check_keydown_events(event,ai_settings, screen, ship, bullets)
elif event.type == pygame.KEYUP:
check_keyup_events(event, ship)
elif event.type == pygame.MOUSEBUTTONDOWN:
mouse_x, mouse_y = pygame.mouse.get_pos()
check_play_button(ai_settings, screen, stats, sb, play_button,
ship, aliens, bullets, mouse_x, mouse_y)
def check_play_button(ai_settings, screen, stats, sb, play_button, ship, aliens
, bullets, mouse_x, mouse_y):
"""start a new game when the player clicks play"""
button_clicked = play_button.rect.collidepoint(mouse_x, mouse_y)
if button_clicked and not stats.game_active:
#reset the game settings
ai_settings.initialize_dynamic_settings()
#hide mouse cursor
pygame.mouse.set_visible(False)
#reset the game stats
stats.reset_stats()
stats.game_active = True
#reser the scoreboard images
sb.prep_score()
sb.prep_high_score()
sb.prep_level()
sb.prep_ships()
#empty the list of aliens and bullets
aliens.empty()
bullets.empty()
#create new fleet and center the ship
create_fleet(ai_settings, screen, ship, aliens)
ship.center_ship()
def update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets,
play_button):
"""updates images on the screen and flip to the new screen"""
#redraw the screen during each pass through the loop.
screen.fill(ai_settings.bg_colour)
#redraw all bullets behind ship and aliens
for bullet in bullets.sprites():
bullet.draw_bullets()
ship.blitme()
aliens.draw(screen)
#redraw all bullets behind ship and aliens
for bullet in bullets.sprites():
bullet.draw_bullets()
#draw score infomation
sb.show_score()
#draw the play button if the game is inactive
if not stats.game_active:
play_button.draw_button()
#make the most recently drawn screen visable.
pygame.display.flip()
def update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets):
"""updates position of bullets and gets rid of old ones"""
# update bullet positions
bullets.update()
# gets rid of bullets that have dissapeared
for bullet in bullets.copy():
if bullet.rect.bottom <= 0:
bullets.remove(bullet)
check_bullet_alien_collisions(ai_settings, screen, stats, sb,
ship, aliens, bullets)
def check_bullet_alien_collisions(ai_settings, screen, stats, sb,
ship, aliens, bullets):
"""respond to bullet-alien collisions"""
#remove any bullets and aliens that have collided
if ai_settings.alien_hp >= 0:
collisions = pygame.sprite.groupcollide(bullets, aliens, True, False)
if collisions:
ai_settings.alien_hp -= ai_settings.bullet_dmg
elif ai_settings.alien_hp <= 0:
collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)
if collisions:
for aliens in collisions.values():
stats.score += ai_settings.alien_points * len(aliens)
sb.prep_score()
ai_settings.alien_hp = 1
check_high_score(stats, sb)
if len(aliens) == 0:
#if fleet is destroyed start a new level.
bullets.empty()
ai_settings.increase_speed()
#increase level
stats.level += 1
sb.prep_level()
create_fleet(ai_settings, screen, ship, aliens)
def check_fleet_edges(ai_settings, aliens):
"""respond appropriately in any aliens have reached an edge """
for alien in aliens.sprites():
if alien.check_edges():
change_fleet_direction(ai_settings, aliens)
break
def change_fleet_direction(ai_settings, aliens):
"""drop the entire fleet and change the fleet's direction"""
for alien in aliens.sprites():
alien.rect.y += ai_settings.fleet_drop_speed
ai_settings.fleet_direction *= -1
def ship_hit(ai_settings, stats, sb, screen, ship, aliens, bullets):
"""respond to ship being hit by an alien"""
if stats.ships_left > 0:
#decrement ships_left
stats.ships_left -= 1
#update scoreboard
sb.prep_ships()
#empty the list of aliens and bullets
aliens.empty()
bullets.empty()
#create new fleet and centre the ship
create_fleet(ai_settings, screen, ship, aliens)
ship.center_ship()
#pause
sleep(0.5)
else:
stats.game_active = False
pygame.mouse.set_visible(True)
def check_aliens_bottom(ai_settings, stats, sb, screen, ship, aliens, bullets):
"""check if any aliens have reached the bottom of the screen """
screen_rect = screen.get_rect()
for alien in aliens.sprites():
if alien.rect.bottom >= screen_rect.bottom:
#treat this the same as the ship getting hit
ship_hit(ai_settings, stats, sb, screen, ship, aliens, bullets)
break
def update_aliens(ai_settings, stats, sb, screen, ship, aliens, bullets):
"""
check if the fleet is at an edge,
and then update the positions of all the aliens in the fleet
"""
check_fleet_edges(ai_settings, aliens)
aliens.update()
#looks for alien-ship collisions
if pygame.sprite.spritecollideany(ship, aliens):
ship_hit(ai_settings, stats, sb, screen, ship, aliens, bullets)
#looks for aliens hitting the bottom of the screen
check_aliens_bottom(ai_settings, stats, sb, screen, ship, aliens, bullets)
def check_high_score(stats, sb):
"""check to see if there is a new highscore"""
if stats.score > stats.high_score:
stats.high_score = stats.score
sb.prep_high_score()
`
The text was updated successfully, but these errors were encountered:
im trying to make my aliens take multiple hits individualy not as a group and idk how to do this
`import sys
from time import sleep
import pygame
from bullet import Bullet
from alien import Alien
def get_number_aliens_x(ai_settings, alien_width):
"""determine the number of aliens that fit in a row"""
avaliable_space_x = ai_settings.screen_width - 2 * alien_width
number_aliens_x = int(avaliable_space_x / (2 * alien_width))
return number_aliens_x
def get_number_rows(ai_settings, ship_height, alien_height):
""" determine the number of rows of aliens fit on the screen"""
avaliable_space_y = (ai_settings.screen_height -
(3 * alien_height) - ship_height)
number_rows = int(avaliable_space_y / (2 * alien_height))
return number_rows
def create_alien(ai_settings, screen, aliens, alien_number, row_number):
"""create an alien and place it in a row"""
alien = Alien(ai_settings, screen)
alien_width = alien.rect.width
alien.x = alien_width + 2 * alien_width * alien_number
alien.rect.x = alien.x
alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
aliens.add(alien)
def create_fleet(ai_settings, screen, ship, aliens):
"""creates a full fleet of aliens"""
#create an alien and find the number of aliens in a row
alien = Alien(ai_settings, screen)
number_aliens_x = get_number_aliens_x(ai_settings, alien.rect.width)
number_rows = get_number_rows(ai_settings, ship.rect.height,
alien.rect.height)
#creates the fleet of aliens
for row_number in range(number_rows):
for alien_number in range(number_aliens_x):
create_alien(ai_settings, screen, aliens, alien_number,
row_number)
def check_keydown_events(event, ai_settings, screen, ship, bullets):
"""responds to keypresses"""
if event.key == pygame.K_RIGHT:
ship.moving_right = True
elif event.key == pygame.K_LEFT:
ship.moving_left = True
elif event.key == pygame.K_SPACE:
effect = pygame.mixer.Sound('sounds/shot.wav')
effect.play()
fire_bullet(ai_settings, screen, ship, bullets)
elif event.key == pygame.K_q:
sys.exit()
def fire_bullet(ai_settings, screen, ship, bullets):
"""fire a bullet if limit not reached yet"""
# create a new bullet and add it to the bullets group
if len(bullets) < ai_settings.bullets_allowed:
new_bullet = Bullet(ai_settings, screen, ship)
bullets.add(new_bullet)
def check_keyup_events(event, ship):
"""responds to key presses"""
if event.key == pygame.K_RIGHT:
ship.moving_right = False
elif event.key == pygame.K_LEFT:
ship.moving_left = False
#watch for keyboard and mouse events
def check_events(ai_settings, screen, stats, sb, play_button, ship, aliens,
bullets):
""" responds to key and mouse events """
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
check_keydown_events(event,ai_settings, screen, ship, bullets)
elif event.type == pygame.KEYUP:
check_keyup_events(event, ship)
elif event.type == pygame.MOUSEBUTTONDOWN:
mouse_x, mouse_y = pygame.mouse.get_pos()
check_play_button(ai_settings, screen, stats, sb, play_button,
ship, aliens, bullets, mouse_x, mouse_y)
def check_play_button(ai_settings, screen, stats, sb, play_button, ship, aliens
, bullets, mouse_x, mouse_y):
"""start a new game when the player clicks play"""
button_clicked = play_button.rect.collidepoint(mouse_x, mouse_y)
if button_clicked and not stats.game_active:
def update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets,
play_button):
"""updates images on the screen and flip to the new screen"""
#redraw the screen during each pass through the loop.
screen.fill(ai_settings.bg_colour)
def update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets):
"""updates position of bullets and gets rid of old ones"""
# update bullet positions
bullets.update()
def check_bullet_alien_collisions(ai_settings, screen, stats, sb,
ship, aliens, bullets):
"""respond to bullet-alien collisions"""
#remove any bullets and aliens that have collided
if ai_settings.alien_hp >= 0:
collisions = pygame.sprite.groupcollide(bullets, aliens, True, False)
if collisions:
ai_settings.alien_hp -= ai_settings.bullet_dmg
def check_fleet_edges(ai_settings, aliens):
"""respond appropriately in any aliens have reached an edge """
for alien in aliens.sprites():
if alien.check_edges():
change_fleet_direction(ai_settings, aliens)
break
def change_fleet_direction(ai_settings, aliens):
"""drop the entire fleet and change the fleet's direction"""
for alien in aliens.sprites():
alien.rect.y += ai_settings.fleet_drop_speed
ai_settings.fleet_direction *= -1
def ship_hit(ai_settings, stats, sb, screen, ship, aliens, bullets):
"""respond to ship being hit by an alien"""
if stats.ships_left > 0:
#decrement ships_left
stats.ships_left -= 1
def check_aliens_bottom(ai_settings, stats, sb, screen, ship, aliens, bullets):
"""check if any aliens have reached the bottom of the screen """
screen_rect = screen.get_rect()
for alien in aliens.sprites():
if alien.rect.bottom >= screen_rect.bottom:
#treat this the same as the ship getting hit
ship_hit(ai_settings, stats, sb, screen, ship, aliens, bullets)
break
def update_aliens(ai_settings, stats, sb, screen, ship, aliens, bullets):
"""
check if the fleet is at an edge,
and then update the positions of all the aliens in the fleet
"""
check_fleet_edges(ai_settings, aliens)
aliens.update()
def check_high_score(stats, sb):
"""check to see if there is a new highscore"""
if stats.score > stats.high_score:
stats.high_score = stats.score
sb.prep_high_score()
`
The text was updated successfully, but these errors were encountered: