Python:在循环中更改特定迭代次数的变量

时间:2015-03-11 18:54:13

标签: python

我对Python比较陌生。我使用Python 2.7,我正在制作一个基于回合制的战斗游戏。我正在努力解决目前的问题 - 如果你熟悉Pokemon,你可能很容易与之相关。

所以我有一个循环,允许用户攻击,然后随后,敌人(计算机控制)将攻击用户。在我的游戏中,攻击(由一个类控制)每个都有自己的准确度。我想创建攻击,这将改变一定次数的迭代的准确性。为了实现这一点,我需要弄清楚如何为n个转弯更改变量。下面是一些代表我想要做的事情的代码,简化:

accuracy = 0
while True: 
    attack = raw_input('What attack shall you choose?')
    if attack == 'boost accuracy':
        #accuracy = 100 for 3 iterations, then returns back to 0

    #enemy does their attack

注意:我正在使用while True:循环,因为每个怪物也有一个健康变量,当它等于0,或者怪物“死”时,它就会突破循环。

我尝试过使用turn = 0(循环外),turn += 1(循环内部)类型增量来解决这个问题,但我似乎无法做到正确。我觉得这应该是一个相当简单的解决方案,而且我认为它要比它更难。那么,关于如何在一定次数的迭代中更改变量的任何想法,然后让它恢复到原始值?

1 个答案:

答案 0 :(得分:2)

这样的事情会发生。

boost_turns = 0
while True: 
    attack = raw_input('What attack shall you choose?')
    if attack == 'boost accuracy':
        boost_turns = 3
    if boost_turns:
        accuracy = 100
        boost_turns -= 1
    else:
        accuracy = 0
    # attack 

但我不太喜欢这段代码的样子。对于OOP来说,您的任务看起来很棒。您应该创建一个Pokemon类,并且可能为每个怪物创建一个子类,以防它们具有不同的属性。这是一个基本模板

class Pokemon(object):
    def __init__(self, default_accuracy=0):
        self._default_accuracy = default_accuracy
        self._accuracy = default_accuracy
        self._boosted_turns = 0
        self._hp = 100

    def boost(self, turns=3, boost=100):
        self._boosted_turns = turns
        self._accuracy = boost

    def _spend_boost(self):
        self._boosted_turns -= 1

    def _reset_accuracy(self):
        self._accuracy = self._default_accuracy

    def get_damaged(self, damage):
        self._hp = (self._hp - damage > 0 and self._hp - damage) or 0

    def perform_attack(self, Pokemon, attack):
        if attack == 'boost accuracy':
            self.boost()
        if self._boost_turns:
            self._spend_boost()
        else:
            self._reset_accuracy()
        # specify attack behaviour