star.py
import pygame
from pygame.sprite import Sprite
class Star(Sprite):
'''表示单个星星的类'''
def __init__(self, ai_settings, screen):
super(Star,self).__init__()
self.screen = screen
self.ai_settings = ai_settings
#加载星星图像,并设置其rect属性
self.image = pygame.image.load('images/star.bmp')
self.rect = self.image.get_rect()
#每个星星都在屏幕左上角附近
self.rect.x = self.rect.width
self.rect.y = self.rect.height
#存储星星的准确位置
self.x = float(self.rect.x)
def blitme(self):
'''在指定位置绘制星星'''
self.screen.blit(self.image, self.rect)
function.py
import sys
import pygame
from star import Star
def check_keys():
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
def get_number_stars_x(ai_settings, star_width):
'''计算每行可容纳多少星星'''
available_space_x = ai_settings.screen_width - 2 * star_width
number_star_x = int(available_space_x / (2 * star_width))
return number_star_x
def get_number_rows(ai_settings, star_height):
'''计算屏幕可容纳多少行星星'''
available_space_y = (ai_settings.screen_height -
(3 * star_height))
number_rows = int(available_space_y / (2 * star_height))
return number_rows
def create_star(ai_settings, screen, stars, star_number, row_number):
"""创建一个星星并将其放在当前行"""
star = Star(ai_settings, screen)
star_width = star.rect.width
star.x = star_width + 2 * star_width * star_number
star.rect.x = star.x
star.rect.y = star.rect.height + 2 * star.rect.height * row_number
stars.add(star)
def create_fleet(ai_settings, screen, stars):
"""创建星星群"""
#创建一个星星,并计算一行可容纳多少个星星
star = Star(ai_settings, screen)
number_stars_x = get_number_stars_x(ai_settings, star.rect.width)
number_rows = get_number_rows(ai_settings, star.rect.height)
#创建星星群
for row_number in range(number_rows):
for star_number in range(number_stars_x):
create_star(ai_settings, screen, stars, star_number, row_number)
def update_screen(ai_settings, screen, stars):
'''更新屏幕上的图像,并切换到新屏幕'''
#每次徐循环时都重绘屏幕
screen.fill(ai_settings.bg_color)
stars.draw(screen)
#让最近绘制的屏幕可见
pygame.display.flip()
setting.py
class Settings():
def __init__(self):
#初始化游戏的设置
#屏幕设置
self.screen_width = 1200
self.screen_height = 800
self.bg_color = (0,0,0)
#13-1
import pygame
from pygame.sprite import Group
from setting import Settings
importfunction as gf
def run_game():
#初始化游戏并创建一个屏幕对象
pygame.init()
ai_settings = Settings()
screen = pygame.display.set_mode(
(ai_settings.screen_width, ai_settings.screen_height))
pygame.display.set_caption("Star")
stars = Group()
gf.create_fleet(ai_settings, screen, stars)
#开始游戏的循环
while True:
gf.check_keys()
gf.update_screen(ai_settings, screen, stars)
run_game()
遗忘了如下代码导致运行出现错误
def check_keys():
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()