• 第十三章—外星人


    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()

    输出:

  • 相关阅读:
    DEBIAN下中文显示
    SpringMVC整合Quartz实现定时任务以及Tomcat服务执行初始化定时任务
    SpringMVC 配置定时执行任务
    Mybatis update In
    mybatis在xml文件中处理大于号小于号的方法
    解决Cannot change version of project facet Dynamic web module to 2.5
    android 圆角边框及图片
    Android MotionEvent事件响应机制
    android:configChanges属性
    Android之ScrollView嵌套ListView
  • 原文地址:https://www.cnblogs.com/liuhaier/p/9104635.html
Copyright © 2020-2023  润新知