使用 pygame 为游戏创建人工智能

1,142 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情

带我去见你的领袖

将玩家角色放置在令人信服的世界中只是创建游戏的一部分。为了让游戏变得有趣,你需要向玩家展示一些挑战。这些可能以陷阱和障碍物的形式出现,但要真正娱乐你的玩家,你需要让他们与非玩家角色(NPC)互动 - 这些角色似乎在游戏中具有一定程度的智力或意识。创建这些NPC的过程称为人工智能(AI)。在本章中,我们将探讨一些简单的技巧,您可以使用这些技巧来赋予游戏角色自己的生命。

为游戏创建人工智能

您可能已经在Pygame文档中查看了pygame。模块。没有,因为每个游戏在创建NPC时都有截然不同的要求。猿猴向水管工投掷桶的代码不需要太多的工作 - 猿猴需要确定的所有事情是应该向左还是向右投掷,这可能是你可以在一行Python代码中模拟的东西!在未来的第一人称射击游戏中创建令人信服的敌方战斗人员可能需要更多的努力。AI玩家必须计划从地图的一部分到另一部分的路线,同时瞄准武器并躲避敌人的火力。它还可能还必须根据弹药供应和装甲库存做出决定。它做这一切做得越好,它就越好AI玩家,对玩家的挑战就越大。

虽然游戏中的大多数AI都被用来创造令人信服的对手来对抗,但将AI技术用于更和平的目的正变得越来越流行。NPC不一定总是敌人,必须在看到时被派遣;它们也可能是放置在游戏世界中的角色,以增加游戏玩法的深度。一些NPC甚至可能是玩家的朋友,应该受到保护免受伤害,因为他们积极协助任务。其他游戏,比如非常成功的《模拟人生》,根本不需要玩家角色,而是完全由NPC组成。

AI还有助于通过添加不直接参与游戏玩法的背景角色(相当于电影附加内容的游戏)来使游戏世界更具说服力。我们可以应用一些人工智能技术让鸟儿聚集在一起,或者在赛车游戏中成群结队地逃离失控的汽车。正是这种对细节的关注真正将玩家与游戏世界联系起来。诀窍是让玩家相信,即使他们目前没有玩游戏,游戏世界也会存在。

人工智能以困难著称,这是它不值得的。您为 AI 创建的大部分代码都可以以各种组合重用,以创建各种不同类型的 NPC。事实上,大多数游戏都会对中的每个角色使用相同的代码。

一个游戏,你只需要调整几个值来修改行为。

本章不会涵盖大量的人工智能理论(这很容易消耗一整本书)。相反,它将为您提供许多技术,您可以将这些技术应用于游戏中的许多情况。

什么是智能?

智能是一件很难定义的事情,即使对于AI程序员也是如此。我相信我是聪明的和有自我意识的,但我只能假设别人是聪明的,因为他们在很多方面都像我一样。其他人像我一样说话,移动,检查他们的电子邮件,并拿出他们的垃圾 - 所以我假设他们是聪明的。同样,在游戏中如果一个角色

以一种智能事物的方式行事,那么玩家会认为它是

智能。程序员可能知道角色的动作只是几页计算机代码的结果,但玩家将忘记这一事实。就玩家而言,如果它像僵尸一样走路,像僵尸一样呻吟,像僵尸一样吃人,那么它就是僵尸!

因此,游戏中的智力是一种幻觉(在现实生活中也可能是幻觉)。创建这种错觉的代码与前几章中的代码没有太大区别。您将使用相同的Python字符串,列表,字典等基本工具来构建实际上是NPC大脑的类。事实上,Python可能是编写AI的最佳语言之一,因为它具有大量的内置对象。

探索人工智能

人工智能对于创建娱乐性游戏并不重要。我曾经喜欢玩经典的平台游戏,英雄必须从一个平台跳到另一个平台,厚颜无耻地跳到怪物的头上。

虽然这些游戏中的怪物是NPC,但他们的行为有点初级,不能被认为是AI。让我们来看看一个典型的平台游戏怪物的头部(参见清单7-1)。此清单是伪代码,用于演示技术但实际上并未运行的代码。

image.png

清单 7-1 中的特定怪物除了能够检测它是否撞到墙上之外,对周围环境没有任何意识,而且它肯定不会以任何方式对即将落在其头上的玩家角色做出反应。一般来说,

对AI的要求是NPC必须对游戏中的其他实体有意识,尤其是玩家角色。让我们考虑另一种类型的游戏怪物:来自地下世界的火球投掷。小精灵在生活中有一个简单的任务:找到玩家并向他的方向投掷火球。清单 7-2 是 imp 的大脑的伪代码。

image.png

Imp可以处于以下两种状态之一:探索或寻找。imp的当前状态存储在自我的价值中。状态,并指示当前控制 imp 的操作的代码块。当潜行者在探索时(即,自我状态==

“探索”),它将通过随机选择一个标题来漫无目的地在地图上行走。但如果看到玩家,就会切换到“寻找”的第二种状态。处于寻觅模式的Imp将前往玩家,并在进入射程后立即开火。只要能看到玩家,它就会继续这样做,但如果懦弱的玩家撤退,小精灵就会切换回探索状态。

我们的潜行者当然不是深刻的思想家,但它确实对周围环境(即玩家在哪里)有意识,并采取相应的行动。即使有两种状态,小精灵也会足够聪明,成为第一人称射击游戏中的敌人。如果我们要再添加几个状态并定义在它们之间切换的条件,我们可以创建一个更强大的敌人。这是游戏AI中的常用技术,称为状态机。

注意:这个小鬼并不是黑社会居民中最聪明的。如果玩家再也看不见了,小精灵就会停止寻找,即使玩家刚刚躲在一棵树后面!幸运的是,我们可以在状态机上构建,以创建一个更智能的imp类。