Как мне исправить TypeError: объект 'int' не повторяется - PullRequest
0 голосов
/ 07 февраля 2019

Я создаю двухмерную ролевую игру и хочу, чтобы показатель защиты от базового числа увеличивался на случайные числа от 4 до 8 при увеличении уровня игрока на 1 каждый раз.

В предыдущем цикле while функция int () работала нормально, но этого нет, и я не могу вспомнить, как это было исправлено.

У меня есть класс Player, у меня есть def Shield (self): тогда у меня есть операторы: маленький щит, средний щит, большой щит.Каждый щит зависит от того, какой класс игрока, например;Убийца или Воин, которые являются утверждениями внутри щита.в классах игрока, если в операторах есть self.S_Defence + = # и, как вы можете видеть там, self.D_Stats = self.S_Defence, но код там должен обновляться и сбрасывать число с увеличенным числом

        self.S_Exp = 600
        while self.S_Exp >= 0 + (self.S_Level * 100):
            self.S_Level += 1
            self.S_Exp -= ((self.S_Level - 1) * 250)
            self.S_Level_Stats = [self.S_Exp, self.S_Level]

            self.Increased_Defence = []
            for loop in self.D_Stats:
                loop += random.randint(4, 8)
                self.Increased_Defence.append(loop)
                self.D_Stats = self.Increased_Defence
                self.D_Stats = [self.S_Defence]

Что ожидается, если уровень игрока повысится, конкретный показатель в этом случае защита должна увеличиться на 4,5,6,7 или 8

1 Ответ

0 голосов
/ 07 февраля 2019

EDIT: определение для self.D_Stats не является списком, см. Определение для self.P_Stats = [self.P_HP, self.P_Attack, self.P_Speed].Это не работает "то же самое", потому что (я полагаю) это должно быть: self.D_Stats = [self.S_Defence]

Петли Python for должны занять повторяемость .Таким образом, в этом цикле for, self.D_Stats должен быть списком или чем-то подобным.

for loop in self.D_Stats:
    loop += random.randint(4, 8)
    self.Increased_Defence.append(loop)
    self.D_Stats = self.Increased_Defence
    self.D_Stats = self.S_Defence

Если self.D_Stats является целым числом, тогда используйте функцию python range() , который создает итерацию из 0 -> <argument>-1 или иным образом с дополнительными аргументами.

for loop in range( self.D_Stats ):
    loop += random.randint(4, 8)

Тело цикла for также выглядит немного странно.self.D_Stats устанавливается дважды, поэтому значение self.Increased_Defence теряется.self.D_Stats должен быть списком / массивом и должен быть .append() ed?

Основываясь на описании того, что должен делать код, я думаю, что он должен выглядеть примерно так, как "Щит"Защита ", похоже, не имеет никакого отношения к увеличению базового показателя защиты.Мы повышаем уровни и «истощаем» очки опыта.Таким образом, цикл while() повторяется, уменьшая очки опыта, но увеличивая D_Stats.Так или иначе, я так понимаю из описания.

while self.S_Exp >= 0 + (self.S_Level * 100):
    self.S_Level += 1
    self.S_Exp -= ((self.S_Level - 1) * 250)
    self.S_Level_Stats = [self.S_Exp, self.S_Level]

    points_increase = random.randint(4, 8)
    self.Increased_Defence.append(points_increase)
    self.D_Stats += points_increase

EDIT2: Глядя на ваш код, я думаю, что было бы аккуратнее, чище и короче , если вы используете структуры данных для хранениянекоторые из значений статов.Модификатор оружия может быть значительно упрощен:

def Weapon(self, Weapon):
    weapon_mods = { "Dagger":[6,0], "Knife":[5,0], "Sword":[7,0], "Axe":[7,-5] } #etc
    if ( Weapon in weapon_mods ):
        attack_mod, speed_mod = weapon_mods[ Weapon ]
        self.P_Attack += attack_mod
        self.P_Speed  += speed_mod
        self.P_Stats = [self.P_HP, self.P_Attack, self.P_Speed]

Я думаю, что лучше всегда добавлять модификатор и использовать отрицательные / положительные модификаторы.Это упрощает логику (а что, если вы хотите создать оружие, которое увеличивает скорость атаки?)

...