Python游戏库Pygame经典教程(推荐!)
简介
Pygame是用于展示图形、播放音乐和处理用户输入的Python游戏开发库。本篇攻略将详细讲解Pygame的使用方法,包括安装、常用功能和示例。
安装
使用pip可以方便地安装Pygame:
pip install pygame
常用功能
创建游戏窗口
在Pygame中,可以使用pygame.display
模块来创建和管理游戏窗口:
import pygame
# 初始化Pygame
pygame.init()
# 创建窗口(800x600)
screen = pygame.display.set_mode((800, 600))
# 设置窗口标题
pygame.display.set_caption("My Game")
# 运行游戏循环
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 在窗口中绘制图形、播放音乐、处理用户输入等操作
# 更新窗口显示
pygame.display.flip()
绘制图形
在Pygame中,可以使用pygame.draw
模块来绘制各种形状的图形:
import pygame
# 初始化Pygame
pygame.init()
# 创建窗口(800x600)
screen = pygame.display.set_mode((800, 600))
# 绘制矩形
pygame.draw.rect(screen, (255, 0, 0), (0, 0, 100, 100))
# 绘制圆形
pygame.draw.circle(screen, (0, 255, 0), (400, 300), 50)
# 更新窗口显示
pygame.display.flip()
示例说明
游戏《贪吃蛇》
以下是一个使用Pygame开发的贪吃蛇游戏示例:
import pygame
import random
# 初始化Pygame
pygame.init()
# 创建窗口(800x600)
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Snake Game")
# 定义颜色
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
# 定义贪吃蛇的初始位置和长度
snake = [(400, 300), (400, 320), (400, 340)]
snake_size = 20
# 定义食物的位置
food = (random.randint(0, 39) * 20, random.randint(0, 29) * 20)
# 定义贪吃蛇的移动方向
direction = "UP"
# 开始游戏循环
while True:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
direction = "UP"
elif event.key == pygame.K_DOWN:
direction = "DOWN"
elif event.key == pygame.K_LEFT:
direction = "LEFT"
elif event.key == pygame.K_RIGHT:
direction = "RIGHT"
# 根据移动方向更新贪吃蛇的位置
if direction == "UP":
snake.pop()
snake.insert(0, (snake[0][0], snake[0][1] - snake_size))
elif direction == "DOWN":
snake.pop()
snake.insert(0, (snake[0][0], snake[0][1] + snake_size))
elif direction == "LEFT":
snake.pop()
snake.insert(0, (snake[0][0] - snake_size, snake[0][1]))
elif direction == "RIGHT":
snake.pop()
snake.insert(0, (snake[0][0] + snake_size, snake[0][1]))
# 如果贪吃蛇吃到了食物,则增加长度并重新生成食物
if snake[0] == food:
snake.append(snake[-1])
food = (random.randint(0, 39) * 20, random.randint(0, 29) * 20)
# 绘制贪吃蛇和食物
screen.fill(WHITE)
for pos in snake:
pygame.draw.rect(screen, GREEN, (pos[0], pos[1], snake_size, snake_size))
pygame.draw.rect(screen, RED, (food[0], food[1], snake_size, snake_size))
# 更新窗口显示
pygame.display.flip()
游戏《打砖块》
以下是一个使用Pygame开发的打砖块游戏示例:
import pygame
import random
# 初始化Pygame
pygame.init()
# 创建窗口(600x400)
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Brick Breaker")
# 定义颜色
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
# 定义挡板
paddle_pos = [250, 380]
paddle_size = [100, 20]
# 定义小球
ball_pos = [300, 200]
ball_size = 10
ball_speed = [random.choice([3, 4, 5]), random.choice([3, 4, 5])]
# 定义砖块
bricks = []
for i in range(5):
for j in range(8):
bricks.append(pygame.Rect(75*j+10, 30*i+10, 60, 20))
# 开始游戏循环
while True:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 根据小球的速度更新小球的位置
ball_pos[0] += ball_speed[0]
ball_pos[1] += ball_speed[1]
# 如果小球碰到了左右边界,则反向移动x轴方向
if ball_pos[0] < 0 or ball_pos[0] > 590:
ball_speed[0] = -ball_speed[0]
# 如果小球碰到了顶部,则反向移动y轴方向
if ball_pos[1] < 0:
ball_speed[1] = -ball_speed[1]
# 如果小球碰到了挡板,则反向移动y轴方向
if ball_pos[1] > 360 and (paddle_pos[0] <= ball_pos[0] <= paddle_pos[0]+paddle_size[0]):
ball_speed[1] = -ball_speed[1]
# 如果小球落到了下边界,则游戏结束
if ball_pos[1] > 390:
pygame.quit()
sys.exit()
# 判断小球是否碰到了砖块
for brick in bricks:
if ball_pos[0] >= brick.x and ball_pos[0] <= brick.x+brick.width and ball_pos[1] >= brick.y and ball_pos[1] <= brick.y+brick.height:
bricks.remove(brick)
if ball_pos[0] > brick.x and ball_pos[0] < brick.x+brick.width:
ball_speed[1] = -ball_speed[1]
else:
ball_speed[0] = -ball_speed[0]
break
# 移动挡板
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
paddle_pos[0] -= 5
if keys[pygame.K_RIGHT]:
paddle_pos[0] += 5
# 绘制挡板、小球和砖块
screen.fill(WHITE)
pygame.draw.rect(screen, GREEN, (paddle_pos[0], paddle_pos[1], paddle_size[0], paddle_size[1]))
pygame.draw.circle(screen, RED, (ball_pos[0], ball_pos[1]), ball_size)
for brick in bricks:
pygame.draw.rect(screen, BLACK, brick)
# 更新窗口显示
pygame.display.flip()
以上就是Pygame的介绍和使用方法的详细攻略,包括游戏窗口、图形绘制、事件处理等常用功能,以及两个示例游戏,供大家学习参考。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python游戏库pygame经典教程(推荐!) - Python技术站