首页 > 游戏 > Python学者福音!你女儿看了都会的自学Python游戏入门指南

Python学者福音!你女儿看了都会的自学Python游戏入门指南

1、什么是Pygame

Pygame是一个游戏开发库(包、框架),是一个 Python外接模块,专为电子游戏设计。这个工具箱包含了:

  • 图形与动画
  • 声音与音效
  • 游戏控制(键盘、鼠标、游戏柄等)


2、游戏循环

每个游戏的核心思想是一个循环(Loop),我们称它为“游戏循环”。这个循环在游戏中一直处于运行状态(),处理所有游戏中的事务。每次循环中的语句跑一遍叫做帧(Frame)

每刷新一帧,会处理很多事情,基本上可以概括成3个部分:

2-1 处理输入(事件)

需要游戏处理的事情,你在编写代码时要关注这些外部的事件:如键盘上键的按下,鼠标的点击等;

2-2 更新游戏

每帧上物体的变化,如角色有空中,重力会使得他下落,如果两个物体碰撞,会发生爆炸;

2-3 渲染(绘制)

这个阶段是把对象绘制在屏幕上,如背景、角色、菜单(任何玩家可以看到的东西)都会在正确的位置上显示出来。

3、定时器

游戏循环还有一个很重要的事情是整个循环运行的快慢。你应该听说过FPS(代表了帧频,每分钟帧切换的数量),也就是说每个循环需要花费的时间。这个对游戏来说很重要,它决定了游戏速度的快慢。

4、建一个游戏模板

现在我们讲解一下游戏制作的细节,通过代码的讲解,深入理解游戏编程的底层逻辑。

Pygame模板,对于所有的Python游戏编制都能够有用。程序开头,我们先导入两个库(pygame游戏库和random随机数),设置一些游戏中的变量参数选项

# Pygame template - skeleton for a new pygame project
import pygame
import random
WIDTH = 360 # width of our game window
HEIGHT = 480 # height of our game window
FPS = 30 # frames per second


WIDTH是窗口的宽度

HEIGHT是窗口的高度

FPS 是刷新的帧数量

初始化Pygame及新建窗口,mixer是声音的初始化

# initialize pygame and create window
pygame.init()
pygame.mixer.init() # for sound
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()


pygame.init()命令启动并初始化pygame,screen是游戏的窗口,通过两个常量来控制窗口大小,后面设置了clock变量来控制PFS这个参数。

下面我们来编写游戏循环

游戏循环,分成三个部分:

(1)处理输入事件

(2)更新事件

(3)窗口上绘制图形

# Game Loop
running = True
while running:
# Process input (events)
# Update
# Render (draw)


while循环受变量running控制,如果要结果游戏循环,只要将running设置成False即可,游戏终止。后面我们会陆续添加代码。

5、渲染与绘制部分

在绘制部分,不绘制角色,只是简单填充背景颜色。

下面我们得说说计算机中的颜色表示及处理。

电脑的屏幕是由像素(Pixels)组成的,这些像素由三个部分混合而成:红色、绿色和蓝色。三个分量的多少决定的这个像素的最终颜色,如下图



三个分量我们也称为三元色,其取值范围是0(相当于关)-255(相当于全开100%),所以每个元色有256种情况,下图中给出了常用的颜色的三元色的例子。



通过乘法我们可以计算出总共不同的颜色的数量

>>> 256 * 256 * 256 = 16,777,216


我们理解了颜色,就可以在程序开头定义常用颜色了

# Colors (R, G, B)
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)


添加背景颜色的绘制代码

 # Draw / render
screen.fill(BLACK)


事情远远还不止这些,这里还涉及到计算机的显示内容原理。改变屏幕上的像素就是告诉显示卡修改实际像素。对于计算机来说,这是一个非常耗时的工作。我们可以使用一种双缓冲区的办法来解决。相象一下,我们有一块双面的白板,一面显示结束可以快速翻转显示反面的内容。正面显示给玩家,反面只有计算机才看到。我们把绘制工作放在反面:角色,子弹,灯光等,后面的完成工作,马上反转白板,显示新的帧给用户。所以我们用到flip这个命令,如下:

 # Draw / render
screen.fill(BLACK)
# *after* drawing everything, flip the display
pygame.display.flip()


注意:我们得把flip()这个命令放在最后。如果你把显示的内容放在其后,屏幕上不会显示它。

6、输入/事件

游戏设计到止,还远没有这么简单。我们还得侦听键盘与鼠标,及其它控件的输入事件。故我们还有很多事情要做,如果你现在运行程序,你会发现边窗口的关闭功能还未能实现。我们得告诉程序,有一个关闭事件要处理,就是终止程序的运行。

事件是时时刻刻会发生的,如果玩家点击“弹跳”按钮,游戏循环中的更新与绘制应该怎么做呢?你总不希望忽略这些输入事件吧,玩家会非常不爽的。Pygame得通过一个列表,再通过一个For 循环逐一的处理这些事件。

具体代码如下:

 for event in pygame.event.get():
# check for closing window
if event.type == pygame.QUIT:
running = False

Pygame有很多的事件要处理。其中pygame.QUIT是玩家点击关闭按钮时触发,程序中使用running=False来停止游戏循环。

7、控制FPS

在更新模块里,代码如下:

while running:
# keep loop running at the right speed
clock.tick(FPS)

tick命令告诉pygame游戏循环的时长及暂停时长。如果fps设为30,那么1帧持续时间为1/30或者说0.03秒。如果循环耗时0.01秒,则pygame会有0.02等待时间。

8、总结一下

下面是整个程序的源代码:

# Pygame template - skeleton for a new pygame project
import pygame
import random
WIDTH = 360
HEIGHT = 480
FPS = 30
# define colors
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
# initialize pygame and create window
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()
# Game loop
running = True
while running:
# keep loop running at the right speed
clock.tick(FPS)
# Process input (events)
for event in pygame.event.get():
# check for closing window
if event.type == pygame.QUIT:
running = False
# Update
# Draw / render
screen.fill(BLACK)
# *after* drawing everything, flip the display
pygame.display.flip()
pygame.quit()


我们的Python游戏开发的模板如上,你可以保存一下文件,命名成“pygame_template.py”,后面我们可以反复重用。

最后我自己是一名python开发工程师,这里有整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注并在后台私信:“01”即可领取

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/yx/66549.html