更新一次攻击时更新攻击位板

2024-04-24 20:15:55 发布

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

这只是一个原则。我想被攻击的位板被更新时,其中一个攻击位板(骑士,主教或典当)被改变,而不必重复第1行。这可能吗?最好的方法是什么?以博格类的方式或简单地使用字典的行为:

  1. 攻击=典当攻击|骑士攻击|主教攻击

  2. 典当攻击=(1<;<;(典当+9))|(1<;<;(典当+7))

当其中一个攻击发生变化时,这不会透明/自动地工作。下面攻击的结果总是1。你知道吗

class Test(object):
    def __init__(self):
        self.pawn_attacks = 0
        self.knight_attacks = 0
        self.bishop_attacks = 0

    @property
    def attacked(self):
        return self.pawn_attacks | self.knight_attacks | self.bishop_attacks

test = Test()
test.pawn_attacks = 1
print test.attacked
test.pawn_attacks = 2
print test.attacked

Tags: testltselfdefbishopprint原则attacks
1条回答
网友
1楼 · 发布于 2024-04-24 20:15:55

如果要编写类,可以将attacked设为(只读)属性,以便在需要时透明地重新计算:

... rest of the class ...

@property
def attacked(self):
    return self.pawn_attacks | self.knight_attacks | self.bishop_attacks

现在给定类的一个实例xx.attacked将始终是最新的(缓存到只在需要时重新计算是不必要的,因为操作是如此基本)。你知道吗

如果你不想创建一个类,你就必须创建一个attacked特别是一个函数来实现同样的想法。然而,虽然Python没有像其他语言那样强制您使用类,但是在类提供结构和/或方便时使用类(如这里所示)仍然是一个不错的选择想法:-)你知道吗

相关问题 更多 >