8

我已经做了一些简单的游戏:进入一个关卡,到达终点,继续下一个关卡。
但我仍然想知道“真正的”游戏开发者是如何创建带有故事的游戏的。

以下是故事游戏具有的一些东西(以及我想知道它们是如何制作的):

  • 玩家必须访问的一系列地方,并在那里做那个,那个,那个。
  • 你第一次见到一个人,他只会打招呼。经过几个小时的游戏进度后,他会提示您去特定的地方。
  • 第一次过桥时什么都没有发生,第二次:桥倒下,你会进入桥下的一个新位置。
  • 第一次进入新地点,会从村民那里得到很多信息,下次什么都没有

最后一点是相同的三倍。
但是,我认为他们没有包含大量布尔值和整数的保存文件来保存以下内容:

  • 玩家第一次做......
  • 玩家第十次进入该位置
  • 玩家第 ###与那个人交谈
  • ETC

当我谈论故事游戏时,我在想:

  • 塞尔达传说(该系列的所有游戏)
  • 大神

这是一些进进出出游戏的例子:

  • 马里奥
  • 编织
  • 蜡笔物理学

谢谢

4

5 回答 5

5

通常,这些游戏使用一组标志来管理特定角色和布景的行为。这与有限状态机非常相似(通常直接等效),这是解决问题的一种更通用和更强大的方法。

  • FSM 跟踪特定任务的“进度”——抛出了哪些开关,进行了哪些对话等
  • 每个 NPC 都有一个 FSM 来跟踪“该 NPC 的信息状态——每个状态都与 NPC 在游戏中的特定阶段相关,通常以随机引用状态结束。
  • 例如,保存的游戏可以跟踪游戏世界中每个对象的状态。

重要的部分是不仅要设计状态,还要设计转换,使它们尽可能容易连接。

于 2010-06-08T15:59:44.980 回答
1

我想你会发现它因流派而异,但在播放时它可能只是保存在内存中的数据结构中,保存时它会持久保存到保存文件中(只需查看各种游戏的一些保存文件的大小,我见过多 MB 的保存文件)。

于 2010-06-08T15:57:33.343 回答
1

我从来没有做过这样的事情,但我认为一般方法是加载/保存/查询一个“GameState”结构,该结构包含游戏执行适当操作所需的所有必要信息。

例如

if(GameState.Player.Karma < 0 && GameState.NPCs.BillyTheInnocentLamb.KilledByPlayer)
{
    GameState.NPCs.FredTheShephard.HatesPlayer == true;
}

现在做一百万次,你就拥有了一个 RPG。

于 2010-06-08T16:06:11.137 回答
0

如果你能设法看看 Oblivion(很棒的游戏!),你可以尝试使用他们的 Construction Set,它允许你通过构建额外的地图任务等来完全个性化游戏。

通过使用它你会看到这个机制本质上是其他人所说的:例如你有几个 NPC 可以说的句子,它会根据某些条件说一个或另一个。例如,你是好人还是坏人,你在说服他某事方面有多好,或者你在贿赂他方面有多好,你拥有/没有的特定物品,甚至是一天中的时间之类的东西!

正如您所看到的,这些事情中的任何一个都可以很容易地用一个值来表达(例如,好/坏可以是 0 到 100 之间的值,对于您的贿赂技巧等也是如此),然后这只是有很多 if 的问题 :)

于 2010-06-08T16:24:16.460 回答
0

“但是,我不认为他们有一个包含大量布尔值和整数的保存文件来保存东西”

我认为他们会。:)

有时它可能有一个正式的结构:例如,它可能是一个命名计数器和标志的列表,可以从游戏的脚本语言中查询,并且可能直接对应于设计文档中的条目。游戏可以增加计数器并翻转标志以响应游戏内事件,并在决定执行哪些操作时查询这些标志和计数器,并且可以轻松地以紧凑的格式保存整个批次。

于 2010-06-09T10:08:00.120 回答