首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新一次攻击时更新攻击位板

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

Stack Overflow用户
提问于 2015-02-02 00:51:34
回答 1查看 92关注 0票数 0

这只是一个原则。我希望当其中一个攻击比特板(骑士、主教或典当)被更改而不必重复第1行时,被攻击的比特板被更新。这可能吗?做这件事最好的方法是什么?在borg类中,或者简单地使用字典的行为:

  1. 攻击= pawn_attacks \x knight_attacks _ bishop_attacks
  2. pawn_attacks = (1<< (典当+ 9)) x(1<<(典当+ 7))

当其中一次攻击发生变化时,它不会透明地/自动地工作。以下的攻击结果总是1。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-02 01:02:27

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

代码语言:javascript
复制
... rest of the class ...

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

现在,给定类的实例xx.attacked将始终是最新的(如果需要,缓存只在需要时重新计算是不需要的,因为操作是非常基本的)。

如果您不愿意创建一个类,那么就必须将attacked作为一个函数来实现同样的想法。然而,虽然Python并没有强迫您像其他语言那样使用类,但是在类提供结构和/或方便时使用类,比如这里,仍然是一个好主意:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28269728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档