我目前的项目是尝试将流行的纸牌游戏Mao移植到局域网游戏(多人游戏)中,在那里计算机将成为“大师”。它将跟踪规则,套牌,球员等。但是,毛泽东没有正式的规则;相反,球员组成规则。因此,我的规则类具有非常基本的属性设置,以便可以使用RuleHandler类(其实例在单独的线程中运行)仅从少数属性生成代码:
'del({variable})'
'{variable} = {value}'
'{variable1}, {variable2} = {variable2}, {variable1}'
(真的只是一个花哨的Set
动作)'{list}.append({class}({parametres}))'
(使用参数化创建一个新的类对象并将其添加到适当的列表中(卡片堆叠或卡片组,新规则添加到RuleHandler等)。)'self.rules.get({rule})rule'
(规则是一个字典,其中键是规则对象,包含所有信息,值是compile
之后生成的代码)最后一个是最复杂的,也是我遇到麻烦的。举一个例子,毛泽东的一个共同规则是,如果有人放下任何套装的“7”,就必须说“祝你有个美好的一天”。如果下一位玩家放下'7',那么他们必须说'祝你有个美好的一天'。 “非常”继续增加,直到有人不放'7',他们必须说'非常感谢',其中“非常”的数量是“非常”的数字“有一个非常好的”白天'+ 1同时也将那些卡片作为惩罚。虽然这是一个复杂的规则,但大部分规则都可以通过临时变量和最后一张卡片的日志来轻松实现。但是,确保玩家说出正确短语的代码就是让我磕磕绊绊的代码。其余的操作在幕后参与,不需要任何用户输入。等待用户输入是Server代码的一部分,不应该是RuleHandler类的一部分。
如何确保Say
操作简单并且不会超越面向对象编程的单一责任属性?
答案 0 :(得分:0)
我决定将短语存储在队列中,每次有人说出某些内容时,每个短语都会根据所述队列进行检查。 I.E:如果有人说“狗”和“狗”在队列中,它会将其删除,并在规则中提供原始代码,该代码正在等待它需要继续执行的标志。