Python游戏编程之赛车游戏6-4
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 random
WIDTH = 400
HEIGHT = 600
SPEED = 5
SCORE = 0
pygame.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 SCORE
self.rect.move_ip(0,SPEED)
if (self.rect.bottom > HEIGHT):
SCORE += 1
self.rect.top = 0
self.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()