1

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

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

最后一个是最复杂的,也是我遇到麻烦的一个。例如,毛泽东的一条普遍规则是,如果有人放下任何西装的“7”,他们必须说“祝你有美好的一天”。如果下一位玩家打出“7”,那么他们必须说“祝你有美好的一天”。“very's”不断添加,直到有人没有输入“7”,他们必须说“非常感谢”,其中“very's”的数量是最后一个“Have a very nice”中“very's”的数量day' + 1,同时也抽出该数量的牌作为惩罚。虽然是一个复杂的规则,但大部分都可以通过临时变量和最后一张牌的日志来轻松实现。然而,确保玩家说出正确短语的代码让我感到困惑。其余的操作在幕后进行,不需要任何用户输入。等待用户输入是服务器代码工作的一部分,不应该是 RuleHandler 类的一部分。

我该怎么做才能确保Say操作简单并且不会超出面向对象编程的单一职责属性?

4

1 回答 1

0

我决定将短语存储在一个队列中,每次有人说某事时,每个短语都会与所述队列进行检查。IE:如果有人说 'Dog' 并且 'Dog' 在队列中,它会删除它,并在规则中给出等待它需要继续执行的标志的原始代码。

于 2013-06-16T16:53:36.813 回答