Сравните две переменные изображения в pygame

У меня есть этот метод, который при вызове меняет оружие для игрока, я хочу как-то определить, является ли текущее оружие уже новым оружием. Я пробовал с is и pygame.surface.get_at(), но это не сработало. В конце концов я выполню другое действие, когда оружие останется прежним, а оператор печати пока есть, чтобы проверить, работает ли он.

class BulletsManager:
    """The BulletsManager class manages the player bullets."""
    def __init__(self, game):
        self.game = game
        self.thunder_weapon = pygame.image.load(WEAPONS['thunderbolt'])
        self.fire_weapon = pygame.image.load(WEAPONS['firebird'])

    def change_weapon(self, player, weapon_name):
        """Change the player weapon."""
        if player == "thunderbird":
            new_weapon = pygame.image.load(WEAPONS[weapon_name])
            if new_weapon == self.thunder_weapon:
                print('New weapon is the same as the current one')
            else:
                self.thunder_weapon = new_weapon
        elif player == "phoenix":
            self.fire_weapon = pygame.image.load(WEAPONS[weapon_name])

Вы меняете изображение, чтобы знать оружие. Сохраните название оружия в атрибуте.

Rabbid76 05.04.2023 12:53
pygame.surface.get_at() это очень трудоемкая операция.
Rabbid76 05.04.2023 12:54
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
2
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел решение для решения проблемы:

class BulletsManager:
    """The BulletsManager class manages the player bullets."""
    def __init__(self, game):
        self.game = game
        self.thunder_weapon = pygame.image.load(WEAPONS['thunderbolt'])
        self.current_thunder_weapon = 'thunderbolt'

        self.fire_weapon = pygame.image.load(WEAPONS['firebird'])
        self.current_fire_weapon = 'firebird'

    def set_weapon(self, player, weapon_name):
        """Change the player weapon."""
        if player == "thunderbird":
            if weapon_name == self.current_thunder_weapon:
                print('New weapon is the same as the current one. - thunder')
            else:
                self.thunder_weapon = pygame.image.load(WEAPONS[weapon_name])
                self.current_thunder_weapon = weapon_name
        elif player == "phoenix":
            if weapon_name == self.current_fire_weapon:
                print("New weapon ins the same as the current one - fire")
            else:
                self.fire_weapon = pygame.image.load(WEAPONS[weapon_name])
                self.current_fire_weapon = weapon_name

Или с помощью словаря:

class BulletsManager:
    """The BulletsManager class manages the player bullets."""
    def __init__(self, game):
        self.game = game
        self.weapons = {
            "thunderbird": {
                "weapon": pygame.image.load(WEAPONS['thunderbolt']),
                "current": "thunderbolt"
            },
            "phoenix": {
                "weapon": pygame.image.load(WEAPONS["firebird"]),
                "current": "firebird"
            }
        }

    def set_weapon(self, player, weapon_name):
    """Change the player weapon."""
    if weapon := self.weapons.get(player):
        if weapon_name == weapon["current"]:
            print('New weapon is the same as the current one.')
        else:
            weapon["weapon"] = pygame.image.load(WEAPONS[weapon_name])
            weapon["current"] = weapon_name

Другие вопросы по теме