Pygame《飞机游戏》(一)

基于《Python编程从入门到实践》12-14章。记录我在学习过程中遇到的问题,和大家分享。

首先需要在Pycharm中导入Pygame包,导入的方式请自行百度。我有两个Python路径,之前在导入pygame有报错,是因为Python路径选错了,对应的pip版本太低,换了路径就好了。导入成功后,在File-->Settings-->Default Settings里面可以看到pygame包,我下的是1.9.3vision。安装好后就可以开始编程了。

首先,创建Pygame窗口以及响应用户输入。需要用到sys和pygame模块。

运行一下发现报错:name 'Ture' is not defined,这是个很常见的错误,将“True”错写成“Ture,ture,true”

import sys
import pygame

def run_game():
    # 初始化游戏并创建一个屏幕对象
    pygame.init()
    screen = pygame.display.set_mode((1200, 800))
    pygame.display.set_caption("飞机大战")

    # 开始游戏的主循环
    while True:
        # 监视键盘和鼠标事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

        # 让最近绘制的屏幕可见
        pygame.display.flip()
run_game()

在这段程序中包含游戏对于屏幕的初始化设置,为了便于修改设置,需要创建一个设置类class Settings,将所有设置存储在一起,便于在添加新的功能的添加和管理。

class Settings():
    """存储《飞机大战》的所有设置的类"""
    def __init__(self):
        """初始化游戏设置"""
        # 屏幕设置,宽度、高度、背景色(护眼色)
        self.screen_width = 1200
        self.screen_heigth = 800
        self.bg_color = (199, 237, 204)

将屏幕初始化放入设置类中,主程序也需要修改一下。从settings.py加载Settings类,并创建一个Settings实例存储在变量ai_settings中。

import sys
import pygame
from settings import Settings

def run_game():
    # 初始化pygame、设置和屏幕对象
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_heigth))
    pygame.display.set_caption("飞机大战")

    # 开始游戏的主循环
    while True:
        # 监视键盘和鼠标事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

        # 每次循环时都重绘屏幕
        screen.fill(ai_settings.bg_color)

        # 让最近绘制的屏幕可见
        pygame.display.flip()
run_game()

然后,我们要创建一艘飞船,并显示在窗口界面。创建一个class Ship类,用与在指定位置绘制一艘飞船。导入图像ship.bmp,原图是png图片,我用美图秀秀修改了背景颜色并保存为bmp文件。注意素材背景和屏幕背景请设备一致。这里确定飞船绘制位置用的是屏幕中心x坐标centerx和屏幕底部边缘bottom来确定,你也可以使用其他的方法。

import pygame
class Ship():
    def __init__(self, screen):
        """初始化飞船并设置其初始位置"""
        self.screen = screen
        # 加载飞船图像并获取其外接矩形
        self.image = pygame.image.load('image/ship.bmp')
        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类绘制飞船,导入Ship类,创建一个名为ship的Ship实例,要在主循环前创建,防止每次循环都创建一个实例。在屏幕背景填充后,再调用ship.blitme()绘制飞船。

import sys
import pygame
from settings import Settings
from ship import Ship

def run_game():
    # 初始化pygame、设置和屏幕对象
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_heigth))
    pygame.display.set_caption("飞机大战")

    # 创建一艘飞船
    ship = Ship(screen)

    # 开始游戏的主循环
    while True:
        # 监视键盘和鼠标事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

        # 每次循环时都重绘屏幕
        screen.fill(ai_settings.bg_color)
        ship.blitme()

        # 让最近绘制的屏幕可见
        pygame.display.flip()
run_game()

再次运行程序,可以看见屏幕上有一个飞船呈现。





展开阅读全文

没有更多推荐了,返回首页