我对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
(循环内部)类型增量来解决这个问题,但我似乎无法做到正确。我觉得这应该是一个相当简单的解决方案,而且我认为它要比它更难。那么,关于如何在一定次数的迭代中更改变量的任何想法,然后让它恢复到原始值?
答案 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