跳转到内容

PyGame 指南/二维游戏开发概念

来自维基教科书,开放的书籍,开放的世界

鸟瞰图:游戏程序的工作原理

[编辑 | 编辑源代码]

如果你之前上过编程课,你可能已经了解程序从上→下逐行运行,直到它到达源代码文件的末尾。在它逐行执行代码的过程中,它会在等待用户输入时暂停,然后在接收到输入后继续运行。到达文件末尾后,程序会自动退出,除非你在其中添加了某种循环来保持它运行。

如果我们不希望程序自动退出,我们通常会在程序中某个位置放置一个程序循环,在这个循环中,每循环一次都会执行相同类型的任务……这可能包括显示菜单,让用户选择要执行的操作,执行该操作,然后返回菜单。类似地,如果游戏在启动后立即退出,那么它就不太可玩。游戏也有一个游戏循环,其中一些常见事件在游戏的每个循环中都会执行。


程序循环;菜单有三个选项:(1)添加,(2)减去,和(3)退出。如果用户选择(1),则它会转到“添加”函数,然后返回到菜单。如果用户选择(2),则它会转到“减去”函数,然后返回到菜单。如果用户选择(3),则它会退出循环并退出程序。


在游戏过程中,它首先执行的一组代码——在游戏循环开始之前——是设置或初始化代码。这是初始化变量、将资产加载到内存中以及为游戏做好准备的地方。一旦进入游戏循环,游戏将始终检查玩家输入(玩家是否按下了“右”箭头键?玩家是否点击了按钮?)、更新游戏对象(将所有敌人向玩家移动 5 个像素),以及绘制到屏幕上(绘制背景、世界、玩家和敌人)。我们将为每种类型的事件编写代码,但 PyGame 会帮助我们。

当然,我们也可以编写函数来处理特定任务,但是一旦函数执行完毕,程序流程就会从函数调用所在的下一行代码继续执行。


坐标系

[编辑 | 编辑源代码]

在计算机图形学中,(x, y) 坐标用于将图像和文本放置在屏幕上。你可能还记得代数中的坐标系。虽然这里应用了相同的想法,但坐标系的布局略有不同。

在计算机图形学中,坐标系的原点通常位于 (0, 0)。当你向移动时,x 值会增加,当你向移动时,y 坐标会增加。


游戏程序循环;首先是设置部分。设置完成后,我们进入游戏循环,其中包含:“处理玩家输入”、“更新游戏对象”和“绘制到屏幕上”。如果用户退出,那么我们将退出循环,清理游戏,并退出程序。


在计算机屏幕上放置精灵的示意图。原点 (0, 0) 位于左上角。

变量是内存中的位置,我们可以存储数据。这些数据可以像数字或一串文本一样简单,也可以更复杂,例如一个硬币对象或一个非玩家角色对象。例如,我们每个游戏角色都将有一个(x, y) 坐标,这样游戏就知道在哪里将角色绘制到屏幕上。角色可能还会有一个分数变量,或一个名称变量,或许多其他东西。

最好使用变量,而不是在整个程序中硬编码值。如果数据存储在变量中,则更容易进行修复或更改——如果你的角色在关卡中的起始位置错误,你必须在游戏的所有关卡中更新这些坐标,怎么办?在命名变量时,还有一些规则需要遵守。你不能在变量名中包含空格,不能以数字开头(尽管它可以包含数字),也不能是关键字(如if)。


函数是可以运行的一组指令。函数有名称(如“AddToScore”),可以反复使用。这样,你就不必每次想要执行任务时都编写相同的代码:只需调用函数即可!

函数可以有输入输出。输入通常称为参数,输出称为返回值

例如,如果我们有一个AddToScore 函数,它的输入可能是“我们要将多少加到分数中?”,它的输出可能是“添加这个数量后,分数是多少?”

在代码形式中,它在 Python 中看起来像这样

def AddToScore( score, amount ):  # score and amount are the inputs
  score = score + amount          # adding onto the score variable
  return score                    # return the result of the math

函数并不总是需要有输入或输出,这取决于函数的任务是什么。


类是让我们(程序员)创建自己的变量数据类型的一种方法。默认情况下,我们可以使用像整数(整数)和字符串(带双引号的文本)这样的变量,但如果我们想要创建一个具有多个属性的游戏角色,例如名称、坐标、等级等,我们可以编写一个来完成这项工作。

类可以包含成员函数和变量,这样我们就可以让我们的对象拥有功能和属性。


兔子对象

Cool bunny sprite
酷兔子精灵

变量

  • score (整数)
  • xCoordinate (整数)
  • yCoordinate (整数)
  • name (字符串)

函数

  • Move( direction )
  • AddToScore( amount )
  • DrawToScreen( window )


的优点是,一旦你定义了一个类,你就可以创建任意数量的该类类型的变量。换句话说,一旦你实现了一个Player 类,你就可以重复使用相同的代码来创建你的player1, player2, player3player4

华夏公益教科书