Как создавать разные объекты со своими свойствами из одного класса в Pygame - PullRequest
0 голосов
/ 22 октября 2018

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

У меня две проблемы.Во-первых, вместо того, чтобы иметь один класс миньонов, который можно вызывать всякий раз, когда мне нужен миньон, я был вынужден создать класс для каждого миньона (класс Minion1, класс Minion2 и т. Д.), Потому что они должны иметь свои собственные координаты x, y исильные и слабые стороны, а также анимации.Они также сбрасываются, если я вызываю новый объект, используя тот же класс.Можно ли сделать это одним классом?

import pygame


class Minion1:

def __init__(self, x, y):

    self.hp = 100
    self.spd = 50
    self.str = 50

    self.walking = False

    self.x = x
    self.y = y
    self.w = 32
    self.h = 48

    self.images = pygame.image.load('images/minion1.png').convert_alpha()

    alpha = self.images.get_at((0, 0))
    self.images.set_colorkey(alpha)

    self.numImages = 4
    self.current_image = 0

    self.animation_time = 0.1
    self.current_time = 0

def update(self, dt):

    self.current_time += dt

    if self.current_time >= self.animation_time:
        self.current_time = 0

        if self.current_image >= self.numImages - 1:
            self.current_image = 0

        else:
            self.current_image += 1

    self.x -= self.velocity

def render_right(self, gameDisplay):
    gameDisplay.blit(self.images, (self.x, self.y), (self.current_image * self.w, self.h * 2, self.w, self.h))

Моя вторая проблема - отправка миньонов.Я только что написал один и тот же код для каждого миньона.Есть ли способ просто изменить номер (minion1 на minion2) и использовать меньше кода?

    send_minion(minion1.x, minion1.y, minion1.w, minion1.h, 'walk1')

    if minion1.walking:
        minion1.update(dt)
        minion1.render_right(gameDisplay)
        minion1.x += 1

    send_minion(minion2.x, minion2.y, minion2.w, minion2.h, 'walk2')

    if minion2.walking:
        minion2.update(dt)
        minion2.render_right(gameDisplay)
        minion2.x += 1
...