初识Pygame

pygame zero是专门制作游戏的工具包,给我们提供很多新的功能,Pygame Zero可以轻松无障碍创建游戏,简称为pygame。

pygame基础

运行程序以后,会弹出一个新的界面,我们把这个弹出的界面叫做窗口,窗口中显示的就是程序的运行效果。

python
<br />
import pgzrun //导入pygame库<br />
WIDTH = 500 //变量WIDTH控制窗口宽度<br />
HEIGHT = 350 //变量HEIGHT控制窗口高度<br />
def draw():<br />
screen.clear()<br />
screen.blit('pygame', pos=[0,0])<br />
pgzrun.go() //启动pygame程序<br />

绘制角色

├── images/
│   └── kevin.png
└── index.py

绘制一个角色分为两个步骤:创建角色,绘制已创建好的角色。
Actor()命令:作用是创建一个角色。

角色名 = Actor(‘角色的造型’)

注意:在填写造型名字的时候,只需要填写’ . ‘ 前面的部分。
例如:图片名为kevin.png,在填写造型名字时,填写kevin.

绘制已创建好的角色,要找到draw()函数,它是pygame约定好的函数,程序运行以后,会被自动执行。所有绘制角色的代码,都需要写在这个函数中。

php
<br />
xiaowangzi = Actor('小王子') //创建一个角色xiaowangzi,造型为小王子<br />
def draw():<br />
screen.clear()<br />
screen.blit('小王子实验室', pos=[0,0])<br />
xiaowangzi.draw() //绘制出角色xiaowangzi<br />

python坐标系

在pygame中,程序默认将角色绘制在窗口的左上角。我们可以通过设置角色的坐标,来改变它在窗口中的位置。
窗口左上角顶点的x坐标和y坐标都是0。
向右方向,x坐标逐渐增大。向下方向,y坐标逐渐增大。

php
<br />
xiaowangzi = Actor('小王子')<br />
xiaowangzi.x = 200<br />
xiaowangzi.y = 375<br />

可以使用 "角色名.x" "角色名.y" 来设置角色的坐标。

on_key_down函数

在用户按下键盘上的按键时,参数key中保存的是用户按下的按键。

php
<br />
def on_key_down(key):<br />
下级代码<br />

pygame键盘

在pygame中,当我们按下键盘时,程序会自动执行on_key_down()函数。

php
<br />
xiaowangzi = Actor('小王子')<br />
xiaowangzi.x = 200<br />
xiaowangzi.y = 375<br />
def on_key_down():<br />
xiaowangzi.x = 400<br />
xiaowangzi.y = 520<br />

小王子初始位置 [200, 375] , 当按下键盘时小王子会来到坐标为 [400,520] 的位置。

根据按键控制角色移动

php
<br />
import pgzrun<br />
WIDTH = 700<br />
HEIGHT = 500<br />
xiaowangzi = Actor('小王子')<br />
xiaowangzi.x = 600<br />
xiaowangzi.y = 400<br />
def draw():<br />
screen.blit('公园', pos=[0,0])<br />
xiaowangzi.draw()<br />
def on_key_down(key):<br />
if key = keys.LEFT:<br />
xiaowangzi.x -= 50 //参数key等于键盘左键时,小王子向左移动,x坐标减少50<br />
if key = keys.RIGHT:<br />
xiaowangzi.x += 50 //参数key等于键盘右键时,小王子向右移动,x坐标增加50<br />
if key = keys.UP:<br />
xiaowangzi.y -= 50 //参数key等于键盘上键时,小王子向上移动,y坐标减少50<br />
if key = keys.DOWN:<br />
xiaowangzi.y += 50 //参数key等于键盘下键时,小王子向下移动,y坐标增加50<br />
pgzrun.go()<br />

鼠标事件

on_mouse_down函数

当按下鼠标上的按键时,执行on_mouse_down()函数的下级代码。

php
<br />
def on_mouse_down():<br />
aim.image = '射击'<br />

和on_key_down()函数一样,on_mouse_down()函数也是 pygame约定好的函数。 只要编写on_mouse_down()函数,pygame程序就会在点击鼠标的时候,自动执行这个函数。

php
<br />
xiaowangzi = Actor('小王子')<br />
def on_mouse_down():<br />
xiaowangzi.image = ('王子')<br />

初始角色造型为小王子,当点击鼠标,角色造型切换为王子

on_mouse_up函数

当松开鼠标上的按键时,执行on_mouse_up()函数的下级代码。

php
<br />
def on_mouse_up():<br />
aim.image = '瞄准'<br />

on_mouse_move函数

on_mouse_move()的括号中可以填写参数pos。

php
<br />
def on_mouse_move(pos):<br />
角色名.pos = pos<br />

例如通过打印参数pos可以获得移动鼠标的坐标。

php
<br />
def on_mouse_move(pos):<br />
print(pos)<br />

碰撞检测函数colliderect()

在pygame中,有一个专门判断两个角色是否碰到的函数colliderect().

角色a.colliderect(角色b)

php
<br />
import pgzrun<br />
xiaowangzi = Actor('小王子')<br />
button = Actor('按钮')<br />
def draw():<br />
screen.blit('公园', [0,0])<br />
xiaowangzi.draw()<br />
button.draw()<br />
def on_key_down():<br />
if xiaowangzi.colliderect(button):<br />
button.image = '按钮按下'<br />
pgzrun.go()<br />

如果角色xiaowangzi碰到了角色button时就将button的造型切换成“按钮按下”。

随机数

random库是使用随机数的Python标准库,在使用randint()命令时一定要调用random库。
random.randint(参数1, 参数2)用于生成一个指定范围内的整数,其中参数1是最小值,参数2是最大值。
生成的随机数n, 参数1 ≤ n ≤ 参数2

php
<br />
import random<br />
random.randint(0, 600)<br />

例如

php
<br />
import random</p>
<p>WIDTH = 600<br />
HEIGHT = 600</p>
<p>aim = Actor('瞄准状态')</p>
<p>enemy =Actor('正常状态')<br />
enemy.x random.randint(0,600)<br />
enemy.y random.randint(0,600)<br />

update()函数

update()函数是pygame和我们约定好的,它会在程序启动之后自动执行。
程序运行后会自动执行update()函数,一直重复执行,每秒会被执行60次。

完成飞船往返飞行的效果

php
<br />
import pgzrun</p>
<p>WIDTH = 600<br />
HEIGHT = 600</p>
<p>airboat = Actor('飞船')<br />
airboat.x = 0<br />
airboat.y = 200</p>
<p>def draw():<br />
screen.blit('太空', [0,0])<br />
airboat.draw()</p>
<p>def update():<br />
airboat.x ++ 3<br />
if airboat.x > 600:<br />
airboat.x = 0<br />
pgzrun.go()<br />

update()函数判断用户按下的按键

keyboard.键盘名称

update()函数判断用户按下的按键

当按下键盘上相应的键不松开时,keyboard.键盘名称的值就是True,不按时就是False.

php
<br />
import pgzrun</p>
<p>def update():<br />
print(keyboard.space)</p>
<p>pgzrun.go()<br />

在update()函数中把keyboard.space打印出来。
点击运行按钮,输出区会一直打印False, 当我们按下空格键,打印的内容就会变成True,松开空格键,就会再次打印False。

php
<br />
import pgzrun</p>
<p>WIDTH = 600<br />
HEIGHT = 600</p>
<p>ship = Actor('战舰')</p>
<p>def draw():<br />
screen.blit('太空', [0,0])<br />
ship.draw()</p>
<p>def update():<br />
ship.y += 5<br />
if keyboard.space:<br />
ship.y -= 10<br />
if keyboard.left:<br />
ship.x -= 5<br />
if keyboard.right:<br />
ship.x += 5</p>
<p>pgzrun.go()<br />
pgzrun.go()<br />

角色的初始化

在pygame中,创建一个新角色,需要做三件事:
1、设置角色的初始造型
2、设置角色的初始位置
3、将角色绘制出来
这个过程,也叫作角色的初始化。

php
<br />
import pgzrun</p>
<p>WIDTH = 600<br />
HEIGHT = 600</p>
<p>ship = Actor('战舰') //初始造型<br />
ship.x = 300 //初始位置<br />
ship.y = 100</p>
<p>def draw():<br />
screen.blit('太空', [0,0])<br />
ship.draw() //绘制角色<br />
pgzrun.go()<br />

那年 • 今日
小王于2021-11-10 18:40发布在编程
没有伞的孩子,必须学会努力奔跑。

赞助 点赞 0

拾风等人对本文发表了2条热情洋溢的评论。
  • 现在的开发工具真的很方便,适合个人开发者去开发一些休闲小游戏。

    1. 老王博主

      嗯,现在确实好方便!

  • 头像预览

    发表评论

    您的邮箱地址不会被公开, 必填项已用 * 标注

    找回密码

    请输入您的邮箱地址,我们将向您发送重置密码的链接。

    您好,朋友!

    请输入相关信息,以便我们提供更优质的服务!

    欢迎回来!