2 实例化“敌人”汽车类以及对实例进行处理
2.1 实例化“敌人”汽车类
实例化“敌人”汽车类的代码如图4所示。
图4 实例化“敌人”汽车类的代码
2.2 将“敌人”汽车类的实例加入到all_sprites “精灵组”中
将“敌人”汽车类的实例加入到all_sprites “精灵组”中的代码如图5所示。
图5 将“敌人”汽车类的实例加入到“精灵组”中的代码
相关链接1 all_sprites“精灵组”的相关资料,请参考
《Python游戏编程之赛车游戏2》
2.3 将“敌人”汽车类的实例加入到Enemies“精灵组”中
将“敌人”汽车类的实例加入到Enemies“精灵组”中的代码如图6所示。
图6 将“敌人”汽车类的实例加入到Enemies“精灵组”中的代码
与“2.2 将“敌人”汽车类的实例加入到all_sprites “精灵组”中”中的all_sprites “精灵组”不同,Enemies“精灵组”中并不是游戏的所有精灵,而是只包括敌人汽车精灵(后续增加游戏难度时,可以加入多个敌人)。all_sprites “精灵组”主要用于与玩家的碰撞检测。
2.4 显示并移动“敌人”汽车类
因为已经将“敌人”汽车类的实例加入到all_sprites “精灵组”中,此时可以使用《Python游戏编程之赛车游戏2》中图10所示的代码显示并移动“敌人”汽车类,无需再写新的代码。
3 游戏运行效果
游戏运行效果如图7所示。
图7 游戏运行效果
4 完整代码
游戏的完整代码如下所示。
import pygame
import os
from pygame.locals import *
import randomWIDTH = 400
HEIGHT = 600
SPEED = 5
SCORE = 0pygame.init()
screen = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption('赛车游戏')background = pygame.image.load("AnimatedStreet.png")class Player(pygame.sprite.Sprite):def __init__(self):super().__init__() self.image = pygame.image.load("Player.png")self.rect = self.image.get_rect()self.rect.center = (160, 520)def move(self):pressed_keys = pygame.key.get_pressed()if self.rect.left > 0:if pressed_keys[K_LEFT]:self.rect.move_ip(-5, 0)if self.rect.right < WIDTH: if pressed_keys[K_RIGHT]:self.rect.move_ip(5, 0)class Enemy(pygame.sprite.Sprite):def __init__(self):super().__init__() self.image = pygame.image.load("Enemy.png")self.rect = self.image.get_rect()self.rect.center = (random.randint(40,WIDTH-40), 0)def move(self):global SCOREself.rect.move_ip(0,SPEED)if (self.rect.bottom > HEIGHT):SCORE += 1self.rect.top = 0self.rect.center = (random.randint(40, WIDTH - 40), 0)P1 = Player()
E1 = Enemy()
all_sprites = pygame.sprite.Group()
all_sprites.add(P1)
all_sprites.add(E1)
enemies = pygame.sprite.Group()
enemies.add(E1)while True:for event in pygame.event.get():if event.type == QUIT:pygame.quit()os.sys.exit()screen.blit(background, (0,0))for entity in all_sprites:entity.move()screen.blit(entity.image, entity.rect)pygame.display.update()