目录
什么是pgzero?
pgzero的安装
4,正式开始!
1,调整背景色
2,导入角色
3,鼠标事件
5,按键事件
6,刷新功能
1,角色属性
2,功能介绍
7,全局变量and局部变量
1,全局变量与局部变量的区别
2,全局变量如何在功能内使用
8,角色功能及窗口功能
1,角色功能
2,窗口功能
9,结尾
python在各个领域都有着丰富的第三方库,pygame是python在游戏领域的应用库,可以用来开发各种不同的游戏。但是对于初学者来说,还是存在一定的门槛。
而今天要和大家分享的pgzero(pygame zero)是在pygame基础上做了进一步的封装,使得设计一款游戏十分的方便,特别适合少儿编程领域的教学, 与scratch相得益彰。
pip install pygame
pip install pgzero
这个也就是我们所说的:终端下载pgzero库
安装完后,新建一个文本文档。打开,输入下列代码:
import pgzrun
pgzrun go()
将下面名字改为.py,编码改为UTF-8
再点击保存
实例代码:
import pgzrun
def draw():
screen.fill((225,225,225))
pgzrun.go()
实例代码:
import pgzrun
zy = Actor('zy.png')
def draw():
zy.draw()
pgzrun.go()
#也可以用draw()功能画出背景图
注意:必须要在文件同一个目录下新建一个images文件夹,角色图片(必须都是png格式)都放里面!
1,基础代码:
import pgzrun
def on_mouse_down():
#代码
pgzrun.go()
2,获取鼠标位置:
import pgzrun
def on_mouse_down(pos):
print(pos)
pgzrun.go()
3,鼠标按下左键 or 右键:
import pgzrun
def on_mouse_down(button):
print(button)
pgzrun.go()
而输出的结果是:
mouse.LEFT#左键
#或者是:
mouse.RIGHT#右键
1,功能
按键按下功能是on_key_down(),按键松开功能是on_key_up()(也可以写在update()(刷新游戏界面功能)里面)
2,数字按键
数字按键在pgzero的表达方式是:keyboard.K_1~8
3,字母按键
字母按键的表示方法是:keyboard.K_A~Z
4,功能按键
功能按键的表示方法是:keyboard.K_(功能键(大写))
5,按下按键,发生事件
示例代码:
import pgzrun
def on_key_down():
if keyboard.K_1:
#代码
pgzrun.go()
说刷新功能之前,先给你们讲一下角色的属性。
角色的属性有这几类:方位类,图片类等
方位类的属性有:x(x坐标),y(y坐标),bottom(底部线),top(顶部线),left(左边线),right(右边线)
图片类的属性有:image(图片)
刷新功能就是update()功能。他就像while循环一样,被用于竞速类游戏的障碍移动等方面。程序调用一次update()功能就会再调用一次draw()功能哦!
代码示范:
import pgzrun
zy = Actor('zy.png')
def draw():
zy.draw()
def update():
#让角色zy上升
zy.x += 3
pgzrun.go()
实例代码:
p1 = '手机'
def home():
p2 = '座机'
home()
假如说一个程序里有一个def功能,那么全局变量就是在def功能外的一个变量。也就是示例代码里的p1变量。局部变量是在功能内的变量,只能在功能内使用。也就是示例代码里的p2变量。
如果将示例代码更改一下:
p = '手机'
def home():
p = ‘座机’
home()
print(p)
#那么输出结果是:
#手机
#如何不在home功能内使用print语句也能输出 座机 呢?
现在都看到要求了吧。如果功能内要使用功能外的变量,那么就要在def语句下面的一行输入:
global (全局变量)
这样,全局变量p的值就被更改为 座机 了,输出的东西也是 座机 。
注意:这个知识点一定要记住,因为这个知识将会很常见。
角色功能是对于角色创建的功能,比如角色碰到另一个角色以及角色碰到了游戏窗口里的一个点。
1,colliderect()功能
colliderect()功能是判断角色是否与另一个角色相撞。
示例代码:
import pgzrun
player1 = Actor('1.png',[400,300])
player2 = Actor('2.png',[400,250])
def draw():
player1.draw()
player2.draw()
if player1.colliderect(player2):#角色1.colliderect(角色2)(也可以这样:角色1.colliderect(角色2))
exit()#退出游戏
2,collidepoint()功能
collidepoint()功能是判断角色是否一个点碰撞。
示例代码:
import pgzrun
player1 = Actor('1.png)
分享一个用pygame做的代码吧
#友情提示:请不要更改任何代码,谢谢!
import pgzrun
WIDTH = 1136
HEIGHT = 640
TITLE = 'P1 VS P2'
global bossX
bossX = 10
global zyX
zyX = 10
bg = Actor('bg.png')
zy = Actor('zy.png', [200, 420])
boss = Actor('boss.png', [900, 420])
def draw():
bg.draw()
zy.draw()
boss.draw()
# 写角色名字
screen.draw.text('P1:' + str(zyX), [180, 30],fontsize=30,color='red')
screen.draw.text('P2:' + str(bossX), [850, 30],fontsize=30,color='blue')
#判断胜负
if bossX == 0:
print('P1玩家获胜')
exit()
elif zyX == 0:
print('P2玩家获胜')
exit()
def update():
# 判断壮猿移动
if keyboard.K_A:
zy.x = 200
if keyboard.K_D:
zy.right = 558
# 判断boss移动
if keyboard.K_LEFT:
boss.left = 548
if keyboard.K_RIGHT:
boss.x = 900
# 判断壮猿攻击、防御状态时,切换图片
if keyboard.K_W:
zy.image = 'zy1.png'
elif keyboard.K_S:
zy.image = 'zy2.png'
else:
zy.image = 'zy.png'
# 判断boss攻击、防御状态时,切换图片
if keyboard.K_UP:
boss.image = 'boss1.png'
elif keyboard.K_DOWN:
boss.image = 'boss2.png'
else:
boss.image = 'boss.png'
# 判断壮猿是否和boss发生碰撞
if zy.colliderect(boss):
if zy.image == 'zy1.png' and boss.image == 'boss.png':
boss.x += 250
global bossX
bossX -= 1
if boss.image == 'boss1.png' and zy.image == 'zy.png':
zy.x -= 250
global zyX
zyX -= 1
if zy.image == 'zy1.png' and boss.image == 'boss1.png':
zy.x -= 250
boss.x += 250
pgzrun.go()
#行数自己数!