как сделать последовательное изображение спрайтов в pygame?

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

# Игра Shmup - 3 часть
# Cтолкновения и стрельба
import pygame
import random

WIDTH = 1600
HEIGHT = 800
FPS = 60

# Задаем цвета
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
YELLOW = (255, 255, 0)
BLUE2 = (0, 0, 255, 255)

# переменные 
timer_stats = 0 # таймер статистики 
ship_shield = 0# броня корабля 
ship_life_timer = 0 # секундамер для хп корабля ( жизни)
ship_life = 3#  жизни корабля 
boss_life = 100

#разное 
pygame.time.set_timer(pygame.USEREVENT, 1000)# таймер , смотреть инструкцию
sss = 3
# Создаем игру и окно
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Shmup!")
clock = pygame.time.Clock()

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((40, 50))
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        self.rect.centerx = WIDTH / 2
        self.rect.bottom = HEIGHT - 10
        self.speedx = 0

    def update(self):
        self.speedx = 0
        keystate = pygame.key.get_pressed()
        if keystate[pygame.K_LEFT]:
            self.speedx = -8
        if keystate[pygame.K_RIGHT]:
            self.speedx = 8
        self.rect.x += self.speedx
        if self.rect.right > WIDTH:
            self.rect.right = WIDTH
        if self.rect.left < 0:
            self.rect.left = 0

    def shoot(self):
        bullet = Bullet(self.rect.centerx, self.rect.top)
        all_sprites.add(bullet)
        bullets.add(bullet)

class Boss(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((70, 60))
        self.image.fill(YELLOW)
        self.rect = self.image.get_rect()
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(600,900)
        self.rect.y = random.randrange(HEIGHT - 700)
        self.speedx = random.randrange(-10 , 10)
    def update(self):
        self.rect.x += self.speedx
        if self.rect.right > WIDTH:
            self.rect.right = WIDTH
            self.speedx = random.randrange(-10 ,-1)
        if self.rect.left < 0:
            self.rect.left = 0
            self.speedx = random.randrange(1 , 10)

class HIT(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((50, 38))
        self.image.set_colorkey(BLACK)
        self.rect = self.image.get_rect()
        self.radius = 20
        pygame.draw.circle(self.image, RED, self.rect.center, self.radius, 5)
        self.rect.centerx = WIDTH / 2
        self.rect.bottom = HEIGHT - 10
        self.speedx = 0

class Mob2(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((40, 40))
        self.image.set_colorkey(BLACK)
        self.image.set_alpha(200)
        self.rect = self.image.get_rect()
        self.radius = 20
        pygame.draw.circle(self.image, GREEN, self.rect.center, self.radius, 5)
        self.rect.x = random.randrange(WIDTH - self.rect.width)
        self.rect.y = random.randrange(-100, -40)
        self.speedy = random.randrange(1, 8)
    def update(self):
        self.rect.y += self.speedy
        if self.rect.top > HEIGHT + 10:
            self.rect.x = random.randrange(WIDTH - self.rect.width)
            self.rect.y = random.randrange(-100, -40)
            self.speedy = random.randrange(1, 8)
'''
class Mob(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((20, 20))
        self.image.fill(RED)
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(WIDTH - self.rect.width)
        self.rect.y = random.randrange(-100, -40)
        self.speedy = random.randrange(1, 8)
        self.speedx = random.randrange(-3, 3)

    def update(self):
        self.rect.x += self.speedx
        self.rect.y += self.speedy
        if self.rect.top > HEIGHT + 10 or self.rect.left < -25 or self.rect.right > WIDTH + 20:
            self.rect.x = random.randrange(WIDTH - self.rect.width)
            self.rect.y = random.randrange(-100, -40)
            self.speedy = random.randrange(1, 8)
'''
class Bullet(pygame.sprite.Sprite):
    def __init__(self, x, y):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((10, 20))
        self.image.fill(YELLOW)
        self.rect = self.image.get_rect()
        self.rect.bottom = y
        self.rect.centerx = x
        self.speedy = -10

    def update(self):
        self.rect.y += self.speedy
        # убить, если он заходит за верхнюю часть экрана
        if self.rect.bottom < 0:
            self.kill()

all_sprites = pygame.sprite.Group()
mobs = pygame.sprite.Group()
bullets = pygame.sprite.Group()
player = Player()
all_sprites.add(player)
boss = Boss()
all_sprites.add(boss)
hit = HIT()
all_sprites.add(hit)
'''
for i in range(10):
    s = Mob()
    all_sprites.add(s)
    mobs.add(s)
'''
for i in range(8):
    m = Mob2()
    all_sprites.add(m)
    mobs.add(m)

# Цикл игры
running = True
while running:
    clock.tick(FPS)
    for e in pygame.event.get():#запускает таймер ,каждую секунду он считает
        if e.type == pygame.USEREVENT: # только в его границах работает таймер 
            ship_life_timer += 1
            timer_stats += 1
            #print(ship_life_timer)
            if ship_life_timer == 5:#востоновление жизни постепнно 
                ship_life_timer -= 5
                ship_life += 0.05
            if timer_stats == 7: # таймер статистики
                print("здоровье:" + str(round(ship_life,2))) 
                #print("таймер жизни :" + str(ship_life_timer))
                print("броня:" + str(ship_shield))
                print("босс хп:" + str(boss_life))
                print("mobs:" + str(mobs))
                timer_stats -= 3
                '''
                for i in range(sss):
                    s = Mob()
                    all_sprites.add(s)
                    mobs.add(s)
'''
        if e.type == pygame.QUIT:
            running = False 
        elif e.type == pygame.KEYDOWN:
            if e.key == pygame.K_SPACE:
                player.shoot()
    # Обновление
    all_sprites.update()
    # Найти все спрайты, которые сталкиваются между двумя группами.
    '''
    hits = pygame.sprite.groupcollide(mobs, bullets, True, True)
    for hit in hits:
        m = Mob()
        all_sprites.add(m)
        mobs.add(m)
    '''
    # Проверка, не ударил ли моб игрока
    #hits = pygame.sprite.spritecollide(player, mobs, False)
    hits = pygame.sprite.spritecollide(player, mobs, True)# если ударил то исчезает с экрана 
    if hits:
        #running = False
        ship_life = ship_life - 0.5 # за каждое попадание минус хп
        if ship_life <= 0: # если здоровье меньше нуля...
            running = False
    # босс 1 уровня игры
    hits = pygame.sprite.spritecollide(boss, bullets, True)# если ударил то исчезает с экрана
    if hits:
        #running = False
        boss_life = boss_life - 1 # за каждое попадание минус хп
        if boss_life <= 0: # если здоровье меньше нуля...
            running = False

    # Рендеринг
    screen.fill(BLACK)
    all_sprites.draw(screen)
    # После отрисовки всего, переворачиваем экран
    pygame.display.flip()

pygame.quit()

Ответы (0 шт):