代码生成中的依赖矛盾

2024-10-03 17:25:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前的项目是尝试将流行的纸牌游戏Mao移植到局域网游戏(多人游戏)中,计算机将成为“大师”。它将跟踪规则、纸牌、玩家等。然而,毛没有正式的规则集;而是由玩家制定规则。因此,我的rule类具有非常基本的属性设置,因此可以使用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}))'(使用parametres创建类的新对象,并将其添加到适当的列表中(卡片到堆或卡片组,新规则到RuleHandler,等等)
    5. 调用,它只是调用另一个规则的代码
      • 'self.rules.get({rule})rule'(rules是一个字典,其中key是包含所有信息的rule对象,value是compile-ing之后生成的代码)
    6. 说吧,这让一个玩家说了些什么
      • 不是一个简单的一行,并超越了它的类界限(参考球员连接和聊天)

最后一个是最复杂的,我有麻烦的。举个例子,毛的一个共同规则是,如果有人在任何一件衣服上写下“7”,他们必须说“祝你愉快”。如果下一个球员写下“7”,那么他们必须说“祝你愉快”。“非常”这个词不断增加,直到有人没有写下“7”,他们必须说“非常感谢”,其中“非常”的数字就是“非常”的数字“非常”在最后的“祝你有一个非常美好的一天”+1的同时,还抽了那么多的牌作为惩罚。虽然这是一个复杂的规则,但大多数都可以通过临时变量和最后一张牌的记录轻松实现。然而,确保玩家说出正确短语的代码正是我的绊脚石。其余的动作都在幕后进行,不需要任何用户输入。等待用户输入是服务器代码工作的一部分,不应该是RuleHandler类的一部分。你知道吗

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


Tags: 对象代码游戏属性顺序value规则玩家
1条回答
网友
1楼 · 发布于 2024-10-03 17:25:35

我决定将短语存储在一个队列中,每次有人说某事时,将每个短语与所说的队列进行核对。例如:如果有人说“Dog”并且“Dog”在队列中,它会将其删除,并给等待它的规则中的原始代码提供继续执行所需的标志。你知道吗

相关问题 更多 >