Python学习笔记

2021年4月11日Python的pygame

2021-04-11  本文已影响0人  爱生活的越仔

2.1 设计流程步骤:

sys模块介绍:

sys是Python的标准库,提供Python运行时环境变量的操控。

引入模块的概念:python3模块(菜鸟教程)

廖雪峰官方教程-模块(链接)

Hello World程序

import pygame,sys

pygame.init()#对Pygame内部各功能模块进行初始化创建及变量设置,默认调用
#初始化显示窗口,第一个参数size是一个二值元组,分别表示窗口的宽度和高度
screen = pygame.display.set_mode((600, 400))
#设置显示窗口的标题内容,参数title是一个字符串类型
pygame.display.set_caption("Pygame游戏之旅")

while True:
    for event in pygame.event.get():#从Pygame的事件队列中取出事件,并从队列中删除该事件
        #获得事件类型,并逐类响应
        if event.type == pygame.QUIT:
            sys.exit()
    #对显示窗口进行更新,默认窗口全部重绘
    pygame.display.update()

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

2.3.1从需求到实现的三个关键要素:

• (1) 壁球:游戏需要一个壁球,通过图片引入

• (2) 壁球运动:壁球要能够上下左右运动

使图片每次向右及向下移动1个像素

• (3) 壁球反弹:壁球要能够在上下左右边缘反弹

遇到左右两侧,横向速度取反;

遇到上下两侧,纵向速度取反。

Rect对象

Rect对象有一些重要属性,例如:

top,bottom,left,right 表示上下左右

width,height 表示宽度、高度

screen.fill(color)

显示窗口背景填充为color颜色,采用RGB色彩体系。

由于壁球不断运动,运动后原有位置将默认填充白色,因此需要不断刷新背景色

screen.blit(src, dest)

将一个图像绘制在另一个图像上,即将src绘制到dest位置上。通过Rect对象引导对壁球

的绘制。

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壁球")
#将filename路径下的图像载入游戏
ball = pygame.image.load("PYG02-ball.gif")

#Pygame使用内部定义的Surface对象表示所有载入的图像
#.get_rect()方法返回一个覆盖图像的矩形Rect对象
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]
    
    #显示窗口背景填充为color颜色
    screen.fill(BLACK)
    #将一个图像绘制在另一个图像上
    screen.blit(ball, ballrect)
    pygame.display.update()

壁球小游戏(节奏型)与屏幕的帧率设置

2.4.1需求:

壁球可以按照一定速度运动

从需求到实现的关键要素:

壁球速度:如何控制壁球的运动速度呢?

• 每次循环壁球运动一步

• 控制循环间隔即可控制速度

• (展示型)在尽最大能力运动

pygame.time.Clock()

创建一个Clock对象,用于操作时间

clock.tick(framerate)

获取事件并逐类响应控制帧速度,即窗口刷新速度,例如:刷新屏幕

clock.tick(100)表示每秒钟100次帧刷新,视频中每次展示的静态图像称为帧

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壁球")
# 将filename路径下的图像载入游戏
ball = pygame.image.load("PYG02-ball.gif")

# Pygame使用内部定义的Surface对象表示所有载入的图像
# .get_rect()方法返回一个覆盖图像的矩形Rect对象
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()
    # 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]

    # 显示窗口背景填充为color颜色
    screen.fill(BLACK)
    # 将一个图像绘制在另一个图像上
    screen.blit(ball, ballrect)
    pygame.display.update()
    fclock.tick(fps)

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

2.5.1 从需求到实现的关键要素:

键盘使用:如何获取键盘的操作事件

速度调节:根据对应按键调节壁球运动速度

键盘使用
pygame.KEYDOWN

Pygame对键盘敲击的事件定义,键盘每个键对应一个具体定义

[图片上传失败...(image-14b9b4-1618151886786)]

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()
        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)
    # ballrect.move(x,y)
    # 矩形移动一个偏移量(x,y),即在横轴方向移动x像素,纵轴方向移动y像素,xy为整数
    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)
上一篇下一篇

猜你喜欢

热点阅读