Как сравнить несколько объектов, чтобы увидеть, равен ли атрибут между ними? - PullRequest
0 голосов
/ 08 марта 2020

Я любитель в Python, и я пытаюсь создать программу для определения инициативы для игры, которую я делаю, и часть этого заключается в том, чтобы убедиться, что два персонажа не имеют одинаковые «Скорость тика». Каждый символ является объектом со следующим кодом класса:

class Character(object):
        def __init__ (self, name, speed, agility, otick, tick):
                self._name = name
                self._speed = int(speed)
                self._agility = int(agility)
                self._otick = int(otick)
                self._tick = int(tick)

и следующим кодом для определения «скорости тика»:

if createCharacter._speed == 0: createCharacter.set_otick(-1)
        elif createCharacter._speed == 1: createCharacter.set_otick(30)
        elif createCharacter._speed == 2: createCharacter.set_otick(27)
        elif createCharacter._speed == 3: createCharacter.set_otick(24)
        elif createCharacter._speed == 4: createCharacter.set_otick(21)
        elif 5 <= createCharacter._speed <= 6: createCharacter.set_otick(18)
        elif 7 <= createCharacter._speed <= 9: createCharacter.set_otick(15)
        elif 10 <= createCharacter._speed <= 11: createCharacter.set_otick(14)
        elif 12 <= createCharacter._speed <= 13: createCharacter.set_otick(13)
        elif 14 <= createCharacter._speed <= 15: createCharacter.set_otick(12)
        elif 16 <= createCharacter._speed <= 17: createCharacter.set_otick(11)
        elif 18 <= createCharacter._speed <= 22: createCharacter.set_otick(10)
        elif 23 <= createCharacter._speed <= 28: createCharacter.set_otick(9)
        elif 29 <= createCharacter._speed <= 34: createCharacter.set_otick(8)
        elif 35 <= createCharacter._speed <= 43: createCharacter.set_otick(7)
        elif 44 <= createCharacter._speed <= 61: createCharacter.set_otick(6)
        elif 62 <= createCharacter._speed <= 97: createCharacter.set_otick(5)
        elif 98 <= createCharacter._speed <= 169: createCharacter.set_otick(4)
        elif 170 <= createCharacter._speed <= 225: createCharacter.set_otick(3)
        createCharacter.set_tick(createCharacter._otick)

Мне было интересно, как кодировать вещи, чтобы, если в бою три или более персонажа, одна команда может проверить, имеют ли по крайней мере два из них одинаковое значение «галочка», поэтому, когда я выполняю программу обратного отсчета, у меня не будет двух персонажей, одновременно достигающих 0 .

Мое намерение состоит в том, чтобы проверка сравнения происходила при создании персонажа и когда ход персонажа закончился, и его «тик» возвращается к своему первоначальному значению (которое хранится в «отике»). Если хотя бы два значения равны, то программа должна сравнить атрибут «agility» двух символов, и в зависимости от того, что меньше, добавляется 1 к «галочке», и выполняется другое сравнение, чтобы убедиться, что другой t ie не был создано. Если обе ловкости равны, то я хочу, чтобы он (по существу) бросил объявление ie (на основе рассматриваемой ловкости), и проигравший получает + 1.

Спасибо за ваше внимание.

РЕДАКТИРОВАТЬ: Хотя текущий ответ немного помог, я чувствую, что должен кое-что прояснить в моем коде. У меня есть то, что выше упомянуто этим битом кодирования:

characterList = []
c=int(input("How many characters in this battle? "))
for x in range(c):
        Character = createCharacter()
        characterList.append(Character)

, и поэтому все объекты Character находятся в списке вместе. Поэтому возникает вопрос, как сравнивать объекты в списке.

1 Ответ

1 голос
/ 08 марта 2020

Вы можете переопределить методы сравнения для класса символов ( lt , le , gt , ge , eq и ne маги c методы)

Например, вы можете сделать что-то вроде этого:

import random

class Character(object):
        def __init__ (self, name, speed, agility, otick, tick):
                self._name = name
                self._speed = int(speed)
                self._agility = int(agility)
                self._otick = int(otick)
                self._tick = int(tick)

        def __gt__(self,other):
            if not isinstance(other,Character):
                 return NotImplemented

            if self.agility == other.agility:
                # if they have the same values you can "roll a dice"
                return random.randint(0,100) % 2 == 0

            # Here you can check and compare the values of self and other
            return self.agility > other.agility

Так что теперь, если вы сравните с экземплярами,

player1 = Character()
player2 = Character()

# Now you can compare them using normal operator and apply logic after

if player1 > player2: #if this are the same it will make a random choice
   player1.agility +=1
else:
    player2.agility +=2 # you could add any logic
...