WXr/game_functions.py

69 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import sys
import pygame
from bullet import Bullet
def check_keydown_events(event, ai_settings, screen, ship, bullets):
# 移动飞船
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:
fire_bullet(ai_settings, screen, ship, bullets)
def check_keyup_events(event, ship):
# 停止移动飞船
if event.key == pygame.K_RIGHT:
ship.moving_right = False
elif event.key == pygame.K_LEFT:
ship.moving_left = False
def check_events(ai_settings, screen, ship, bullets):
"""响应按键和鼠标事件"""
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)
def fire_bullet(ai_settings, screen, ship, bullets):
"""如果还没有达到限制,就发射一颗子弹"""
if len(bullets) < ai_settings.bullets_allowed:
# 创建一个子弹并将其加入编组bullets
new_bullet = Bullet(ai_settings, screen, ship)
bullets.add(new_bullet)
def update_screen(ai_settings, screen, ship, bullets):
"""更新屏幕上的图像,并切换到新屏幕"""
# 用背景色填充屏幕
screen.fill(ai_settings.bg_color)
# 在飞船和外星人后面重新绘制所有的子弹
for bullet in bullets.sprites():
bullet.draw_bullet()
# 绘制飞船图形
ship.blitme()
# 让最近绘制的屏幕可见(刷新屏幕)
pygame.display.flip()
def update_bullets(bullets):
"""更新子弹位置,并删除已经消失的子弹"""
bullets.update()
# 删除子弹
for bullet in bullets.copy():
if bullet.rect.bottom <= 0:
bullets.remove(bullet)