单独实现alien invasion游戏中的alien
中间使用嵌套循环
import pygame
import sys
from pygame.sprite import Sprite
from pygame.sprite import Group
class Alien(Sprite):
def __init__(self):
super().__init__()
self.image = pygame.image.load("images/alien.bmp")
self.rect = self.image.get_rect()
self.rect.x = self.rect.width
self.rect.y = self.rect.height
def update(self):
self.rect.x += direction
pygame.init()
screen = pygame.display.set_mode((1200,800))
alien = Alien()
aliens = Group()
alien_width = alien.rect.width
direction = 1 # 1代表向右,-1代表向左
# 省略计算外星人行数和每行个数的过程
for row_number in range(4): # 行数为4
for alien_number in range(9): # 每行个数为9
alien = Alien()
alien.rect.x = alien_width + 2 * alien_width * alien_number
alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
aliens.add(alien)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
for alien in aliens.sprites():
if alien.rect.right >= 1200 or alien.rect.left <= 0:
for alien in aliens.sprites():
alien.rect.y += 10 # 到达边界时所有外星人下移
direction *= -1 # 达到边界时用*=-1改变方向
break
screen.fill((230,230,230))
aliens.update()
aliens.draw(screen)
pygame.display.flip()
但第一次写的代码,不是整行一起下移,而是每个外星人在到达边界时下移,效果也不错,但是再想复现却一时弄不出来了。今后再复现这一结果。