Answers:
经验越少,前期设计就会浪费更多的时间。做好设计是您将要学习的东西,方法是先做一下,然后查看/评估结果。有些决定具有深远的影响,但含糊不清。经过一些游戏后,您可能可以使初始设计变得更加扎实,并且可以花更多的时间来投入此阶段。
我的座右铭:首先完成任务,但要利用常识来检测哪些组件比其他组件更关键,并在您的时限内很好地设计这些组件。例如,如果AI对您的游戏至关重要,请确保以后可以轻松扩展/更改AI。或者,如果您要编写将在每个游戏中使用的组件,请对其进行设计以实现可重用性。跟踪您的时间,不要疯狂地进行设计。设置设计截止日期,然后,开始破解所有内容以获取发布截止日期。但是请确保您记下了哪些点需要事后重构/重新设计,并在开始下一场游戏之前的一段时间内进行计算以改善这些问题,以免它们被您所困扰。
一个好的建议:如果您必须在两个选项之间进行选择,请不要在细节上停留太久。大多数情况下,没有“好”或“坏”。在某些情况下,A会更好,而在某些情况下,B会更好,总的来说,两者之间的差异可能并不总是值得的。
在设计软件或游戏时会获得很多经验,因此请确保您将一些时间花在研究上(例如,读一本关于设计的书,阅读其他人的经验,与其他程序员讨论您的设计等)。 )。
人们很难预测未来。对于要求每天都会变化的游戏而言,尤其如此。
有一个称为YAGNI的原则,也就是“您将不需要它”,它基本上说您不应该执行某些事情,除非您知道自己将需要它。
我已经看到太多的系统陷入僵化的架构僵化之中,实际上并没有真正使用它,因为人们认为自己需要的功能永远不会被使用。
我的个人理念是“ 做可能可行的最简单的事情”。话虽这么说,“完成它”和“一起砍屎”之间是有区别的。有目的的编写代码并不意味着要进行会产生“代码味道”的事情,例如将所有内容公开,让blob类执行所有操作,或者其他数十种表示“不良”代码的事情。
在我今天的心态中,这是正确的:
我是软件快速原型设计的朋友。特别是在游戏开发期间。对于快速学习,测试和使用事物非常有用。对于接近硬件的编程或复杂的算法,对我来说是最好的方法。
Theory();
RapidPrototype();
bool bOk = false;
while(!bOk)
{
Testing();
LotOfFixing();
PlayingWith();
bOk= AnalysingResults();
}
FinalFastAndNiceDataStructuresAndCode();
我的Rapid Prototype版本必须具有适当的原型外壳:
优点:
如果做得好,最后可以得到产品的实际调试/学习版本。
我们正在项目中使用它,对此我们感到满意。
看一下敏捷软件开发。尽管这不是灵丹妙药,但它的目标是做到这两者(完成并具有可靠的软件设计)。