Python外星人入侵游戏(三):创建飞船类

今日任务:

  • 添加飞船类

2.1:添加飞船形象

  • 请在主项目文件夹(alien_invasion)中新建一个文件夹,将其命名为images
  • 并将文件ship.bmp保存到这个文件夹中(也可以是ship.jpg之类的图片)
    可以去我的github上下载图片

选择图像时,要特别注意其背景色。请尽可能选择背景透明的图像,这样可使用图像编辑器将其背景设置为任何颜色。图像的背景色与游戏的背景色相同时,游戏看起来最漂亮;你也可以将游戏的背景色设置成与图像的背景色相同。

2.2:创建Ship类

ship.py

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

    def blitme(self):
        """在指定位置绘制飞船"""
        self.screen.blit(self.image, self.rect)

理解注释

  • Ship的方法init()接受两个参数:引用self和screen,其中后者指定了要将飞船绘制到什么地方
  • 为加载图像,我们调用了pygame.image.load()。这个函数返回一个表示飞船的surface,而我们将这个surface存储到了self.image
  • 加载图像后,我们使用get_rect()获取相应surface的属性rect
  • 处理rect对象时,可使用矩形四角和中心的x和y坐标
  • 要将游戏元素居中,可设置相应rect对象的属性center、 centerx或centery。要让游戏元素与屏幕边缘对齐,可使用属性top、 bottom、 left或right
  • 我们将把飞船放在屏幕底部中央。为此,首先将表示屏幕的矩形存储在self.screen_rect中,再将self.rect.centerx(飞船中心的x坐标)设置为表示屏幕的矩形的属性centerx,并将self.rect.bottom(飞船下边缘的y坐标)设置为表示屏幕的矩形的属性bottom。 Pygame将使用这些rect属性来放置飞船图像,使其与屏幕下边缘对齐并水平居中。
  • 我们定义了方法paint(),它根据self.rect指定的位置将图像绘制到屏幕上。

注意:在Pygame中,原点(0, 0)位于屏幕左上角,向右下方移动时,坐标值将增大。在1200×800的屏幕上,原点位于左上角,而右下角的坐标为(1200, 800)。

2.3:在屏幕上绘制飞船

alien_invasion.py

import pygame
import pygame.display as window
from settings import Settings
# 引入Ship类
from ship import Ship


def run_game():
    pygame.init()
    settings = Settings()

    screen = window.set_mode(
        (settings.screen_width, settings.screen_height))
    window.set_caption("外星人入侵")
    # 创建一艘飞船
    ship = Ship(screen)

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()

        screen.fill(settings.bg_color)
        # 绘制飞船
        ship.blitme()
        window.flip()


run_game()
  • 我把pygame.display简称为了windows
  • 我们导入Ship类,并在创建屏幕后创建一个名为ship的Ship实例。必须在主while循环前面创建该实例,以免每次循环时都创建一艘飞船。填充背景后,我们调用ship.paint()将飞船绘制到屏幕上,确保它出现在背景前面。
  • 现在如果运行alien_invasion.py,将看到飞船位于空游戏屏幕底部中央


    Python外星人入侵游戏(三):创建飞船类_第1张图片
    游戏《外星人入侵》屏幕底部中央有一艘飞船

Python外星人入侵游戏(一)
Python外星人入侵游戏(二)

你可能感兴趣的:(Python外星人入侵游戏(三):创建飞船类)