alien_invasion
import pygame
import game_functions as gf
from setting import Settings #从setting模块中导入Settings类
from ship import Ship
from pygame.sprite import Group
from game_stats import GameStats
from scoreboard import Scoreboard
from button import Button
def run_game():
pygame.init() # 初始化pygame
ai_settings = Settings() # 创建Settings对象(实例)
# 设置(ai_settings.screen_width, ai_settings.screen_height)大小的窗口
screen = pygame.display.set_mode((ai_settings.screen_width,\
ai_settings.screen_height))
pygame.display.set_caption("Alien Invasion by caoheng") #设置窗口标题内容
stats = GameStats(ai_settings)
sb = Scoreboard(ai_settings, screen, stats)
play_button = Button(ai_settings, screen, "Play") #创建按钮对象(实例)
ship = Ship(ai_settings, screen) #飞船对象(实例)
bullets = Group() #子弹编组
aliens = Group() #创建外星人编组
gf.create_fleet(ai_settings, screen, ship, aliens)
#程序主循环
while True:
gf.check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets) #监视控制器输入
# print(stats.game_active)
if stats.game_active:
ship.update() #飞船行为控制
gf.update_aliens(ai_settings, stats, screen, sb, ship, aliens, bullets) #外星人行为控制
gf.update_bullets(ai_settings, screen,stats, sb, ship, aliens, bullets) #子弹行为控制
gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button) #更新屏幕图像
if __name__ == "__main__":
run_game()
game_function
import sys, pygame
from bullet import Bullet
from alien import Alien
from time import sleep
def check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets):
"""监视控制器(键盘和鼠标等)输入"""
for event in pygame.event.get(): #获取控制器信息
if event.type == pygame.QUIT: #事件为退出类型,游戏窗口关闭
filename = "history_high_score.txt"
file_save(filename, stats)
elif event.type == pygame.KEYDOWN: #事件类型为按下键盘
check_keydown_events(ai_settings, screen, stats, ship, bullets, event)
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 file_save(filename, stats):
"""存储历史最高分文件"""
try:
with open(filename, 'w') as file_object:
file_object.write(str(stats.high_score))
except FileExistsError:
print("写入失败! ")
sys.exit()
def check_keydown_events(ai_settings, screen, stats, ship, bullets, event):
if event.key == pygame.K_RIGHT: #按下右方向键
ship.moving_right = True #向右移动标志位为真
elif event.key == pygame.K_q: #按下q退出
filename = "history_high_score.txt"
file_save(filename, stats)
elif event.key == pygame.K_LEFT: #按下左方向键
ship.moving_left = True #向左移动标志位为真
elif event.key == pygame.K_SPACE:#按下空格键
fire_bullet(ai_settings, screen, ship, bullets)
# elif event.key == pygame.K_p: #开始游戏
# start_game(ai_settings, screen, stats, aliens, ship, bullets, event)
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 start_game(ai_settings, screen, stats, aliens, ship, bullets, event):
# if event.key == pygame.K_p and not stats.game_active: #游戏处于非活动状态
# #重置游戏统计数据
# stats.reset_stats()
# stats.game_avtive = True
# #清空外星人和子弹列表
# aliens.empty()
# bullets.empty()
# #创建一群外星人,并让飞船居中
# create_fleet(ai_settings, screen, ship, aliens)
# ship.center_ship()
def check_play_button(ai_settings, screen,