第十三章—外星人

13-1 星星 :找一幅星星图像,并在屏幕上显示一系列整齐排列的星星。

alien3.py

 1 import pygame
 2 from pygame.sprite import Sprite
 3 class Alien3(Sprite):
 4     """表示单个外星人的类"""
 5     def __init__(self,screen):
 6         """初始化外星人并设置其初始位置"""
 7         super(Alien3,self).__init__()
 8         self.screen=screen
 9 
10         #加载外星人图像,并设置其rect属性
11         self.image=pygame.image.load('image/alien.bmp')
12         self.rect=self.image.get_rect()
13 
14         #每个外星人最初都在屏幕左上角附近
15         self.rect.x=self.rect.width
16         self.rect.y=self.rect.height
17 
18         #存储外星人的准确位置
19         self.x=float(self.rect.x)
20 
21     def blitme(self):
22         """在指定位置绘制外星人"""
23         self.screen.blit(self.image,self.rect)

game_function3.py

 1 import sys
 2 import pygame
 3 from alien3 import Alien3
 4 
 5 def create_fleet(screen,aliens):
 6     """创建外星人群"""
 7     #创建一个外星人,并计算一行可容纳多少个外星人
 8     #外星人间距为外星人宽度
 9     alien=Alien3(screen)
10     alien_width = alien.rect.width
11     alien_height = alien.rect.height
12     available_space_x = 1000 - 2 * alien_width
13     number_aliens_x = int(available_space_x / (2 * alien_width))
14     available_apace_y = (500 - (2 * alien_height))
15     number_rows = int(available_apace_y / (2 * alien_height))
16 
17     #创建外星人群
18     for row_number in range(number_rows):
19         for alien_number in range(number_aliens_x):
20             alien = Alien3(screen)
21             alien.x = alien_width + 2 * alien_width * alien_number
22             alien.rect.x = alien .x
23             alien.y = alien_height + 2 * alien_height * row_number
24             alien.rect.y = alien .y
25             aliens.add(alien)

alien_invasion3.py

 1 import sys
 2 import pygame
 3 from pygame.sprite import Group
 4 import game_function3 as gf
 5 from alien3 import Alien3
 6 
 7 
 8 def run_game():
 9     #初始化游戏并创建一个屏幕对象
10     pygame.init()
11     screen=pygame.display.set_mode((1000,500))
12     bg_color = (230, 230, 230)
13     pygame.display.set_caption("Alien Invasion")
14     aliens=Group()
15 
16     while True:
17         for event in pygame.event.get():
18             if event.type == pygame.QUIT:
19                 sys.exit()  #若不写这三句退出有影响
20         gf.create_fleet(screen, aliens)
21         screen.fill(bg_color)
22         aliens.draw(screen)
23         pygame.display.flip()
24 
25 run_game()

输出:

13-2 更逼真的星星 :为让星星的分布更逼真,可随机地放置星星。本书前面说过,可像下面这样来生成随机数:

  from random import randint 

  random_number = randint(-10,10)

 alien3.py

 1 import pygame
 2 from pygame.sprite import Sprite
 3 class Alien3(Sprite):
 4     """表示单个外星人的类"""
 5     def __init__(self,screen):
 6         """初始化外星人并设置其初始位置"""
 7         super(Alien3,self).__init__()
 8         self.screen=screen
 9 
10         #加载外星人图像,并设置其rect属性
11         self.image=pygame.image.load('image/alien.bmp')
12         self.rect=self.image.get_rect()
13 
14         #每个外星人最初都在屏幕左上角附近
15         self.rect.x=self.rect.width
16         self.rect.y=self.rect.height
17 
18         #存储外星人的准确位置
19         self.x=float(self.rect.x)
20 
21     def blitme(self):
22         """在指定位置绘制外星人"""
23         self.screen.blit(self.image,self.rect)

game_function3.py

 1 import sys
 2 import pygame
 3 from alien3 import Alien3
 4 from random import randint
 5 
 6 def create_fleet(screen,aliens):
 7     """创建外星人群"""
 8     #创建一个外星人,并计算一行可容纳多少个外星人
 9     #外星人间距为外星人宽度
10     alien=Alien3(screen)
11     alien_width = alien.rect.width
12     alien_height = alien.rect.height
13     available_space_x = 1000 - 2 * alien_width
14     number_aliens_x = int(available_space_x / (2 * alien_width))
15     available_apace_y = (500 - (2 * alien_height))
16     number_rows = int(available_apace_y / (2 * alien_height))
17 
18     #创建外星人群
19     for row_number in range(number_rows):
20         for alien_number in range(number_aliens_x):
21             alien = Alien3(screen)
22             alien.x = randint(-10,10) + 2 * alien_width * alien_number
23             alien.rect.x = alien .x
24             alien.y = randint(-10,10) + 2 * alien_height * row_number
25             alien.rect.y = alien .y
26             aliens.add(alien)

alien_invasion3.py

 1 import sys
 2 import pygame
 3 from pygame.sprite import Group
 4 import game_function3 as gf
 5 from alien3 import Alien3
 6 
 7 
 8 def run_game():
 9     #初始化游戏并创建一个屏幕对象
10     pygame.init()
11     screen=pygame.display.set_mode((1000,500))
12     bg_color = (230, 230, 230)
13     pygame.display.set_caption("Alien Invasion")
14     aliens=Group()
15     gf.create_fleet(screen, aliens)
16     
17     while True:
18         for event in pygame.event.get():
19             if event.type == pygame.QUIT:
20                 sys.exit()  #若不写这三句退出有影响
21 
22         screen.fill(bg_color)
23         aliens.draw(screen)
24         pygame.display.flip()
25 
26 run_game()

输出:

 

13-3 雨滴 :寻找一幅雨滴图像,并创建一系列整齐排列的雨滴。让这些雨滴往下落,直到到达屏幕底端后消失。

alien.py

 1 import pygame
 2 from pygame.sprite import Sprite
 3 class Alien(Sprite):
 4     """表示单个外星人的类"""
 5     def __init__(self,screen):
 6         """初始化外星人并设置其初始位置"""
 7         super(Alien,self).__init__()
 8         self.screen=screen
 9 
10         self.image=pygame.image.load('image/ship.bmp')
11         self.rect=self.image.get_rect()
12         #每个外星人最初都在屏幕左上角附近
13         self.rect.x=self.rect.width
14         self.rect.y=self.rect.height
15         #存储外星人的准确位置
16         self.x = float(self.rect.x)
17         self.y = float(self.rect.y)
18 
19         self.speed = 1
20         #self.alien_speed_factor=2
21 
22     def blitme(self):
23         """在指定位置绘制外星人"""
24         self.screen.blit(self.image,self.rect)
25 
26     def update(self):
27         """向下移动外星人"""
28         self.y += self.speed
29         self.rect.y=self.y

game_function4.py

 1 import sys
 2 import pygame
 3 from alien4 import Alien
 4 
 5 def check_fleet_edges(aliens):
 6     #有外星人到达边缘时采取相应措施
 7     for alien in aliens:
 8         alien.update()
 9         if alien.rect.y>600:
10             aliens.remove(alien)
11 
12 def create_fleet(screen,aliens):
13     """创建外星人群"""
14     #创建一个外星人,并计算一行可容纳多少个外星人
15     #外星人间距为外星人宽度
16     alien=Alien(screen)
17     alien_width = alien.rect.width
18     alien_height = alien.rect.height
19     available_space_x = 1000 - 2 * alien_width
20     number_aliens_x = int(available_space_x / (2 * alien_width))
21     available_apace_y = (500 - (2 * alien_height))
22     number_rows = int(available_apace_y / (2 * alien_height))
23 
24     #创建外星人群
25     #for row_number in range(number_rows):
26     for alien_number in range(number_aliens_x):
27         alien = Alien(screen)
28         alien.x = alien_width + 2 * alien_width * alien_number
29         alien.rect.x = alien .x
30             #alien.y = alien_height + 2 * alien_height * row_number
31             #alien.rect.y = alien .y
32         aliens.add(alien)

alien_invasion4.py

 1 import sys
 2 import pygame
 3 from pygame.sprite import Group
 4 import game_function4 as gf
 5 #from settings4 import Settings
 6 from alien4 import Alien
 7 
 8 def run_game():
 9     #初始化游戏并创建一个屏幕对象
10     pygame.init()
11     screen = pygame.display.set_mode((1000, 500))
12     bg_color = (230, 230, 230)
13     pygame.display.set_caption("Alien Invasion")
14     aliens = Group()
15     gf.create_fleet(screen, aliens)
16 
17     #开始游戏主循环
18     while True:
19         for event in pygame.event.get():
20             if event.type == pygame.QUIT:
21                 sys.exit()  #若不写这三句退出有影响
22 
23         screen.fill(bg_color)
24         gf.check_fleet_edges(aliens)
25         aliens.draw(screen)
26         pygame.display.flip()
27 run_game()

输出:

13-4 连绵细雨 :修改为完成练习13-3而编写的代码,使得一行雨滴消失在屏幕底端后,屏幕顶端又出现一行新雨滴,并开始往下落。 

alien4.py

 1 import pygame
 2 from pygame.sprite import Sprite
 3 class Alien(Sprite):
 4     """表示单个外星人的类"""
 5     def __init__(self,screen):
 6         """初始化外星人并设置其初始位置"""
 7         super(Alien,self).__init__()
 8         self.screen=screen
 9         self.image=pygame.image.load('image/ship.bmp')
10         self.rect=self.image.get_rect()
11         #每个外星人最初都在屏幕左上角附近
12         self.rect.x=self.rect.width
13         self.rect.y=self.rect.height
14         #存储外星人的准确位置
15         self.x = float(self.rect.x)
16         self.y = float(self.rect.y)
17         self.speed = 1
18 
19     def blitme(self):
20         """在指定位置绘制外星人"""
21         self.screen.blit(self.image,self.rect)
22 
23     def update(self):
24         """向下移动外星人"""
25         self.y += self.speed
26         self.rect.y=self.y

game_function4.py

 1 import sys
 2 import pygame
 3 from alien4 import Alien
 4 
 5 def check_fleet_edges(screen,aliens):
 6     # 有外星人到达边缘时采取相应措施
 7     flag=False
 8     for alien in aliens:
 9         alien.update()
10         if alien.rect.y > 400:
11             aliens.remove(alien)
12             flag =True
13     if flag:
14         create_fleet(screen, aliens)
15         flag = False
16 
17 def create_fleet(screen,aliens):
18     """创建外星人群"""
19     #创建一个外星人,并计算一行可容纳多少个外星人
20     #外星人间距为外星人宽度
21     alien=Alien(screen)
22     alien_width = alien.rect.width
23     alien_height = alien.rect.height
24     available_space_x = 1000 - 2 * alien_width
25     number_aliens_x = int(available_space_x / (2 * alien_width))
26     available_apace_y = (500 - (2 * alien_height))
27     number_rows = int(available_apace_y / (2 * alien_height))
28 
29     #创建外星人群
30     #for row_number in range(number_rows):
31     for alien_number in range(number_aliens_x):
32         alien = Alien(screen)
33         alien.x = alien_width + 2 * alien_width * alien_number
34         alien.rect.x = alien .x
35             #alien.y = alien_height + 2 * alien_height * row_number
36             #alien.rect.y = alien .y
37         aliens.add(alien)

alien_invasion4.py

 1 import sys
 2 import pygame
 3 from pygame.sprite import Group
 4 import game_function4 as gf
 5 #from settings4 import Settings
 6 from alien4 import Alien
 7 
 8 def run_game():
 9     #初始化游戏并创建一个屏幕对象
10     pygame.init()
11     screen = pygame.display.set_mode((1000, 500))
12     bg_color = (230, 230, 230)
13     pygame.display.set_caption("Alien Invasion")
14     aliens = Group()
15     gf.create_fleet(screen, aliens)
16 
17 
18     #开始游戏主循环
19     while True:
20         for event in pygame.event.get():
21             if event.type == pygame.QUIT:
22                 sys.exit()  #若不写这三句退出有影响
23 
24         screen.fill(bg_color)
25         gf.check_fleet_edges(screen,aliens)
26         aliens.draw(screen)
27         pygame.display.flip()
28 run_game()

输出:

13-5 抓球:创建一个游戏,在屏幕地段放置一个玩家可左右移动的角色。让一个球出现在屏幕顶端,且水平位置是随机的,并让这个球以固定的速度往下落。如果角色与球发生碰撞(表示将球抓住了),就让球消失。每当角色抓住球或引球抵达屏幕低端而消失后,都创建一个新球。

settings5.py

 1 class Settings():
 2     #存储《外星人入侵》的所有设置的类
 3     def __init__(self):
 4         #初始化游戏的设置
 5         #屏幕设置
 6         self.screen_width=1200
 7         self.screen_height=700
 8         self.bg_color=(230,230,230)
 9         #飞船的设置
10         self.ship_speed_factor=1.5
11         self.alien_speed_factor=1

alien5,py

 1 import pygame
 2 from pygame.sprite import Sprite
 3 from random import randint
 4 class Alien(Sprite):
 5     """表示单个外星人的类"""
 6     def __init__(self,ai_settings,screen):
 7         """初始化外星人并设置其初始位置"""
 8         super(Alien,self).__init__()
 9         self.screen=screen
10         self.screen_rect = self.screen.get_rect()
11         self.ai_settings=ai_settings
12         #加载外星人图像,并设置其rect属性
13         self.image=pygame.image.load('image/alien.bmp')
14         self.rect=self.image.get_rect()
15         #每个外星人最初都在屏幕顶端随机位置
16         self.rect.x=randint(0,self.screen_rect.right-self.rect.width)
17         self.rect.y=0
18         #存储外星人的准确位置
19         self.x=float(self.rect.x)
20         self.y = float(self.rect.y)
21 
22     def blitme(self):
23         """在指定位置绘制外星人"""
24         self.screen.blit(self.image,self.rect)
25 
26     def update(self):
27         """向下移动外星人"""
28         self.y +=self.ai_settings.alien_speed_factor
29         self.rect.y=self.y

ship5.py

 1 import pygame
 2 from pygame.sprite import Sprite
 3 class Ship(Sprite):
 4     def __init__(self,ai_settings,screen):
 5         #初始化飞船并设置其初始位置
 6         super(Ship, self).__init__()
 7         self.screen=screen
 8         self.ai_settings=ai_settings
 9         #加载飞船图像并获取其外接矩形
10         self.image=pygame.image.load('image/ship.bmp')
11         self.rect=self.image.get_rect()
12         self.screen_rect=screen.get_rect()
13         #将每艘新飞船放在屏幕底部中央
14         self.rect.centerx=self.screen_rect.centerx
15         self.rect.bottom=self.screen_rect.bottom
16         #在飞船的属性center中存储小数值
17         self.center=float(self.rect.centerx)
18 
19         #移动标志
20         self.moving_right=False
21         self.moving_left = False
22     def update(self):
23         """根据移动标志调整飞船位置"""
24         #更新飞船的center值,而不是rect
25         if self.moving_right and self.rect.right<self.screen_rect.right:
26             self.center+=self.ai_settings.ship_speed_factor
27         if self.moving_left and self.rect.left>0:
28             self.center-=self.ai_settings.ship_speed_factor
29         #根据self.center更新rect对象
30         self.rect.centerx=self.center
31 
32     def blitme(self):
33         #在指定位置绘制飞船
34         self.screen.blit(self.image,self.rect)

game_functions5.py

 1 import sys
 2 import pygame
 3 from ship5 import Ship
 4 from alien5 import Alien
 5 from settings5 import Settings
 6 
 7 def check_keydown_events(event,ai_settings,screen,ship):
 8     """响应按键"""
 9     if event.key == pygame.K_RIGHT:
10         # 向右移动飞船
11         ship.moving_right = True
12     elif event.key == pygame.K_LEFT:
13         # 向zuo移动飞船
14         ship.moving_left = True
15     elif event.key==pygame.K_q:
16         sys.exit()
17 
18 def check_keyup_events(event,ship):
19     """响应松开"""
20     if event.key == pygame.K_RIGHT:
21         # 向右移动飞船
22         ship.moving_right = False
23     elif event.key == pygame.K_LEFT:
24         # 向zuo移动飞船
25         ship.moving_left = False
26 
27 def check_events(ai_settings,screen,ship):
28     for event in pygame.event.get():
29         if event.type == pygame.QUIT:
30             sys.exit()
31         elif event.type==pygame.KEYDOWN:
32             check_keydown_events(event, ai_settings,screen,ship)
33 
34         elif event.type==pygame.KEYUP:
35             check_keyup_events(event, ship)
36 
37 def update_screen(ai_settings,screen,ship,alien):
38     """更新屏幕上的图像,并切换到新屏幕上"""
39     #每次循环时都重绘屏幕
40     screen.fill(ai_settings.bg_color)
41     ship.draw(screen)
42     alien.draw(screen)
43     #让最近绘制屏幕可见
44     pygame.display.flip()
45 
46 def creat_alien(ai_settings,screen,alien):
47     if len(alien)==0:
48         ali=Alien(ai_settings,screen)
49         alien.add(ali)
50 
51 def creat_ship(ai_settings,screen,ship):
52     if len(ship)==0:
53         sh=Ship(ai_settings,screen)
54         ship.add(sh)
55 
56 def update_aliens(ai_settings,alien,screen,ship):
57     for al in alien:
58         al.update()
59         if al.rect.y>al.screen_rect.bottom:
60             alien.remove(al)
61     collisions = pygame.sprite.groupcollide(alien, ship, True, False)

alien_invasion5.py

 1 import sys
 2 import pygame
 3 from pygame.sprite import Group
 4 import game_functions5 as gf
 5 from settings5 import Settings
 6 from ship5 import Ship
 7 from alien5 import Alien
 8 
 9 
10 def run_game():
11     #初始化游戏并创建一个屏幕对象
12     pygame.init()
13     ai_settings=Settings()
14     screen=pygame.display.set_mode(
15         (ai_settings.screen_width,ai_settings.screen_height))#窗口尺寸
16     pygame.display.set_caption("Alien Invasion")
17     #创建一个飞船、一个外星人组合
18     ship=Ship(ai_settings,screen)
19     ship=Group()
20     alien=Group()
21 
22     #开始游戏主循环
23     while True:
24         gf.creat_ship(ai_settings, screen, ship)
25         for shi in ship:
26             gf.check_events(ai_settings, screen, shi)
27             shi.update()
28 
29         gf.creat_alien(ai_settings,screen, alien)
30         gf.update_aliens(ai_settings, alien, screen, ship)
31 
32         gf.update_screen(ai_settings,screen,ship,alien)
33 
34 run_game()

输出:

 13-6 游戏结束:在为完成练习 13-5 而编写的代码中,跟踪玩家有多少次未将球接着。在未接着求的次数到达三次后,结束游戏。

settings5.py

 1 class Settings():
 2     #存储《外星人入侵》的所有设置的类
 3     def __init__(self):
 4         #初始化游戏的设置
 5         #屏幕设置
 6         self.screen_width=1200
 7         self.screen_height=700
 8         self.bg_color=(230,230,230)
 9 
10 
11         #飞船的设置
12         self.ship_speed_factor=1.5
13         self.alien_speed_factor=1
14         self.ship_limit = 3

ship5.py

 1 import pygame
 2 from pygame.sprite import Sprite
 3 class Ship(Sprite):
 4     def __init__(self,ai_settings,screen):
 5         #初始化飞船并设置其初始位置
 6         super(Ship, self).__init__()
 7         self.screen=screen
 8         self.ai_settings=ai_settings
 9         #加载飞船图像并获取其外接矩形
10         self.image=pygame.image.load('image/ship.bmp')
11         self.rect=self.image.get_rect()
12         self.screen_rect=screen.get_rect()
13         #将每艘新飞船放在屏幕底部中央
14         self.rect.centerx=self.screen_rect.centerx
15         self.rect.bottom=self.screen_rect.bottom
16         #在飞船的属性center中存储小数值
17         self.center=float(self.rect.centerx)
18 
19         #移动标志
20         self.moving_right=False
21         self.moving_left = False
22     def update(self):
23         """根据移动标志调整飞船位置"""
24         #更新飞船的center值,而不是rect
25         if self.moving_right and self.rect.right<self.screen_rect.right:
26             self.center+=self.ai_settings.ship_speed_factor
27         if self.moving_left and self.rect.left>0:
28             self.center-=self.ai_settings.ship_speed_factor
29         #根据self.center更新rect对象
30         self.rect.centerx=self.center
31 
32     def blitme(self):
33         #在指定位置绘制飞船
34         self.screen.blit(self.image,self.rect)
35 
36     def center_ship(self):
37         self.center = self.screen_rect.centerx

alien5.py

 1 import pygame
 2 from pygame.sprite import Sprite
 3 from random import randint
 4 class Alien(Sprite):
 5     """表示单个外星人的类"""
 6     def __init__(self,ai_settings,screen):
 7         """初始化外星人并设置其初始位置"""
 8         super(Alien,self).__init__()
 9         self.screen=screen
10         self.screen_rect = self.screen.get_rect()
11         self.ai_settings=ai_settings
12         #加载外星人图像,并设置其rect属性
13         self.image=pygame.image.load('image/alien.bmp')
14         self.rect=self.image.get_rect()
15         #每个外星人最初都在屏幕顶端随机位置
16         self.rect.x=randint(0,self.screen_rect.right-self.rect.width)
17         self.rect.y=0
18         #存储外星人的准确位置
19         self.x=float(self.rect.x)
20         self.y = float(self.rect.y)
21 
22     def blitme(self):
23         """在指定位置绘制外星人"""
24         self.screen.blit(self.image,self.rect)
25 
26     def update(self):
27         """向下移动外星人"""
28         self.y +=self.ai_settings.alien_speed_factor
29         self.rect.y=self.y

game_stats5.py

 1 class GameStats():
 2     """跟踪游戏的统计信息"""
 3     def __init__(self,ai_settings):
 4         """初始化统计信息"""
 5         self.ai_settings=ai_settings
 6         self.reset_stats()
 7         self.game_active = True
 8 
 9     def reset_stats(self):
10         """初始化在游戏运行期间可能变化的统计信息"""
11         self.ships_left=self.ai_settings.ship_limit

game_functions5.py

 1 import sys
 2 import pygame
 3 from ship5 import Ship
 4 from alien5 import Alien
 5 from settings5 import Settings
 6 from time import sleep
 7 from pygame.sprite import Group
 8 
 9 def check_keydown_events(event,ai_settings,screen,ship):
10     """响应按键"""
11     if event.key == pygame.K_RIGHT:
12         # 向右移动飞船
13         ship.moving_right = True
14     elif event.key == pygame.K_LEFT:
15         # 向zuo移动飞船
16         ship.moving_left = True
17     elif event.key==pygame.K_q:
18         sys.exit()
19 
20 def check_keyup_events(event,ship):
21     """响应松开"""
22     if event.key == pygame.K_RIGHT:
23         # 向右移动飞船
24         ship.moving_right = False
25     elif event.key == pygame.K_LEFT:
26         # 向zuo移动飞船
27         ship.moving_left = False
28 
29 def check_events(ai_settings,screen,ship):
30     for event in pygame.event.get():
31         if event.type == pygame.QUIT:
32             sys.exit()
33         elif event.type==pygame.KEYDOWN:
34             check_keydown_events(event, ai_settings,screen,ship)
35 
36         elif event.type==pygame.KEYUP:
37             check_keyup_events(event, ship)
38 
39 def update_screen(ai_settings,screen,ship,alien):
40     """更新屏幕上的图像,并切换到新屏幕上"""
41     #每次循环时都重绘屏幕
42     screen.fill(ai_settings.bg_color)
43     ship.draw(screen)
44     alien.draw(screen)
45     #让最近绘制屏幕可见
46     pygame.display.flip()
47 
48 def creat_alien(ai_settings,screen,alien):
49     if len(alien)==0:
50         ali=Alien(ai_settings,screen)
51         alien.add(ali)
52 
53 def creat_ship(ai_settings,screen,ship):
54     if len(ship)==0:
55         sh=Ship(ai_settings,screen)
56         ship.add(sh)
57 
58 
59 
60 
61 def update_aliens(ai_settings,stats,aliens,screen,ship):
62     for al in aliens:
63         al.update()
64         if al.rect.y>al.screen_rect.bottom:
65             aliens.remove(al)
66             if stats.ships_left > 0:
67                 stats.ships_left -= 1
68             else:
69                 stats.game_active = False
70     if pygame.sprite.groupcollide(aliens, ship, True, False):
71         sleep(0.5)

alien_invasion5.py

 1 import sys
 2 import pygame
 3 from pygame.sprite import Group
 4 import game_functions5 as gf
 5 from settings5 import Settings
 6 from ship5 import Ship
 7 from alien5 import Alien
 8 from game_stats5 import GameStats
 9 
10 
11 def run_game():
12     #初始化游戏并创建一个屏幕对象
13     pygame.init()
14     ai_settings=Settings()
15     screen=pygame.display.set_mode(
16         (ai_settings.screen_width,ai_settings.screen_height))#窗口尺寸
17     pygame.display.set_caption("Alien Invasion")
18 
19     stats = GameStats(ai_settings)
20     #创建一个飞船、一个外星人组合
21     ship=Ship(ai_settings,screen)
22     ship=Group()
23     alien=Group()
24 
25     #开始游戏主循环
26     while True:
27         gf.creat_ship(ai_settings, screen, ship)
28         for shi in ship:
29             gf.check_events(ai_settings, screen, shi)
30             shi.update()
31         if stats.game_active:
32             gf.creat_alien(ai_settings,screen, alien)
33             gf.update_aliens(ai_settings,stats, alien, screen, ship)
34         else:
35             sys.exit()
36         gf.update_screen(ai_settings,screen,ship,alien)
37 
38 run_game()

输出:

原文地址:https://www.cnblogs.com/liuhaier/p/9104635.html