代码生成器中的依赖矛盾

时间:2013-06-09 07:00:08

标签: python multithreading oop code-generation

我目前的项目是尝试将流行的纸牌游戏Mao移植到局域网游戏(多人游戏)中,在那里计算机将成为“大师”。它将跟踪规则,套牌,球员等。但是,毛泽东没有正式的规则;相反,球员组成规则。因此,我的规则类具有非常基本的属性设置,以便可以使用RuleHandler类(其实例在单独的线程中运行)仅从少数属性生成代码:

  • 触发器(卡片(当放在堆上时)或文本/动作)
  • 可选条件(即:如果没有完整的牌组......)
  • 6(大部分)对游戏中任何变量的基本操作:
    1. 删除变量(如删除卡片或移除播放器)
      • 'del({variable})'
    2. 将变量设置为值(例如,将播放器顺序(int)设置为负数(这将颠倒顺序))
      • '{variable} = {value}'
    3. '替换'两个变量(a,b = b,a;如切换两个玩家的手或甲板和桩
      • '{variable1}, {variable2} = {variable2}, {variable1}'(真的只是一个花哨的Set动作)
    4. '新',它会生成一个新对象(例如新卡)
      • '{list}.append({class}({parametres}))'(使用参数化创建一个新的类对象并将其添加到适当的列表中(卡片堆叠或卡片组,新规则添加到RuleHandler等)。)
    5. 调用,只调用另一个规则的代码
      • 'self.rules.get({rule})rule'(规则是一个字典,其中键是规则对象,包含所有信息,值是compile之后生成的代码)
    6. 说,这让玩家说些什么
      • 不是简单的一个班轮,而且超越了它的班级范围(引用玩家联系和聊天)

最后一个是最复杂的,也是我遇到麻烦的。举一个例子,毛泽东的一个共同规则是,如果有人放下任何套装的“7”,就必须说“祝你有个美好的一天”。如果下一位玩家放下'7',那么他们必须说'祝你有个美好的一天'。 “非常”继续增加,直到有人不放'7',他们必须说'非常感谢',其中“非常”的数量是“非常”的数字“有一个非常好的”白天'+ 1同时也将那些卡片作为惩罚。虽然这是一个复杂的规则,但大部分规则都可以通过临时变量和最后一张卡片的日志来轻松实现。但是,确保玩家说出正确短语的代码就是让我磕磕绊绊的代码。其余的操作在幕后参与,不需要任何用户输入。等待用户输入是Server代码的一部分,不应该是RuleHandler类的一部分。

如何确保Say操作简单并且不会超越面向对象编程的单一责任属性?

1 个答案:

答案 0 :(得分:0)

我决定将短语存储在队列中,每次有人说出某些内容时,每个短语都会根据所述队列进行检查。 I.E:如果有人说“狗”和“狗”在队列中,它会将其删除,并在规则中提供原始代码,该代码正在等待它需要继续执行的标志。