开发新游戏时要考虑的最大陷阱是什么?


19

实际上,我几周前才刚刚开始追踪(感谢David Young的术语更正)几个针对Facebook的新的基于Web的游戏,而我刚好被大量的思维障碍和重新编码所浪费的时间淹没了。我正在研究类似基于回合(吸血鬼战争)风格的RPG。我具有编写游戏代码的技能,但我一直在努力尝试正确设计模式并使产品与我所见一致。

通常,在构建网站时,我喜欢“思考代码”,而我发现更改代码/ HTML进行调整的速度更快。这可能是因为我对自己的工作非常满意并且知道会发生什么因为我一遍又一遍地做。在游戏开发的这一点上,我发现自己又重新开始了(就像我以前在网站上一样),我想知道这是否只是我缺乏对游戏逻辑的专注和直觉,还是这是一种在我的脑海中发扬光大的合适方法?编码提前。

对于如何正确解决此问题并使自己保持工作状态的一些建议,我将不胜感激。我很快就从标准的商务网站上了解到一个游戏引擎有多么不同!每次我准备好一些东西时,都会感到糊涂和不完整,并且变得令人沮丧。

扩展的

例如,最近给我带来很多问题的战斗引擎采用简单的攻击技能,然后在-50%到+ 50%之间随机滚动,然后将原始攻击技能乘以该百分比。防御也要做同样的事情,然后我将其划分,以确定是否对敌人的健康造成了损害。我想当我开始问自己这是否是正确的方法,或者是否存在“正确”的方法时,我应该意识到自己会陷入困境。我发现的一个主要缺点是,两个角色在同一级别附近可以具有多个“掷骰”,攻击率为-50%,防御率为+ 50%,所以我最终遇到了一些漫长的战斗序列,没人做任何事情。失败

也许我的帖子应该一直要求提供描述简单游戏逻辑的建议链接。

末端延伸

谢谢大家!


1
这是一个与我相关的有趣的读物,对我有所帮助:makegames.tumblr.com/post/1136623767/finishing-a-game
zfedoran 2010年

Answers:


22

添加太多功能。专注于游戏的核心,进行构建,然后,如果一切正常,则添加功能。人们过于专注于添加有趣的东西,而从来没有完成任何事情。


4
这几乎杀死了我的一款FB游戏。它挤满了功能,但整体感觉却有些犹豫。
Tesserex

如果我没记错的话,这种现象称为“特征蠕变”。确实是一个危险的陷阱。
S.TarıkÇetin18年

14

这是一篇有关如何制作游戏原型的好文章。从您的问题看来,您似乎缺少了原型应该是什么的想法。

原型制作:您(可能)做错了

模糊:

错误4:构建系统而不是游戏
当您制作原型时,如果发现自己从事的工作无法直接推动前进,请就此停下来。作为程序员,我们倾向于尝试将代码泛化,使其变得优雅并能够处理各种情况。我们发现痒痒非常难,不会刮伤,但是我们需要学习如何做。我花了很多年才意识到,这与代码无关,而与最终发布的游戏有关。

不要编写精美的游戏组件系统,不要完全跳过编辑器,而将状态硬编码到代码中,避免数据驱动,自解析,XML疯狂,而只需编写该死的东西。

编辑:

我添加这个只是为了澄清原型和跟踪代码之间的区别。

永远记住:原型被设计为被丢弃!跟踪代码不是。

原型陷阱

...跟踪代码方法解决了另一个问题。您需要知道整个应用程序如何挂在一起。您想向用户展示交互在实际中将如何工作,并且希望为您的开发人员提供一个架构框架,在该架构上悬挂代码。在这种情况下,您可以构造一个跟踪器,该跟踪器由一个简单的容器打包算法实现(例如,先到先得)和一个简单但有效的用户界面组成。将应用程序中的所有组件组合在一起后,便有了一个框架来向您的用户和开发人员展示。随着时间的流逝,您将向该框架添加新功能,从而完成存根例程。但是框架保持完好无损,并且您知道系统将继续按照您的第一个跟踪程序代码完成时的方式进行操作。

区别非常重要,足以保证重复。原型生成一次性代码。跟踪器代码精简但完整,并且构成了最终系统框架的一部分。将原型视为在发射单个示踪剂子弹之前进行的侦察和情报收集。

来自The Pragmatic Programmer的有关Tracer Code设计的更多信息

示踪剂项目符号和原型


太好了...我将不得不看一下这篇文章。只是从您发布的摘录中,听起来好像我在看原型制作不正确,但听起来也可能是一个常见错误。
AngryCodeMonkey 2010年

你引用的错误已经困扰了我好一阵子了。
jokoon

4

陷阱:不能将逻辑与数据分离。不测试您的数据是否会产生预期的结果。

从您对Joe的帖子的评论:

你要我为怪物遇到的战斗引擎编写代码,BOOM!我本周至少重写了3次引擎,但对此我从未感到满意。我的意思是说,数学有效,但是当我尝试一下时,它感觉很奇怪。那有意义吗?

听起来您在这里将引擎与数据混合在一起。您的怪物遭遇引擎应该由数据驱动。如果影响游戏平衡/游戏乐趣的数据是错误的,则无需完全重写引擎-只需调整平衡变量,直到感觉正确为止。

但是,由于平衡变量有时是相互依存的,因此将一个变量更改为更好的一种方案可能会对其他方案产生巨大(负面)影响。

为了测试您新调整的数据不会破坏其他所有情况,保留一些测试用例并确保它们在调整后没有损坏是很有用的。这是一个如何测试的公认例子。

TestResult TestPlayerKillsMonsterDuringAttack(PlayerStats, MonsterStats, seed)
{
   Player player(PlayerStats);
   Monster monster(MonsterStats);

EncounterEngine.SeedRNG(seed);
while(1) { result = EncounterEngine.Attack(player, monster); if (result == PLAYER_DEAD) return TEST_FAIL; if (result == MONSTER_DEAD) return TEST_PASS; // result == MONSTER_DAMAGED, PLAYER_DAMAGED is expected. } }

例如。如果使用PlayerStats.Level == 5和MonsterStats.Level == 3来调用它,那么您会期望玩家最终总是能击败这个怪物。


我得到的建议很好,我可以看到我在很多情况下采取了错误的方法。不过,我重写引擎的原因是我认为它过于复杂。我最新的战斗引擎版本是(目前)具有单个公共功能和多个支持的类。“战斗”的主要功能不仅是计算基本的进攻还是防守,还包括确定一击,检查掷骰来确定您的战术技能是否给您第二击等,等等,等等。我想我太过分了难!
AngryCodeMonkey 2010年

不能将逻辑与数据分开。那很重要,这几乎总是会在将来或更新时引起问题!
惊吓

2

据我所知,这里的陷阱在于,您实际上将编程和游戏设计视为同一任务,而实际上它们却是独立的任务。正如您所建议的那样,这不是编程或算法问题(您可以根据需要以任何方式对战斗系统进行编码),而是关于玩家有趣和有趣的事情。

答案是,查找有关游戏设计和游戏平衡的资源。实际上,有些大学会为您提出的主题投入整个四年的学习计划,因此不可能给您一个快速而又肮脏的答案(如果有人说“是的,我对游戏有这个想法,但我不知道如何编程,我应该注意什么?”)。这里有关于游戏设计的书籍,课程和在线著作;寻找他们。


1

编写游戏时最大的陷阱就是担心您是否使用正确的设计模式,而不是仅仅编写自己擅长的代码。


我现在遇到的问题是我正在编写的代码感觉很好。您想为您的企业提供会计后端,没问题...您想让我为怪物遇到的战斗引擎编写代码,BOOM!我本周至少重写了3次引擎,但对此我从未感到满意。我的意思是说,数学有效,但是当我尝试一下时,它感觉很奇怪。那有意义吗?
AngryCodeMonkey 2010年

为什么要重写引擎?您可以使用lua之类的脚本语言来实现游戏特定的代码。更改变量或计算数学的方式,而无需重新编译仅需检查一下。 gamedev.net/reference/articles/article1932.asp
David Young

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.