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

时间:2015-02-02 00:51:35

标签: python bitboard

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

  1. attacked = pawn_attacks | knight_attacks | bishop_attacks

  2. pawn_attacks =(1<<(pawn + 9))| (1<(

  3. 当其中一个攻击发生变化时,这不会透明/自动地工作。受攻击的结果总是低于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
    

1 个答案:

答案 0 :(得分:0)

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

... rest of the class ...

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

现在给定一个类的实例xx.attacked将始终是最新的(如果需要的话,缓存到只重新计算是不合理的,因为无论如何操作都是如此基础)。

如果您不愿意上课,则必须将attacked专门设为功能才能使相同的想法发挥作用。然而,尽管Python并没有像其他语言那样强迫你使用类,但是当它们提供结构和/或方便时使用类,就像这里一样,仍然是一个好主意: - )