本文的视频版本:西瓜视频B 站

猫姐提醒点击文章中的图片可以放大,看的更清楚哦!

# 0. 前言

hello,小伙伴们,我是带你们写游戏的猫姐!最近猫姐忙着做 python 编程入门的课程,已经在抖音上更新了 24 集从 0 开始学习 python 编程的小伙伴,可以在抖音上去看看,绝对不会让你们失望!
好了,我们今天接着做游戏,今天猫姐给大家带来一款在抖音上很经典的小游戏,游戏中一个小朋友需要把从天而降蘑菇接住,但是只能接住没有毒的蘑菇。如果接住了有毒的蘑菇,游戏就失败了!这款游戏虽然很简单,整个游戏的代码也只有 200 多行,但是却包含了 python游戏编程70% 的核心知识点,所以只要你读懂了这款游戏的所有代码!你就可以开始开发自己的 python 小游戏了,比如,像打飞机打地鼠,这样的小游戏,你肯定也是能够写的出来的!
虽然这个游戏很简单,但是为了让小伙伴真的能学会 python游戏编程 ,猫姐这里也要分成几个视频一步一步地教大家把这个游戏写出来。
今天这一集,我们先来学习一下 python 游戏编程的基本套路,学习完这个套路后,下一集,猫姐将在第一集代码的基础上,实现一个用方向键控制的小方块,效果是这样的。当然,这个方块最后会变成一个采蘑菇的小朋友!不多说,我们进入正题吧!
文章中的所有代码在这里

# 1. python 游戏开发的基本套路

这一集,猫姐将带大家简单认识一下 pygamepygamepython 游戏开发的一个框架,使用这个框架我们可以用 python 语言快速开发出各种游戏。所以在写游戏代码前,还是需要了解一下 pygame 的基本工作原理。

# 2. 认识 pygame 的基本框架

首先,我们新建一个 part1-game.py 的文件,然后打开这个文件开始写代码!我们将 pygame , locals , sys 这些模块导入进来,方便后面使用。

import pygame
from pygame.locals import *
import sys

接下来再通过 pygameinit 函数完成游戏的初始化工作,因为我们使用的游戏框架是 pygame ,在使用前,都需要对其进行一些初始化,大家不用过多的去了解细节,只要知道这是必须的就可以了,就像我们吃饭前要洗手,拿筷子一样。

pygame.init()

初始化工作完成后,由于我们的游戏是运行在一个窗口里面,所以这里还要创建一个窗口。我们先来定义窗口的宽度和高度,创建窗口可以通过 pygame.display.set_mode 这个函数来实现,在 set_mode 函数的括号里面,需要传入的是游戏窗口的宽度和高度。这个函数将得到一个返回值,我们用 screen 这个变量保存这个返回值。

重点:大家要注意这个 screen 非常重要,后面所有的游戏元素都是绘制(画)在这个 screen(窗口)上

WIDTH = 600
HEIGHT = 800
screen = pygame.display.set_mode((WIDTH, HEIGHT))

现在把程序运行一下,看看效果,单击鼠标右键,选择 Run + part1-game,程序运行起来后,可以看到窗口一闪而过,就消失了。
窗口消失

为什么窗口会消失呢?这是因为代码从上到下成功运行后就成功退出了,而真实的游戏需要不停地刷新窗口,并将内容显在屏幕上,所以我们还需要使用 while True 这个无限循环,这样代码就不会退出了。在 while True 循环里面,使用 pygame.display.update 函数来更新屏幕上显示的内容。这里我们可以看到一个比较完整代码了。

import pygame
from pygame.locals import *
import sys
pygame.init()
WIDTH = 600
HEIGHT = 800
screen = pygame.display.set_mode((WIDTH, HEIGHT))
while True:
    # 更新屏幕内容
    pygame.display.update()

现在再把程序运行一下,看看效果,单击鼠标右键,选择 Run + part1-game,程序运行起来后,就可以看到窗口不会消失了(一直显示了)。
窗口显示

接下来,我们点击窗口右上角的关闭按钮,可以看到,程序现在是一个未响应的状态。这是因为,我们的程序不知道怎么处理鼠标点击(关闭菜单)的事件,所以在 while 循环里面,还需要处理鼠标点击关闭菜单的事件。
窗口未响应

在 pygame 里面,处理鼠标或是键盘的事件是很简单的,我们需要使用 for 循环,遍历 pygame.event.get 函数,通过 pygame.event.get 函数可以得到鼠标或是键盘的事件列表。再通过 event.type 来判断,事件是否等于 QUIT (点窗口 x 就会产生 QUIT 事件)。如果 event.type 恒等于 QUIT ,则系统退出。

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
    pygame.display.update()

把程序运行起来看下效果,单击鼠标右键,选择 Run + part1-game,程序运行起来后,鼠标点击关闭窗口右上角按钮,则窗口退出。
窗口退出