初识Pygame

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

pygame基础

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

python

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约定好的函数,程序运行以后,会被自动执行。所有绘制角色的代码,都需要写在这个函数中。

php

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

python坐标系

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

php

xiaowangzi = Actor('小王子')
xiaowangzi.x = 200
xiaowangzi.y = 375

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

on_key_down函数

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

php

def on_key_down(key):
下级代码

pygame键盘

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

php

xiaowangzi = Actor('小王子')
xiaowangzi.x = 200
xiaowangzi.y = 375
def on_key_down():
xiaowangzi.x = 400
xiaowangzi.y = 520

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

根据按键控制角色移动

php

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()函数的下级代码。

php

def on_mouse_down():
aim.image = '射击'

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

php

xiaowangzi = Actor('小王子')
def on_mouse_down():
xiaowangzi.image = ('王子')

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

on_mouse_up函数

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

php

def on_mouse_up():
aim.image = '瞄准'

on_mouse_move函数

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

php

def on_mouse_move(pos):
角色名.pos = pos

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

php

def on_mouse_move(pos):
print(pos)

碰撞检测函数colliderect()

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

角色a.colliderect(角色b)

php

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

php

import random
random.randint(0, 600)

例如

php

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次。

完成飞船往返飞行的效果

php

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.键盘名称

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

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

php

import pgzrun

def update():
print(keyboard.space)

pgzrun.go()

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

php

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、将角色绘制出来
这个过程,也叫作角色的初始化。

php

import pgzrun

WIDTH = 600
HEIGHT = 600

ship = Actor('战舰') //初始造型
ship.x = 300 //初始位置
ship.y = 100

def draw():
screen.blit('太空', [0,0])
ship.draw() //绘制角色
pgzrun.go()
那年 • 今日
写于2021年11月10日
没有伞的孩子,必须学会努力奔跑。

赞助 点赞 10

拾风等人对本文发表了2条热情洋溢的评论。
  • 拾风说道:
    现在的开发工具真的很方便,适合个人开发者去开发一些休闲小游戏。
    1. 老王说道:
      回复 拾风: 嗯,现在确实好方便!
  • 发表回复

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