这篇博客中,我将继续昨天的内容,对game_functions.py进行简单回顾。
(14)change_fleet_direction():
def change_fleet_direction(ai_settings,aliens):\"\"\"将整群外星人下移,并改变它们的方向\"\"\"for alien in aliens.sprites():alien.rect.y += ai_settings.fleet_drop_speedai_settings.fleet_direction *= -1
这个函数是用来改变外星人的移动方向的。在第146行的 for 循环中,对编组中的每一个外星人,在碰到屏幕边缘后都向下移动
fleet_drop_speed
,并改变移动方向(向右用 1 表示,向左用 -1 表示)。
(15)ship_hit():
def ship_hit(ai_settings, stats,screen, ship, aliens, bullets):\"\"\"响应被外星人撞到的飞船\"\"\"if stats.ships_left > 0:stats.ships_left -= 1 # 将ships_left减1# 清空外星人列表和子弹列表aliens.empty()bullets.empty()# 创建一群新的外星人,并将飞船放到屏幕底端中央create_fleet(ai_settings, screen, ship, aliens)ship.center_ship()#暂停游戏sleep(0.5)else:stats.game_active = False
这是一个响应外星人撞到飞船后的函数。 可以看出,若撞击后,玩家还有剩余飞船,这个函数就将玩家的剩余飞船数减去1,然后在暂停0.5秒后重置游戏。若玩家没有剩余飞船了,便会结束游戏。
(16)check_aliens_bottom():
def check_aliens_bottom(ai_settings, stats, screen, ship, aliens, bullets):\"\"\"检查是否有外星人到达了屏幕底端\"\"\"screen_rect = screen.get_rect()for alien in aliens.sprites():if alien.rect.bottom >= screen_rect.bottom:# 像飞船被撞到一样进行处理ship_hit(ai_settings, stats, screen, ship, aliens, bullets)break
这是一个响应外星人到达屏幕底端后的函数。从第174行可以看到,当有外星人到达屏幕的底端后,便会调用
ship_hit()
按照外星人撞到飞船来处理游戏。
(17)update_aliens():
def update_aliens(ai_settings, stats, screen, ship, aliens, bullets):\"\"\"检查是否有外星人位于屏幕边缘,更新外星人群中所有外星人的位置\"\"\"check_fleet_edges(ai_settings, aliens)aliens.update()# 检测外星人和飞船之间的碰撞if pygame.sprite.spritecollideany(ship, aliens):ship_hit(ai_settings, stats, screen, ship, aliens, bullets)check_aliens_bottom(ai_settings, stats, screen, ship, aliens, bullets)
这个函数检查外星人与飞船的状态,更新外星人群中所有外星人的位置。可以看出,在这个函数中,调用了之前提到的几个函数来检查并进行实时更新。
(18)check_high_score():
def check_high_score(stats, sb):#检查是否诞生了新的最高得分if stats.score > stats.high_score:stats.high_score = stats.score #如果当前得分更高,就更新high_score的值sb.prep_high_score() #调用prep_high_score()来更新包含最高得分的图像
这个函数检查是否诞生了新的最高得分。如果产生了更高的得分,就更新
high_score
的值,并调用
prep_high_score()
来更新包含最高得分的图像。