Python编程:从⼊门到实践,《外星⼈⼊侵》游戏代码【600⾏】【⼿敲原创】⽂章⽬录
编译环境
PyCharm
游戏界⾯
左上⾓的三个飞船,代表的是飞船个数,死亡⼀次减少⼀个
alien_invasion.py
import pygame
from pygame.sprite import Group
from settings import Settings
from game_stats import GameStats
from scoreboard import Scoreboard
from button import Button
from ship import Ship
import game_functions as gf
def run_game():
# 初始化pygame、设置和屏幕对象
pygame.init()
ai_settings = Settings()
screen = pygame.display.set_mode(
(ai_settings.screen_width, ai_settings.screen_height))
pygame.display.set_caption("Alien Invasion")
# 创建Play按钮
play_button = Button(ai_settings, screen,"Play")
# 创建存储游戏统计信息的实例,并创建记分牌
stats = GameStats(ai_settings)
sb = Scoreboard(ai_settings, screen, stats)
# 创建⼀艘飞船、⼀个⼦弹编组和⼀个外星⼈编组
ship = Ship(ai_settings, screen)
bullets = Group()
aliens = Group()
# 创建外星⼈
# 开始游戏的主循环
while True:
gf.check_events(ai_settings, screen, stats, sb, play_button, ship,
aliens, bullets)
if stats.game_active:
ship.update()
gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens,
bullets)
gf.update_aliens(ai_settings, stats, screen, sb, ship, aliens, bullets)
gf.update_screen(ai_settings, screen, stats, sb, ship, aliens,
bullets, play_button)
run_game()
alien.py
"""表⽰单个外星⼈的类"""
def__init__(self, ai_settings, screen):
"""初始化外星⼈并设置其起始位置"""
super(Alien, self).__init__()
self.screen = screen
self.ai_settings = ai_settings
# 加载外星⼈图像,并设置其rect属性
self.image = pygame.image.load('images/alien.bmp')        = _rect()
# 每个外星⼈最初都在屏幕左上⾓附近
< = width
< = height
# 存储外星⼈的准确位置
self.x =)
def blitme(self):
"""在指定位置绘制外星⼈"""
self.screen.blit(self.image, )
def check_edges(self):
"""如果外星⼈位于屏幕边缘,就返回True"""
screen_rect = _rect()
ight >= screen_rect.right:
return True
left <=0:
return True
def update(self):
"""向左或右移动外星⼈"""
self.x +=(self.ai_settings.alien_speed_factor *
self.ai_settings.fleet_direction)
< = self.x
bullet.py
"""⼀个对飞船发射的⼦弹进⾏管理的类"""
def__init__(self, ai_settings, screen, ship):
"""在飞船所处的位置创建⼀个⼦弹对象"""
super(Bullet, self).__init__()
self.screen = screen
# 在(0,0)处创建⼀个表⽰⼦弹的矩形,再设置正确的位置        = pygame.Rect(0,0, ai_settings.bullet_width,                                ai_settings.bullet_height)
python编程:从入门到实践第二版
# 存储⽤⼩数表⽰的⼦弹位置
self.y =)
self.speed_factor = ai_settings.bullet_speed_factor
def update(self):
"""向上移动⼦弹"""
# 更新表⽰⼦弹位置的⼩数值
self.y -= self.speed_factor
# 更新表⽰⼦弹的rect的位置
< = self.y
def draw_bullet(self):
"""在屏幕上绘制⼦弹"""
(self.screen, lor, ) button.py