首页Python1.游戏开发框架Pygam...

1.游戏开发框架Pygame

1、Pygame库简介与安装:

  • Pygame库简介

Pygame是Python最经典的2D游戏开发第三方库,也支持3D游戏开发。
Pygame适合用于游戏逻辑验证、游戏入门及系统演示验证,因此可以说Pygame的使用还是相当广泛的。
Pygame是一种游戏开发引擎,基本逻辑具有参考价值

  • Pygame库安装

使用pip install pygame命令安装即可。
在cmd中执行python -m pygame.examples.aliens命令,可以运行一个系统提供的小游戏。

2、Pygame最小开发框架:

如下代码是Pygame最小开发框架:

import pygame,sys

pygame.init()
screen = pygame.display.set_mode((600,400))
pygame.display.set_caption("Pygame游戏之旅")

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

运行后出现一个如下窗口,没有任何功能,只是在窗口左上角显示了Pygame游戏之旅文字:

这就是Pygame最小开发框架,也反应了游戏开发中的基本逻辑框架,最小开发框架包括了以下四个部分:

  • 引入Pygame和sys
# sys是Python的标准库
# sys提供Python运行时环境变量的操控
# sys.exit()用于结束游戏并推出
import pygame,sys
  • 初始化init()及设置
pygame.init()
screen = pygame.display.set_mode((600,400))
pygame.display.set_caption("Pygame游戏之旅")

pygame.init()——对pygame内部各功能模块进行初始化创建及变量设置,默认调用。

pygame.display.set_mode(size)——初始化显示窗口,第一个参数size是一个二值元祖,分别表示窗口的宽度和高度。

pygame.display.set_caption(title)——设置显示窗口的标题内容,参数title是一个字符串类型。

  • 获取事件并逐类响应
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

while True:——无限循环,直到Python运行时推出结束。
pygame.event.get()——从Pygame的事件队列中取出事件,并从队列中删除该事件,例如:键盘按下是一个事件。
event.type pygame.QUIT——获得事件类型,并逐类响应;pygame.QUIT是Pygame中定义的退出事件常量。

  • 刷新屏幕
# 对显示窗口进行更新,默认窗口全部重绘
pygame.display.update()

3、壁球小游戏(展示型)与图像的基本使用:

从需求到实现的三个关键要素:
(1)壁球:游戏需要一个壁球,通过图片引入。
(2)壁球运动:壁球要能够上下左右运动。
(3)壁球反弹:壁球要能够再上下左右边缘反弹。

# 引用
import pygame, sys

# 初始化
pygame.init()
size = width, height = 600, 400
speed = [1, 1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Pygame壁球")
# ygame.image.load(filename)将filename路径下的图像载入游戏,支持jpg、png、gif等13种常用图片格式
ball = pygame.image.load("PYG02-ball.gif")
# Surface对象 ball.get_rect()
# Pygame使用内部定义的Surface对象表示所有载入的图像,其中.get_rect()方法返回一个覆盖图像的矩形Rect对象
# Rect对有一些重要属性,例如:top、bottom、left、right表示其上下左右坐标值,width、height表示宽度、高度
ballrect = ball.get_rect()

# 事件处理
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    # ballrect.move(x,y)表示矩形移动一个偏移量(x,y),即在横轴方向移动x像素,纵轴方向移动y像素,xy为整数
    ballrect = ballrect.move(speed[0], speed[1])
    # 壁球的反弹运动,遇到左右两侧,横向速度取反;遇到上下两侧,纵向速度取反
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = - speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = - speed[1]

    # 窗口刷新
    # screen.fill(color)显示窗口背景填充为color颜色,采用RGB色彩体系。由于壁球不断运动,运动后原有位置将默认填充为白色,因此需要不断刷新背景色
    screen.fill(BLACK)
    # screen.blit(src,dest)将一个图像绘制在另一个图像上,即将src绘制到dest位置上,通过Rect对象引导对壁球的绘制,也就是让图像跟着矩形的移动而移动
    screen.blit(ball, ballrect)
    pygame.display.update()

运行代码将得到如下窗口显示,但是此时壁球运动速度很快,看的不是很清楚。

4、壁球小游戏(节奏型)与屏幕的帧数设置:

需求:壁球可以按照一定速度运动。
实现的关键要素:如何控制壁球的运动速度。

import pygame, sys

pygame.init()
size = width, height = 600, 400
speed = [1, 1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Pygame壁球")
ball = pygame.image.load("PYG02-ball.gif")
ballrect = ball.get_rect()
# 每秒帧数参数
fps = 300
# pygame.time.Clock()创建一个Clock对象,用于操作时间
fclock = pygame.time.Clock()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    ballrect = ballrect.move(speed[0], speed[1])
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = - speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = - speed[1]

    screen.fill(BLACK)
    screen.blit(ball, ballrect)
    pygame.display.update()
    # clock.tick(framerate)是Clock对象的一个方法,控制帧速度,即窗口刷新速度,例如,clock.tick(100)表示每秒100次帧刷新,视频中每次展示的静态图像称为帧
    fclock.tick(fps)

运行代码将看到此时壁球运动速度放慢了,但是我们此时是不能操作壁球运动的。

5、壁球小游戏(操控型)与键盘的基本使用:

壁球小游戏(操控型)设置:
(1)方向键↑:纵向绝对速度增加1个像素(纵向加速)。
(2)方向键↓:纵向绝对速度减少1个像素(纵向减速)。
(3)方向键←:横向绝对速度减少1个像素(横向减速)。
(4)方向键→:纵向绝对速度增加1个像素(横向加速)。
壁球小游戏(操控型)解决问题:
(1)键盘使用:如何获取键盘的操作事件。
(2)速度调节:根据对应按键调节壁球运动速度。

import pygame, sys

pygame.init()
size = width, height = 600, 400
speed = [1, 1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Pygame壁球")
ball = pygame.image.load("PYG02-ball.gif")
ballrect = ball.get_rect()
fps = 300
fclock = pygame.time.Clock()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        # pygame.KEYDOWN是Pygame对键盘敲击事件定义,键盘吗,每个键对应一个具体定义
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                speed[0] = speed[0] if speed[0] == 0 else (abs(speed[0]) - 1) * int(speed[0] / abs(speed[0]))
            elif event.key == pygame.K_RIGHT:
                speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] - 1
            elif event.key == pygame.K_UP:
                speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] - 1
            elif event.key == pygame.K_DOWN:
                speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1) * int(speed[1] / abs(speed[1]))
    ballrect = ballrect.move(speed)
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = - speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = - speed[1]

    screen.fill(BLACK)
    screen.blit(ball, ballrect)
    pygame.display.update()
    fclock.tick(fps)

运行代码后将可以通过键盘上下左右键来控制壁球运动。

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments