学习 Python 之 Pygame 开发坦克大战(一)
- Pygame
- 什么是Pygame?
- 初识pygame
- 1. 使用pygame创建窗口
- 2. 设置窗口背景颜色
- 3. 获取窗口中的事件
- 4. 在窗口中展示图片
- (1). pygame中的直角坐标系
- (2). 展示图片
- (3). 给部分区域设置颜色
- 5. 在窗口中显示文字
- 6. 播放音乐
Pygame
什么是Pygame?
Pygame是一组Python用于编写视频游戏的模块。Pygame在优秀的SDL库上添加了功能。可以让我们使用python语言创建功能齐全的游戏和多媒体程序,并且Pygame是高度可移植的,几乎可以在所有平台和操作系统上运行。
初识pygame
官方文档
函数名称 | 作用 | 返回值 |
---|---|---|
pygame.display.init() | 初始化展示模块 | None |
pygame.display.set_mode(size = (0, 0)) | 初始化窗口(窗口就是一个Surface对象) | Surface |
pygame.display.set_caption(title, icontitle = None) | 设置窗口标题和图标 | None |
pygame.Surface.fill(color, rect = None) | 用纯色填充表面Surface对象 | None |
pygame.Color(b, g, r) | 创建用于颜色表示的Pygame对象 | Color |
pygame.display.update() | 更新屏幕 | None |
pygame.event.get() | 获取事件队列 | Eventlist |
pygame.image.load(filename) | 从文件加载图片(图片跟窗口一样,也是Surface对象) | Surface |
pygame.Surface.get_rect() | 获取Surface对象的rect属性 | Rect |
pygame.Surface.blit(source, dest, area = None) | 在一个Surface对象上显示另一个Surface对象 | Rect |
pygame.font.init() | 初始化字体模块 | None |
pygame.font.SysFont(name, size, bold = False, italic = False) | 从系统字体创建字体对象 | Font |
pygame.font.render(text, antialias, color, background = None) | 创建一个带有指定字体的Surface对象 | Surface |
pygame.mixer.init() | 初始化混合器模块 | None |
pygame.mixer.Sound(filename) | 从文件创建声音对象 | Sound |
pygame.mixer.Sound.play(loops = 0, maxtime = 0) | 播放音乐,loops参数控制播放次数,播放次数为loops + 1次。默认为0,表示声音不会重复,只播放一次。如果loops为-1,声音将无限循环 | Channel |
pygame.mixer.Sound.stop() | 声音停止播放 | None |
pygame.mixer.Sound.set_volume(value) | 设置音量 | None |
1. 使用pygame创建窗口
import pygame
# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 1100
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Tank Battle')
创建结果
2. 设置窗口背景颜色
# 设置窗口背景颜色
blue = 255
green = 0
red = 255
BACKGROUND_COLOR = pygame.Color(blue, green, red)
window.fill(BACKGROUND_COLOR)
# 更新窗口
pygame.display.update()
完整代码
import pygame
# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 1100
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Tank Battle')
# 设置窗口背景颜色
blue = 255
green = 0
red = 255
BACKGROUND_COLOR = pygame.Color(blue, green, red)
window.fill(BACKGROUND_COLOR)
# 更新窗口
pygame.display.update()
不要忘记更新窗口
,否则不会显示颜色的
3. 获取窗口中的事件
def getWindowEvent():
for event in pygame.event.get():
# 点击窗口右上角的关闭触发的事件
if event.type == pygame.QUIT:
sys.exit()
# 鼠标按下事件
elif event.type == pygame.MOUSEBUTTONDOWN:
x, y = event.pos
print('鼠标按下, 鼠标位置({x}, {y})'.format(x = x, y = y))
# 鼠标抬起事件
elif event.type == pygame.MOUSEBUTTONUP:
print('鼠标抬起')
# 键盘按键按下事件
elif event.type == pygame.KEYDOWN:
print('键盘按键按下')
# 具体键盘事件触发
if event.key == pygame.K_j:
print('按下键盘 j 键')
# 键盘按键抬起事件
elif event.type == pygame.KEYUP:
print('键盘按键抬起')
完整代码
import pygame
import sys
def getWindowEvent():
for event in pygame.event.get():
# 点击窗口右上角的关闭触发的事件
if event.type == pygame.QUIT:
sys.exit()
# 鼠标按下事件
elif event.type == pygame.MOUSEBUTTONDOWN:
x, y = event.pos
print('鼠标按下, 鼠标位置({x}, {y})'.format(x = x, y = y))
# 鼠标抬起事件
elif event.type == pygame.MOUSEBUTTONUP:
print('鼠标抬起')
# 键盘按键按下事件
elif event.type == pygame.KEYDOWN:
print('键盘按键按下')
# 具体键盘事件触发
if event.key == pygame.K_j:
print('按下键盘 j 键')
# 键盘按键抬起事件
elif event.type == pygame.KEYUP:
print('键盘按键抬起')
# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 1100
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Tank Battle')
# 设置窗口背景颜色
blue = 255
green = 0
red = 255
BACKGROUND_COLOR = pygame.Color(blue, green, red)
window.fill(BACKGROUND_COLOR)
while 1:
# 获取键盘事件
getWindowEvent()
# 更新窗口
pygame.display.update()
运行后按下鼠标左键,键盘j键,键盘s键
系统的事件都具有一组成员属性。下面是事件类型及其特定属性的列表图(图片来源链接)
4. 在窗口中展示图片
(1). pygame中的直角坐标系
(2). 展示图片
import pygame
# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 1100
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Tank Battle')
# 设置图片路径
path = './picture.jpg'
# 加载图片
image = pygame.image.load(path)
# 获取直角坐标
rect = image.get_rect()
# 设置图片的位置,在(0,0)处加载图片
rect.left = 0
rect.top = 0
# 在窗口显示
window.blit(image, rect)
# 更新窗口
pygame.display.update()
运行结果(图片太大了,超过了窗口的尺寸)
(3). 给部分区域设置颜色
import pygame
# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 1100
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Tank Battle')
# 设置窗口背景颜色
blue = 255
green = 0
red = 255
BACKGROUND_COLOR = pygame.Color(blue, green, red)
window.fill(BACKGROUND_COLOR)
# 给部分区域设置颜色
rect = pygame.Rect(400, 400, 50, 50)
REGION_COLOR = pygame.Color(50, 50, 150)
window.fill(REGION_COLOR, rect)
# 更新窗口
pygame.display.update()
5. 在窗口中显示文字
import pygame
# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 1100
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Tank Battle')
# 设置文字内容
text = 'Hello Pygame'
# 初始化字体
pygame.font.init()
# 设置文字字体和大小
fontSize = 16
font = pygame.font.SysFont('georgia', fontSize)
# 加载文字并设置颜色
fontColor = pygame.Color(255, 255, 255)
fontObject = font.render(text, True, fontColor)
# 设置展示位置
position = (50, 50)
# 展示文字
window.blit(fontObject, position)
# 更新窗口
pygame.display.update()
运行结果
6. 播放音乐
import pygame
# 初始化混合器模块
pygame.mixer.init()
# 加载音乐
sound = pygame.mixer.Sound('./star.wav')
# 播放音乐
sound.play()