pygame zero是专门制作游戏的工具包,给我们提供很多新的功能,Pygame Zero可以轻松无障碍创建游戏,简称为pygame。
pygame基础
运行程序以后,会弹出一个新的界面,我们把这个弹出的界面叫做窗口,窗口中显示的就是程序的运行效果。
import pgzrun //导入pygame库
WIDTH = 500 //变量WIDTH控制窗口宽度
HEIGHT = 350 //变量HEIGHT控制窗口高度
def draw():
screen.clear()
screen.blit('pygame', pos=[0,0])
pgzrun.go() //启动pygame程序
绘制角色
├── images/
│ └── kevin.png
└── index.py
绘制一个角色分为两个步骤:创建角色,绘制已创建好的角色。
Actor()命令:作用是创建一个角色。
角色名 = Actor(‘角色的造型’)
注意:在填写造型名字的时候,只需要填写’ . ‘ 前面的部分。
例如:图片名为kevin.png
,在填写造型名字时,填写kevin
.
绘制已创建好的角色,要找到draw()函数,它是pygame约定好的函数,程序运行以后,会被自动执行。所有绘制角色的代码,都需要写在这个函数中。
xiaowangzi = Actor('小王子') //创建一个角色xiaowangzi,造型为小王子
def draw():
screen.clear()
screen.blit('小王子实验室', pos=[0,0])
xiaowangzi.draw() //绘制出角色xiaowangzi
python坐标系
在pygame中,程序默认将角色绘制在窗口的左上角。我们可以通过设置角色的坐标,来改变它在窗口中的位置。
窗口左上角顶点的x坐标和y坐标都是0。
向右方向,x坐标逐渐增大。向下方向,y坐标逐渐增大。
xiaowangzi = Actor('小王子')
xiaowangzi.x = 200
xiaowangzi.y = 375
可以使用 "角色名.x"
和 "角色名.y"
来设置角色的坐标。
on_key_down函数
在用户按下键盘上的按键时,参数key中保存的是用户按下的按键。
def on_key_down(key):
下级代码
在pygame中,当我们按下键盘时,程序会自动执行on_key_down()函数。
xiaowangzi = Actor('小王子')
xiaowangzi.x = 200
xiaowangzi.y = 375
def on_key_down():
xiaowangzi.x = 400
xiaowangzi.y = 520
小王子初始位置 [200, 375]
, 当按下键盘时小王子会来到坐标为 [400,520]
的位置。
根据按键控制角色移动
import pgzrun
WIDTH = 700
HEIGHT = 500
xiaowangzi = Actor('小王子')
xiaowangzi.x = 600
xiaowangzi.y = 400
def draw():
screen.blit('公园', pos=[0,0])
xiaowangzi.draw()
def on_key_down(key):
if key = keys.LEFT:
xiaowangzi.x -= 50 //参数key等于键盘左键时,小王子向左移动,x坐标减少50
if key = keys.RIGHT:
xiaowangzi.x += 50 //参数key等于键盘右键时,小王子向右移动,x坐标增加50
if key = keys.UP:
xiaowangzi.y -= 50 //参数key等于键盘上键时,小王子向上移动,y坐标减少50
if key = keys.DOWN:
xiaowangzi.y += 50 //参数key等于键盘下键时,小王子向下移动,y坐标增加50
pgzrun.go()
鼠标事件
on_mouse_down函数
当按下鼠标上的按键时,执行on_mouse_down()函数的下级代码。
def on_mouse_down():
aim.image = '射击'
和on_key_down()函数一样,on_mouse_down()函数也是 pygame约定好的函数。 只要编写on_mouse_down()函数,pygame程序就会在点击鼠标的时候,自动执行这个函数。
xiaowangzi = Actor('小王子')
def on_mouse_down():
xiaowangzi.image = ('王子')
初始角色造型为小王子
,当点击鼠标,角色造型切换为王子
。
on_mouse_up函数
当松开鼠标上的按键时,执行on_mouse_up()函数的下级代码。
def on_mouse_up():
aim.image = '瞄准'
on_mouse_move函数
on_mouse_move()的括号中可以填写参数pos。
def on_mouse_move(pos):
角色名.pos = pos
例如通过打印参数pos可以获得移动鼠标的坐标。
def on_mouse_move(pos):
print(pos)
碰撞检测函数colliderect()
在pygame中,有一个专门判断两个角色是否碰到的函数colliderect().
角色a.colliderect(角色b)
import pgzrun
xiaowangzi = Actor('小王子')
button = Actor('按钮')
def draw():
screen.blit('公园', [0,0])
xiaowangzi.draw()
button.draw()
def on_key_down():
if xiaowangzi.colliderect(button):
button.image = '按钮按下'
pgzrun.go()
如果角色xiaowangzi碰到了角色button时就将button的造型切换成“按钮按下”。
随机数
random库是使用随机数的Python标准库,在使用randint()命令时一定要调用random库。
random.randint(参数1, 参数2)用于生成一个指定范围内的整数,其中参数1是最小值,参数2是最大值。
生成的随机数n, 参数1 ≤ n ≤ 参数2
。
import random
random.randint(0, 600)
例如
import random
WIDTH = 600
HEIGHT = 600
aim = Actor('瞄准状态')
enemy =Actor('正常状态')
enemy.x random.randint(0,600)
enemy.y random.randint(0,600)
update()函数
update()函数是pygame和我们约定好的,它会在程序启动之后自动执行。
程序运行后会自动执行update()函数,一直重复执行,每秒会被执行60次。
完成飞船往返飞行的效果
import pgzrun
WIDTH = 600
HEIGHT = 600
airboat = Actor('飞船')
airboat.x = 0
airboat.y = 200
def draw():
screen.blit('太空', [0,0])
airboat.draw()
def update():
airboat.x ++ 3
if airboat.x > 600:
airboat.x = 0
pgzrun.go()
update()函数判断用户按下的按键
keyboard.键盘名称
当按下键盘上相应的键不松开时,keyboard.键盘名称
的值就是True,不按时就是False.
import pgzrun
def update():
print(keyboard.space)
pgzrun.go()
在update()函数中把keyboard.space打印出来。
点击运行按钮,输出区会一直打印False, 当我们按下空格键,打印的内容就会变成True,松开空格键,就会再次打印False。
import pgzrun
WIDTH = 600
HEIGHT = 600
ship = Actor('战舰')
def draw():
screen.blit('太空', [0,0])
ship.draw()
def update():
ship.y += 5
if keyboard.space:
ship.y -= 10
if keyboard.left:
ship.x -= 5
if keyboard.right:
ship.x += 5
pgzrun.go()
pgzrun.go()
角色的初始化
在pygame中,创建一个新角色,需要做三件事:
1、设置角色的初始造型
2、设置角色的初始位置
3、将角色绘制出来
这个过程,也叫作角色的初始化。
import pgzrun
WIDTH = 600
HEIGHT = 600
ship = Actor('战舰') //初始造型
ship.x = 300 //初始位置
ship.y = 100
def draw():
screen.blit('太空', [0,0])
ship.draw() //绘制角色
pgzrun.go()