【python3小白上路系列】外星人入侵——驾驶飞船

被公众号这个原创机制搞懵逼了,申诉中。日更也先攒着吧,不能停下来。

1.4 驾驶飞船

下面来让玩家能够左右移动飞船。为此,我们将编写代码,在用户按左或右箭头键时作出响应。我们将首先专注于向右移动,再使用同样的原理来控制向左移动。通过这样做,
你将学会如何控制屏幕图像的移动。

1.4.1 响应按键

每当用户按键时,都将在Pygame中注册一个事件。事件都是通过方法pygame.event.get() 获取的,因此在函数check_events() 中,我们需要指定要检查哪些类型的事 件。每次按键都被注册为一个KEYDOWN 事件。

检测到KEYDOWN 事件时,我们需要检查按下的是否是特定的键。例如,如果按下的是右箭头键,我们就增大飞船的rect.centerx 值,将飞船向右移动:

def check_events(ship):
    #响应案件和鼠标事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                # 向右移动飞船
                ship.rect.centerx += 1

在alien_invasion.py中,我们需要更新调用的check_events() 代码,将ship 作为实参传递给它:

import pygame

from setting import Settings
from ship import Ship
import game_functions as gf

def rungame():
    #初始化游戏并创建一个屏幕对象
    pygame.init()

    #实例化设置对象
    ai_settings = Settings()
    screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
    pygame.display.set_caption("Alien Invasion")

    #创建一只飞船
    ship = Ship(screen)
      
    #开始游戏主循环
    while True:
        gf.check_events(ship)
        gf.update_screen(ai_settings,screen,ship)

rungame()
1.4.2 允许持续移动

玩家按住右箭头键不放时,我们希望飞船不断地向右移动,直到玩家松开为止。我们将让游戏检测pygame.KEYUP 事件,以便玩家松开右箭头键时我们能够知道这一点;然后,我们将结合使用KEYDOWN 和KEYUP 事件,以及一个名为moving_right 的标志来实现持续移动。

飞船不动时,标志moving_right 将为False 。玩家按下右箭头键时,我们将这个标志设置为True ;而玩家松开时,我们将这个标志重新设置为False 。 飞船的属性都由Ship 类控制,因此我们将给这个类添加一个名为moving_right 的属性和一个名为update() 的方法。方法update() 检查标志moving_right 的状态,如果这个标志为True ,就调整飞船的位置。每当需要调整飞船的位置时,我们都调用这个方法。 下面是对Ship 类所做的修改:

import pygame

class Ship():

    def __init__(self,screen):
        #初始化飞船并设置其初始位置
        self.screen = screen

        # 加载飞船图像并获取其外接矩形
        self.image = pygame.image.load('images/ship.png')
        self.rect = self.image.get_rect()
        self.screen_rect = screen.get_rect()

        # 将每艘新飞船放在屏幕底部中央
        self.rect.centerx = self.screen_rect.centerx
        self.rect.bottom = self.screen_rect.bottom

        # 移动标志
        self.moving_right = False

    def update(self):
        if self.moving_right:
            self.rect.centerx += 1
    def blitme(self):
        # 在指定位置绘制飞船
        self.screen.blit(self.image, self.rect)

就到这里吧。

你可能感兴趣的:(【python3小白上路系列】外星人入侵——驾驶飞船)