我正在尝试为我自己的学习编写一个游戏,并且提出了一个打破我的大脑的设计问题。这是一个非常简单的基于回合的游戏,玩家拥有自己的状态,库存和所有的状态;理想情况下,我想在世界其他地方添加一些有状态的元素。在动态创建的菜单中避免全局状态
我试图向玩家介绍他们随时可以使用的选项。我已经尝试在游戏流程控制中创建每个选项,但它变得难以管理,所以我现在尝试使用更好的设计。我的头号想法是有一个Action类,每个类都有一些状态测试编码入其中。这样我就可以在一个大的配置文件中定义可能的操作,并且在向用户提供选项时,我可以迭代Action.available测试以及返回true的测试。
#obligatory pseudopython
class Action:
def __init__ (self, available_test, other_args):
#available is a function passed in, or perhaps some SQL query
self.available = available_test
....
for a in action_array:
if a.available():
#or maybe if test_handler(a.available)
options.append(a.option)
gui.show_menu(options)
的问题,这似乎是行动的对象(或者处理程序),就需要以所有游戏状态的全球访问,看看他们是否可以执行。这立即引发了我头脑中的警告标志,但我无法看到它的方向。拥有一个拥有所有访问权限的处理程序听起来不会那么糟糕,但是这会引发如何指定测试的问题,除非我将所有数据都放入数据库中并将测试写入SQL中。不过,如果我这样做,我会绕过整个程序中的每个数据访问方法,这似乎也违背了良好的设计。
我在做什么错在我的想法?有没有更好的方法来做到这一点?我并不特别喜欢这种做事方式,在这个版本中我没有写太多的代码,我很乐意从头开始(已经这样做了)。我正在仔细阅读Code Complete的借阅副本,试图给我一些想法,但尽管听起来很稳固,但我仍然在摸索到做什么。
只是要清楚:我正在设计状态同时存储;我希望Action系统和状态存储协调一致地工作。在某种程度上,我想设计一个状态管理,使其可以通过Actions进行健壮但简单的访问。我正在用Python编写,但总的来说,我的目的是学习良好的软件设计技巧,所以我稍微偏好非语言特定的答案。