文章目录
一、下载
pip install pygame
二、基础应用
2.1 生成窗口
代码如下(示例):
import pygame
#游戏初始化
pygame.init()
#pygame有两个窗口,一个当前显示的,一个隐藏的
#生成游戏窗口 先黑再白
screen = pygame.display.set_mode((800,600))
screen.fill((255,255,255))#改变颜色
pygame.display.flip()#相当于把之前的动作显示出
#游戏帧循环
gRunning = True
while gRunning:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gRunning = False
#退出游戏
pygame.quit()
这是一个渐变过程由黑变白(没有放GIF图)
2.2 加入图片
代码如下(示例):
# 图片显示 先黑再图片
# 我使用的是绝对路径 一定要加r
image = pygame.image.load(r'F:\python\python2021\python_gui\cdsc.jpg')
screen.blit(image,(0, 0))#起始点位置坐标 (0,0)
2.2 加入声音
代码如下(示例):
#播放声音
voice = pygame.mixer.music.load(r'F:\MP3音乐\千年之恋.mp3')
pygame.mixer.music.play()
2.3 改变颜色
代码如下(示例):
from pygame.color import THECOLORS
screen.fill(THECOLORS['red'])
2.4 加入图形
代码如下(示例):
#画形状 末0 线条宽度
pygame.draw.rect(screen,THECOLORS['blue'],[0,0,200,400],0)
pygame.draw.circle(screen,THECOLORS['green'],[400,300],100,10)
三、Pygame飞机
3.1 飞机跳跃
代码如下(示例):
gRunning = True
while gRunning:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gRunning = False
pygame.time.delay(1000)#延迟1s
pygame.bilt(img,(400,300))#screen中心位置
# 当飞机跳跃到新位置时,擦去旧位置飞机
# img.get_rect()得到图片的坐标以及长宽
pygame.draw.rect(screen,THECOLORS['white'],img.get_rect(),0)
pygame.display.flip()
3.2 飞机碰壁回弹
代码如下(示例):
# 坐标
plane_x = 0
plane_y = 0
# 位置
plane_speed_x = 5
plane_speed_y = 5
......
gRunning = True
while gRunning:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gRunning = False
pygame.time.delay(20)
pygame.draw.rect(screen,THECOLORS['white'],[plane_x,plane_y,img.get_width(),img.get_height()],0)
plane_x = plane_x+plane_speed_x
plane_y = plane_y+plane_speed_y
if plane_x > 800-img.get_width() or plane_x < 0:
plane_speed_x = - plane_speed_x#取反
if plane_y > 600-img.get_height() or plane_y < 0:
plane_speed_y = - plane_speed_y#取反
screen.blit(img,(plane_x,plane_y))
pygame.display.flip()
3.3 模拟飞机
代码如下(示例):
class Plane:
def __init__(self,img,position,speed,MaxWindow):
self.img = img
self.rect = img.get_rect()
self.rect.left,self.rect.top = position
self.speed = speed
self.MaxWindow = MaxWindow
def move(self):
self.rect = self.rect.move(self.speed)
if self.rect.left < 0 or self.rect.right >self.MaxWindow[0]:
self.speed[0] = -self.speed[0]
if self.rect.top< 0 or self.rect.bottom>self.MaxWindow[1]:
self.speed[1] = -self.speed[1]
pygame = init()
W_size = (800,600)
screen = pygame.display.set_mode(W_size)
screen.fill(THECOLORES['white'])
# 飞机图片
planeImg = pygame.image.load('plane.png')
# 多架飞机
planes = []
for i in range(5)
position = [random.randint(0,W_size[0]-planeImg.get_width(),random.randint(0,W_size[1]-planeImg.get_hright())]
speed = [random.randint(-5,5),random.randint(-5,5)]
planes.append(Plane(planeImg,position,speed,W_size))
pygame.display.flip()
gRunning = True
while gRunning:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gRunning = False
pygame.time.delay(20)
#清楚上一架飞机位置
screen.fill(THECOLORES['white'])
#更新飞机的下一帧位置
for plane in planes:
plane.move()
screen.blit(plane.img,plane.rect)
#把刚才刷新的帧显示出来
pygame.display.flip()
pygame.quit()
总结
问题1:使用相对路径加载图片出错
PS F:\python\python2021> python -u “f:\python\python2021\python_gui\pygame1.py”
pygame 2.0.1 (SDL 2.0.14, Python 3.7.0)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
File “f:\python\python2021\python_gui\pygame1.py”, line 14, in
image = pygame.image.load(img)
FileNotFoundError: No such file or directory.