如何才能让小孩对python产生兴趣?没错,让小孩把编程当成玩游戏,让它们设计出简单的游戏,找了一下,发现pygame模块的相关教程还是比较多,而且简单容易入手,但还是没找到适合小孩简单入门教程,为了让小孩更容易入手,我写了这个教程,希望它能引导更多的小朋友对python产生兴趣。
安装python
安装pygame模块
pip install pygame
1,先尝试下
import pygame
pygame.init() # 初始化
screen = pygame.display.set_mode((800,600)) # 设置窗口的大小
pygame.quit() # 结束
是不是发现有个窗口弹出来一下就消失了
2,学习time模块的睡眠方法
我们先试看什么是睡眠
import time
time.sleep(2)#加入睡眠时间2秒
print("睡醒了吗,懒虫,我等了整整2秒时间")
发现等了2秒之后才运行,我们可以尝试更改这个时间的长短来看下效果
同样我们可以利用这个方法让我们的窗口停一下再关闭,代码如下:
import pygame
import time
pygame.init() # 初始化
pygame.display.set_mode((800,600)) # 设置窗口的大小
time.sleep(2)#加入睡眠时间2秒
pygame.quit() # 结束
发现窗口可以停止2秒钟然后就关闭,那么想让窗口停长点时间,我们可以更改这个睡眠时间
3,给窗口设置一个标题
import pygame
import time
pygame.init() # 初始化
screen = pygame.display.set_mode((800,600)) # 设置窗口的大小
pygame.display.set_caption("这是一个给我们画画用的窗口")
time.sleep(2)#加入睡眠时间2秒
pygame.quit() # 结束
这里我们顺便获取一个画布,pygame.display.set_mode((800,600))的返回结果是pygame.Surface类型,也就是我们要的画布,我们可以使用screen = pygame.display.set_mode((800,600)) 来获取画布,之后我们就可以在画布screen上画画了。
4,在窗口画一个圆
circle(surface, color, center, radius)
参数surface指的是要画圆的pygame.Surface对象,也就是画布,把第三点活到的screen画布放这里就可以了
color:指定了圆的颜色(由参数width决定该颜色是画圆的线的颜色还是填充色),该参数的类型是Color类或者表示颜色的元组;颜色是按照rgb,三个值来定,可以百度rgb颜色值找下对应的颜色,这里给出几种颜色值如下:
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
center:指定了圆心的位置,其类型是Vector2类或者表示位置的元组或列表;
radius:表示圆的半径,该参数的类型是整型或者浮点型,如果该参数的值小于1,则不进行画圆的动作。
circle():函数的返回值是Rect类型的变量,表示画出的圆的范围。
尝试一下,代码如下
import pygame
import time
pygame.init() # 初始化
screen = pygame.display.set_mode((800,600)) # 设置窗口的大小
pygame.display.set_caption("这是一个给我们画画用的窗口")
pygame.draw.circle(screen,(255,0,0),(200,300),20)#画一个圆形
time.sleep(2)#加入睡眠时间2秒
pygame.quit() # 结束
但是发现窗口没什么变化,这是因为我们没有更新窗口,我们可以使用:pygame.display.update()来更新窗口
代码如下:
import pygame
import time
pygame.init() # 初始化
screen = pygame.display.set_mode((800,600)) # 设置窗口的大小
pygame.display.set_caption("这是一个给我们画画用的窗口")
pygame.draw.circle(screen,(255,0,0),(200,300),20)#画一个圆形
pygame.display.update()
time.sleep(2)#加入睡眠时间2秒
pygame.quit() # 结束
这个时候我们可以看到一个红色的圆了
我们更改参数来看看还能画出什么圆来
5,让画画动起来
这次我们利用循环for来更改圆的半径,并循环10次,每次睡眠1秒
具体代码如下:
import pygame
import time
pygame.init() # 初始化
screen = pygame.display.set_mode((800,600)) # 设置窗口的大小
pygame.display.set_caption("这是一个给我们画画用的窗口")
r = 20 #一开始的半径
for i in range(10):
pygame.draw.circle(screen, (255, 0, 0), (200, 300), r) # 画一个圆形
pygame.display.update() # 更新圆
r += 10 #半径加10
time.sleep(1) # 睡眠1秒
pygame.quit() # 结束
想想我们还可以更改什么值来做出什么动画呢?
6,让窗口不要关闭
我们发现不断加长循环次数,或把睡眠时间加长点,窗口就不会那么快关闭,但最终还是会自己关闭,那么我们是否可以让他一直不要关闭呢?
答案是可以的,我们可以利用while循环来让他一直打开着
代码如下:
import pygame
pygame.init() # 初始化
screen = pygame.display.set_mode((800,600)) # 设置窗口的大小
pygame.display.set_caption("这是一个给我们画画用的窗口")
r = 20
while True:
pygame.draw.circle(screen,(255,0,0),(200,300),r)
r += 1
pygame.display.update()
pygame.quit() # 结束
发现这次我们不需要time模块的睡眠了,也可以让窗口一直打开着,这是因为我么用了死循环while True
7,事件
第6点的时候我们发现窗口可以一直打开了,但还有一个问题,就是希望我们点击右上角关闭窗口的时候,窗口就关闭
具体代码如下:
import pygame
pygame.init() # 初始化
screen = pygame.display.set_mode((800,600)) # 设置窗口的大小
pygame.display.set_caption("这是一个给我们画画用的窗口")
r = 20
going = True
while going:
for event in pygame.event.get(): # 遍历事件
if event.type == pygame.QUIT: # 退出事件
going=False
pygame.draw.circle(screen,(255,0,0),(200,300),r)
r += 1
pygame.display.update()
pygame.quit()
8,刷新频率
我们可以通过时间来延迟动画刷新频率,这次又需要用到time模块,代码如下:
import pygame
import time
pygame.init() # 初始化
screen = pygame.display.set_mode((800,600)) # 设置窗口的大小
pygame.display.set_caption("这是一个给我们画画用的窗口")
r = 20
going = True
while going:
for event in pygame.event.get(): # 遍历事件
if event.type == pygame.QUIT: # 退出事件
going=False
pygame.draw.circle(screen,(255,0,0),(200,300),r)
r += 1
pygame.display.update()
time.sleep(0.1)
pygame.quit()
也可以使用pygame给我们提供的clock对象来控制刷新频率,这次不需要time模块了,代码如下:
import pygame
pygame.init() # 初始化
screen = pygame.display.set_mode((800,600)) # 设置窗口的大小
pygame.display.set_caption("这是一个给我们画画用的窗口")
clock = pygame.time.Clock() # 创建一个clock对象
r = 20
going = True
while going:
for event in pygame.event.get(): # 遍历事件
if event.type == pygame.QUIT: # 退出事件
going=False
pygame.draw.circle(screen,(255,0,0),(200,300),r)
r += 1
pygame.display.update()
clock.tick(10) # 刷新频率为10,也就是1s刷新10次,每个100ms刷新一次
pygame.quit()
9,除了画圆我们还能画什么呢?
看看其他函数吧
pygame.draw.rect() — 绘制矩形
pygame.draw.polygon() — 绘制多边形
pygame.draw.circle() — 根据圆心和半径绘制圆形
pygame.draw.ellipse() — 根据限定矩形绘制一个椭圆形
pygame.draw.arc() — 绘制弧线
pygame.draw.line() — 绘制线段
pygame.draw.lines() — 绘制多条连续的线段
pygame.draw.aaline() — 绘制抗锯齿的线段
pygame.draw.aalines() — 绘制多条连续的线段(抗锯齿)
具体可以参考:
Pygame详解(三):draw 模块_pygame.draw.rect_来自江南的你的博客-CSDN博客
现在你可以画很多图形并,让他们动起来了吧
其它参考: