用pygame开发自己的游戏-1. 基础与入门
一、前言
pygame是一个用Python写的SDL库。SDL是一个能访问计算机多媒体硬件组件(包括声卡,视频卡,输入组件等)的跨平台库。本系列主要通过pygame做小游戏来学习编程。对于学过基本语法,刷过一些题目的同学,提高自己的最佳方式就是通过做小游戏等实际的项目,有目标地做项目才能真正将知识内化。初学者一定要学会CRM(Copy Run Modify,又称魔改)大法,把书上网上的例子代码跑起来后,一定要尝试修改下代码,通过关键参数或者关键语句的修改,可以验证自己对代码的理解是否正解。
二、安装
安装pygame的最佳方式是通过pip命令来安装,在Windows下打开CMD窗口(win键 + R,输入 cmd)界面上输入pip install pygame命令便安装好。
有一些同学在这步安装过程中会遇到包无法顺利下载的问题,可以用一下命令来执行,这个命令是通过pip使用豆瓣源的镜像来下载安装pygame。两个命令的区别在于安装过程所需要的文件是在国外还是国内的网站去下载。
pip install pygame -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com
三、Hello world
学习编程任何语言,框架都是从Hello world例子开始的,学习pygame也不例外,我们从以下例子开始。
import pygame, sys
# 初始化
pygame.init()
# 设置屏幕的宽度,高度
SCREEN = pygame.display.set_mode((400, 300))
# 设置窗口的标题
pygame.display.set_caption('Hello World!')
# 游戏主循环
while True: # main game loop
for event in pygame.event.get():
# 处理退出事件
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 将屏幕的背景填充成白色,了解下RGB三原色
SCREEN.fill((255, 255, 255))
# 调用 pygame.display.update() 方法更新整个屏幕的显示
pygame.display.update()
效果如下:
游戏主循环
游戏主循环(事件)是一直在运行着的。无论是在玩游戏,更新游戏状态,渲染画面或者是采集输入数据,它是一直在不间断运行着的。当我们创建一个循环时,必须能保证,我们有方法可以跳出循环,结束程序运行。游戏中经常用各种事件要处理,比如键盘鼠标等操作,pygame把所有类似的事件都放进事件队列,再由用户来处理。我们可以用pygame.event.get()方法来操作它。目前我们只处理游戏的退出事件,上面代码里当收到退出事件后,就退出游戏。
四、常用的知识点
1. 理解游戏坐标系
pygame坐标系的理解是十分关键的,所有的图形图片的绘制都与之相关。原点 在 左上角 (0, 0) x 轴 水平方向向 右,逐渐增加 y 轴 垂直方向向 下,逐渐增加
2. 矩形结构
矩形是一个简单的矩形——仅由左上角的位置、宽度和高度来定义。很多pygame函数都把rects作为参数,它们也取“rectstyle”,这个序列的值与矩形的值相同,所以如果我需要一个矩形来定义10 20 40 50的面积,我可以做以下任何一项:
rect = pygame.Rect(10, 20, 40, 50)
rect = pygame.Rect((10, 20, 40, 50))
rect = pygame.Rect((10, 20), (40, 50))
rect = (10, 20, 40, 50)
rect = ((10, 20, 40, 50))
如果要将结果矩形化画出来,可以使用pygame.draw.rect函数。第一个参数填写屏幕对象,第二参数为矩形的颜色,第三个参数为矩形对象,可以填写前面矩形结构中的一种。
import pygame, sys
# 初始化
pygame.init()
# 设置屏幕的宽度,高度
SCREEN = pygame.display.set_mode((400, 300))
# 设置窗口的标题
pygame.display.set_caption('Hello World!')
# 游戏主循环
while True: # main game loop
for event in pygame.event.get():
# 处理退出事件
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 将屏幕的背景填充成白色,了解下RGB三原色
SCREEN.fill((255, 255, 255))
# 调用 pygame.display.update() 方法更新整个屏幕的显示
pygame.draw.rect(SCREEN, (255, 0, 0), (20, 30, 100, 50))
pygame.display.update()
效果如下:
五、练习题
在(80, 60)位置画出一个绿色,段度为60,高度100的矩形。
在(180, 160)位置画出一个蓝色,半径为50的圆形。
pygame.draw.circle 原型:pygame.draw.circle(Surface, color, pos, radius, width=0): return Rect 用途:用于绘制圆形。第三个参数pos是圆心的位置坐标,radius指定了圆的半径。
画一条紫色的直线, 起点为(0, 80), 终点为(70, 120)
pygame.draw.line 原型:pygame.draw.line(Surface, color, start_pos, end_pos, width=1): return Rect 用途:绘制直线段,start_pos 和 end_pos 分别表示起始点和终止点,用坐标表示。width为线条宽度,默认为1。