和Elon交流,提到最多的就是“我有一个好玩的主意“。”好玩”这个标签,是我们对游戏添加的默认属性默认属性。以玩为学,轻松。
如果学了马上教给别人呢?根据美国教育学家埃德加·戴尔学习效果金字塔模型,“传授”的效果是“阅读”的9倍。
以下就是我第一天翻译,第二天就教给小朋友的内容。
Python Pygame简介
Pygame是Python的一个扩展库,起源于2000年夏,它封装了SDL(Simple DirectMedia Layer, 它通过OpenGL和Direct3D提供对音频、键盘、鼠标、操纵杆和图形硬件的低级访问。),使SDL的使用更易上手。
小试牛刀
学习一个新的扩展库的最佳方法就是直接拿一个例子来学习。让我们来看看一个沙滩球的来回弹动的代码。
来源:https://www.pygame.org/docs/tut/PygameIntro.html
作者:Pete Shinners, [email protected]
译者:Joe
#!/usr/bin/env python3
import sys, pygame
pygame.init()
size = width, height = 320, 240
speed = [2, 2]
black = 0, 0, 0
screen = pygame.display.set_mode(size)
ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
ballrect = ballrect.move(speed)
if ballrect.left < 0 or ballrect.right > width:
speed[0] = -speed[0]
if ballrect.top < 0 or ballrect.bottom > height:
speed[1] = -speed[1]
screen.fill(black)
screen.blit(ball, ballrect)
pygame.display.flip()
第1行:导入pygame和sys库。sys是python自带的库,pygame需要提前安装。导入库就是导入其中的所有变量。
第2行:初始化Pygame
第4行:定义一个元组size, 它由两个元素组成,宽度和高度。也可以写成size = (width, height) = (320, 240),使用连等号进行赋值。 元组元素不能修改和删除,只能对整个元组进行删除。引用元组的元素时用方括号,索引从0开始。定义的时间用圆括号。点击查看关于元组的更多特性。
第5行:定义一个speed列表,使用方括号,speed = [speed_x, speed_y],水平方向和竖直两个方向上的速度。列表元素的索引从0开始。列表元素的值可以修改。点击查看关于列表的更多特性。
第6行:定义一个颜色元组black=(0,0,0),三个元素分别表示Red, Green, Blue的分量值。白色white = (255,255,255)。
第8行:pygame.display.set_mode()生成一个二维平面图像,在这个二维平面上任何图像将被监视。可以理解为Scratch的舞台背景。
第10行:导入沙滩球图片,即游戏角色。Pygame支持SDL所支持的所有图像,包括BMP,JPG,PNG,TGA和GIF。pygame.image.load()返回这个图片的二维平面信息,包括颜色和透明度。这个图片所占的矩形区域可以用对象的get_rect()取出来。
第13行:重复执行,无限循环。相当于Scratch里的无条件重复执行(forever)。
第14-15行:检测是否关闭舞台,即pygame.QUIT。pygame.event.get()会对舞台上发生的事件,比如用户输入、用户对角色的移动和重绘等事件。
第17-21行:移动角色,如果碰到边缘就反弹。通过检测角色的边缘是否在舞台尺寸范围来调整角色的运动方向(速度的方向,负号为反方向)。直接调整为负号,可能不那么符合牛顿运动定律。
第23行:清空屏幕,并用黑色填充。如果你是第一次接触动画制作,会觉得这很奇怪,也许会问“为什么要清空屏幕?直接在屏幕上移动它不就可以了吗?”电脑动画实际上是按照先后顺序显示在屏幕上的一系列图片。这和我们学习绘画不一样,绘画总是先学习静物,然后学习速绘——抓住一瞬间的动作。而动画就是一系列的瞬间动作的连续显示——前一时刻的图像显示完毕之后就消失,马上呈现下一时刻的一个画面。人类之所以能够认为它是动态的,那是因为大脑帮助我们眼睛接收到的一系列图像进行了连接处理。如果把这句注释掉你会看到一串沙滩球,没过一会就填满整个屏幕了。
第24行:把图片绘到屏幕上。blit的愿意是“传图”,计算机的图像处理器是将图片的像素格点信息一一复制到屏幕上。
第25行:刷新屏幕显示,将显卡里面的缓存信息显示在屏幕上。pygame通过两个缓存区管理图像的动态显示,flip将两块图像缓存区合并成完整的一个,然后显示到屏幕上。如果少了此行代码,则图像可能显示不全。
弹球游戏对应的Scratch2.0代码
如果大家熟悉Scratch——最适合编程启蒙的图形化编程语言,一定不陌生图2的代码。
第1-2行:启动程序,设置沙滩球初始位置。这个方向暗含在上文python代码的第3行。
第3行:设置沙滩球运动的初始方向。与上文python代码的第6行对应。
第4-6行:是一个无限循环,循环内部设置了(1)沙滩球的每次移动的步长——决定了球的运动速度,暗含在上文python代码的第3行;(2)碰到边缘就反弹。与上文 python代码的第19-22行对应。