pygame是Python的第三方库,里面提供了使用Python开发游戏的基础包,但是在进行游戏开发的时候不推荐使用pygame,本文章以示例的形式对pygame的一些简单的使用方式进行讲解。
一、游戏最小系统
"""
1、游戏初始化
pygame.init()
2、创建游戏窗口
set_mode(窗口大小) - 窗口大小是一个元组,有两个元素,分别是:width、height
set_mode((宽度, 高度))
宽度和高度的单位是像素
3、创建游戏循环(死循环)
4、检测事件
fill(颜色) - fill((r, g, b))
计算机颜色:计算机三原色 - 红、绿、蓝(rgb)
颜色值就是由三个数字组成,分别代表红、绿、蓝,数字范围是:0 - 255
Python中的颜色是一个元组,元组中有三个颜色,分别是 r、g、 b
(255, 255, 255) - 白色
(0, 0, 0) - 黑色
(255, 0, 0) - 红色
(0, 255, 0) - 绿色
(0, 0, 255) - 蓝色
"""
import pygame
# 1、游戏初始化
pygame.init()
# 2、创建游戏窗口
window = pygame.display.set_mode((400, 600))
# 将窗口填充成指定的颜色
window.fill((255, 255, 255))
# 将窗口展示到屏幕上
pygame.display.flip()
# 3、创建游戏循环
while True:
# 4、检测事件
for event in pygame.event.get():
# ===区分不同的事件 做出不同的反应===
# 判断关闭按钮点击事件是否发生
if event.type == pygame.QUIT:
exit()
二、在窗口上显示图片
"""
1、加载图片
pygame.image.load(图片地址) - 加载指定路径下的图片,返回一个图片对象
2、渲染图片
window.blit(渲染对象, 渲染位置)
渲染对象 - 图片对象(显示对象)
位置 - 元组(x, y)
3、获取图片的大小
图片对象.get_size() - 获取图片的大小,返回值是一个元组:(width, height)
4、图片缩放和旋转
a.缩放
pygame.transform.scale(缩放对象, 缩放大小) - 将指定的图片缩放到指定的大小,返回新的图片对象
b.旋转缩放
pygame.transform.rotozoom(旋转缩放对象, 旋转角度, 缩放比例)
"""
import pygame
pygame.init()
window = pygame.display.set_mode((400, 600))
window.fill((255, 255, 255))
# ========显示图片===========
# 1、加载图片
image_obj = pygame.image.load('files/2.png')
# 3、获取图片的大小
image_w, image_h = image_obj.get_size()
# 2、渲染图片
window.blit(image_obj, (0, 0))
# 4、图片缩放和旋转
new_image = pygame.transform.scale(image_obj, (150, 150))
window.blit(new_image, (200, 0))
new_image2 = pygame.transform.rotozoom(image_obj, 0, 2)
window.blit(new_image2, (0, 200))
new_image3 = pygame.transform.rotozoom(image_obj, 45, 1)
window.blit(new_image3, (200, 200))
pygame.display.flip()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
三、在窗口上显示文字
"""
1、创建字体对象(选笔)
a.系统字体(只能支持英文的)
pygame.font.SysFont(字体名, 字体大小, 是否加粗=False, 是否倾斜=False) - 返回字体对象
b.自定义字体
pygame.font.Font(字体文件路径, 字体大小)
2、根据字体创建文字对象
font.render(文字内容, 是否抗锯齿, 文字颜色)
"""
import pygame
pygame.init()
window = pygame.display.set_mode((400, 600))
window.fill((255, 255, 255))
# =======显示文字=======
# 1、创建字体对象(选笔)
# a.系统字体(只能支持英文的)
font = pygame.font.SysFont('Times', 20, bold=True, italic=True)
# b.自定义字体
font1 = pygame.font.Font('files/aa.ttf', 20)
# 2、根据字体创建文字对象
text = font.render('hello pygame 你好!', True, (255, 0, 0))
text1 = font1.render('hello pygame 你好!', True, (255, 0, 0))
# 3、将文字渲染到窗口上
window.blit(text, (50, 100))
window.blit(text1, (50, 300))
pygame.display.flip()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
四、显示图形
"""
1、画直线
pygame.draw.line(画在哪, 线的颜色, 起点, 终点, 线宽)
2、连线
pygame.draw.lines(画在哪, 线的颜色, 是否闭合, 点列表, 线宽)
依次连接点列表中的所有的点(是否闭合决定是否连接起点和终点)
3、画圆
pygame.draw.circle(画在哪儿, 颜色, 圆心坐标, 半径, 线宽=0)
注意:线宽为0的时候画实心圆
4、画弧线
pygame.draw.arc(画在哪儿, 颜色, 矩形, 起始弧度, 终止弧度, 线宽=1)
矩形就是一个元组 - (x, y, width, height):x和y是矩形左上角的坐标 width height是矩形的宽和高
"""
import pygame
from color import Color
import math
# 游戏最小系统
pygame.init()
window = pygame.display.set_mode((400, 600))
window.fill(Color.white)
# =======显示图形=======
# 1、画直线
pygame.draw.line(window, Color.red, (100, 200), (300, 400), 50)
pygame.draw.line(window, Color.red, (300, 200), (100, 400), 50)
# 2、连线
point = [(10, 10), (100, 70), (100, 170), (40, 180), (40, 320)]
pygame.draw.lines(window, Color.green, True, point, 2)
# 3、画圆
pygame.draw.circle(window, Color.yellow, (200, 300), 170, 10)
# 4、画弧线
pygame.draw.arc(window, Color.blue, (150, 300, 200, 100), math.pi/4*5, math.pi/4*7, 20)
pygame.display.flip()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
五、事件和动画
from color import Color
import pygame
pygame.init()
window = pygame.display.set_mode((400, 600))
window.fill((255, 255, 255))
# 在这儿写的代码时静态的(界面上的内容)
x = 100
y = 0
width = 100
height = 80
pygame.draw.rect(window, Color.green, (x, y, width, height))
pygame.display.flip()
while True:
y += 0.05
x += 0.02
# width -= 0.05
# height -= 0.1
window.fill(Color.white) # 覆盖原来的状态
pygame.draw.rect(window, Color.rand_color(), (x, y, width, height))
pygame.display.update() # 重新显示
# 有时间产生的时候才会进入for循环
for event in pygame.event.get():
# 1、type属性
"""
不同的type值对应不同类型的事件
QUIT - 关闭按钮被点击事件
a.鼠标相关时间
MOUSEMOTION - 鼠标移动
MOUSEBUTTONDOWN - 鼠标按下
MOUSEBUTTONUP - 鼠标弹起
event.pos - 获取鼠标事件产生的位置
b.键盘事件 - 按的是哪个键
KRYDOWN - 按键按下
KEYUP - 按键弹起
event.key - 被按的键对应的字符的编码值
"""
if event.type == pygame.QUIT:
exit()
# elif event.type == pygame.MOUSEMOTION:
# print('鼠标移动')
# pygame.draw.circle(window, Color.rand_color(), event.pos, 30)
# pygame.display.flip()
elif event.type == pygame.MOUSEBUTTONDOWN:
print('鼠标按下!', event.pos)
pygame.draw.circle(window, Color.rand_color(), event.pos, 30)
pygame.display.flip()
elif event.type == pygame.MOUSEBUTTONUP:
print('鼠标弹起!', event.pos)
elif event.type == pygame.KEYDOWN:
print('按键按下!', event.key)
elif event.type == pygame.KEYUP:
print('按键弹起!', chr(event.key))