class Constant:
SCREEN_WIDTH = 400 # 页面宽度
SCREEN_HEIGHT = 600 # 页面长度
BLACK = (0, 0, 0)
RED = "#FF0000" # 结束界面
FPS = 60 # 帧率大小
SCORE = 0 # 初始分数
SPEED = 5 # 敌人的运动速度
首先定义一个类,这个类的作用是定义一些以后会用得到的常量,例如页面的长宽高,游戏帧率的大小,这里的帧率选择60帧(可以根据自身喜好调节)。
class Enemy1(pygame.sprite.Sprite):
def __init__(self):
super(Enemy1,self).__init__() # 调用父类的init方法初始化对象
x,y = (random.randint(22,378),0)
self.image = pygame.image.load("Demo/Enemy.png")
self.surf = pygame.Surface((42, 70))
self.rect = self.surf.get_rect(center=(x,y)) # 设置敌人的位置
def move(self):
global SCORE
self.rect.move_ip(0,Constant.SPEED)
if self.rect.top > Constant.SCREEN_HEIGHT: # 设置加分机制
Constant.SCORE += 1
self.rect.top = 0
self.rect.left = random.randint(0,356) # 随机出现
设置一个敌人命名为Enemy1,初始化Enemy1,设置基础的参数,例如敌人的位置,敌人的大小,敌人随机出现的位置。最后利用一个if语句来设置我们的加分机制使得游戏更具挑战性。在设置完成我们第一个敌人以后我们可以复制粘贴,再增加一个敌人,使得游戏具体可玩性。
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__() # 调用父类的init方法初始化对象
x,y = (Constant.SCREEN_WIDTH/2,Constant.SCREEN_HEIGHT/2)
self.image = pygame.image.load("Demo/Player.png")
self.surf = pygame.Surface((40,75))
self.rect = self.image.get_rect(left=170,bottom=Constant.SCREEN_HEIGHT -21)
def move(self):
press_keys = pygame.key.get_pressed()
if press_keys[K_DOWN] and self.rect.bottom <= Constant.SCREEN_HEIGHT -21:
self.rect.move_ip(0, 5)
if press_keys[K_UP] and self.rect.top >= 0:
self.rect.move_ip(0, -5)
if press_keys[K_RIGHT] and self.rect.right <= Constant.SCREEN_WIDTH - 4:
self.rect.move_ip(5, 0)
if press_keys[K_LEFT] and self.rect.left >= 0:
self.rect.move_ip(-5, 0)
还是一样,我们首先初始化玩家的属性,将玩家的位置定义在居中靠下,设置玩家的大小。在初始化完成以后,我们利用pygame的功能,设置键盘让我们的赛车跑起来,并且要注意不要让玩家跑到我们的屏幕外面去了。
class Game:
def __init__(self):
pygame.init()
# 字体和文字
self.font_big = pygame.font.SysFont("Impact", 60)
self.font_small = pygame.font.SysFont("Verdana", 20)
self.game_over = self.font_big.render("GAME OVER", True, Constant.BLACK)
self.SPEED_UP = pygame.USEREVENT + 1
pygame.time.set_timer(self.SPEED_UP, 1000) # 设置计时器
#设置标题以及界面大小
pygame.display.set_caption("逆行飙车")
size = width, height = (Constant.SCREEN_WIDTH,Constant.SCREEN_HEIGHT)
self.screen = pygame.display.set_mode(size)
self.clock = pygame.time.Clock()
self.background = pygame.image.load("Demo/AnimatedStreet.png")
def run(self):
player = Player()
enemy1 = Enemy1()
enemy2 = Enemy2()
enemies = pygame.sprite.Group()
enemies.add(enemy1,enemy2)
all_sprites = pygame.sprite.Group()
all_sprites.add(player)
all_sprites.add(enemy1,enemy2)
pygame.mixer.Sound("Demo/background.wav").play(-1)
OUT_OF_RANGE = pygame.USEREVENT + 1
while True:
self.screen.blit(self.background, (0, 0))
scores = self.font_small.render(str(Constant.SCORE), True, Constant.BLACK)
self.screen.blit(scores, (10, 10))
for sprite in all_sprites:
self.screen.blit(sprite.image, sprite.rect)
sprite.move()
for event in pygame.event.get():
if event.type == self.SPEED_UP:
Constant.SPEED += 1
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if pygame.sprite.spritecollide(player, enemies, True): # True将敌人所在的组全部清除掉
pygame.mixer.Sound("Demo/crash.wav").play()
time.sleep(1)
self.screen.fill(Constant.RED)
self.screen.blit(self.game_over, (80, 150))
pygame.display.update()
time.sleep(2)
pygame.quit()
sys.exit()
pygame.display.update()
self.clock.tick(Constant.FPS)
在运行这个类里面,我们可以首先设置自己想要的字体,这里的字体我们可以自己在自己的电脑里找到电脑自带的字体。
随后我们将我们的玩家和敌人都放入到调用的pygame精灵这个库里面,使得我们的游戏运行起来。利用while循环让我们的游戏启动起来。
if __name__=='__main__': # 使得游戏真正运行起来
game = Game()
game.run()
调用这段代码使得我们的游戏真正运行起来。