我真的很喜欢编程游戏和益智游戏创作者/游戏。我发现自己以相同的方式设计了许多此类问题,并最终使用了类似的技术对我非常满意的编程。
为了让您有一个简短的了解,我喜欢创建图形,其中节点用对象表示。这些对象保存数据,例如坐标,位置以及对其他相邻对象的引用。我将它们全部放入数据结构中,并在“游戏循环”中根据这些信息做出决策。
虽然这是一个简短的示例,但并非在所有情况下都准确。这只是我真正感到满意的一种方式。这不好吗?
我真的很喜欢编程游戏和益智游戏创作者/游戏。我发现自己以相同的方式设计了许多此类问题,并最终使用了类似的技术对我非常满意的编程。
为了让您有一个简短的了解,我喜欢创建图形,其中节点用对象表示。这些对象保存数据,例如坐标,位置以及对其他相邻对象的引用。我将它们全部放入数据结构中,并在“游戏循环”中根据这些信息做出决策。
虽然这是一个简短的示例,但并非在所有情况下都准确。这只是我真正感到满意的一种方式。这不好吗?
Answers:
不,还好。
实际编程的目的是找到在许多类似的开发中可能有用的解决方案。您刚刚找到一个。
您不能也不应该仅仅因为它们不同而创建不同的解决方案。但是,您绝对应该每次都对您的解决方案进行批判性检查,并问自己它们是否仍然很好,或者从那以后行业已经取得了进步,您需要相应地进行调整。
如果效果良好,则将其称为设计模式。如果不是,但您不了解更多,那就是金锤反模式。
好问题,我必须承认这也是困扰我的事情。
什么时候好?对代码进行性能分析-如果您看到自己处于O(log n)或O(n)或O(n log n)中,并且这样的问题可以映射到已知数据结构,通常就可以了。
什么时候不好?您的时间或空间复杂度为O(n ^ 2)或更糟,或者根据定义,问题是NP完全。在这些情况下,您需要应用一些启发式方法,应用其他领域的知识等。
快速示例:在芯片设计中,选择如何在电路中安排栅极以实现最低功耗是NP完整的。虽然这是必须的,但仅凭图形并不能为您带来很多好处。您需要阅读其他材料,有时需要跨学科阅读,并在您的领域中应用知识。例如,遗传算法(模拟生物学交叉和变异的算法,如生物学101中所定义)在设计硬件芯片中有许多应用。
如果您的目标是生产产品,那么“开发人员艺术”实际上是正确的答案。并且,如果您的“工厂”生产的产品令人满意,则可以降温。
但...
如果您想学习新的(并且可能更好)的做事方法,则必须进行更改。这将产生失败,但只有通过失败,人们才能真正学会。通过这次新的学习,您也许可以生产出更好,更引人注目的软件。
这实际上是通过神经学研究来支持的。所以你去了。