0

これは単なる原則です。攻撃ビットボード (ナイト、ビショップ、またはポーン) の 1 つが変更されたときに、1 行目を繰り返さなくても、攻撃されたビットボードが更新されるようにしたいと考えています。これは可能ですか? これを行う最良の方法は何ですか?ボーグクラスの方法で、または単に辞書の動作を使用して:

  1. 攻撃された = pawn_attacks | 騎士の攻撃 | bishop_attacks

  2. pawn_attacks = (1 << (ポーン + 9)) | (1<< (ポーン + 7))

これは、攻撃の 1 つが変更されたときに透過的または自動的に機能しません。攻撃の結果の下は常に 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
4

1 に答える 1

0

クラスを作成している場合はattacked、必要に応じて透過的に再計算されるように (読み取り専用) プロパティを作成できます。

... rest of the class ...

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

xクラスのインスタンスが与えられると、x.attacked常に最新になります (とにかく操作が非常に初歩的であることを考えると、必要な場合にのみ再計算するためのキャッシュは保証されません)。

クラスを作成したくない場合は、同じアイデアを機能attackedさせるために特別に関数を作成する必要があります。ただし、Python は他の言語のようにクラスを使用することを強制しませんが、クラスが構造や利便性を提供する場合はクラスを使用することをお勧めします:-)

于 2015-02-02T01:02:27.643 に答える