Как мне сделать спавн коллизионых платформ

как мне сделать спавн платформ на которые я могу прыгать самостоятельно и с которых я могу так же перепрыгивать на другие платформы и где я могу свободно двигаться, а если я выхожу за пределы текстурки платформы то я падаю вниз вот код весь:

import pygame as pg
import random

#MAIN INFORMATION
W,H = 800,500
display = pg.display.set_mode((W,H))
clock = pg.time.Clock()
FPS = 60

class Player(pg.sprite.Sprite):
    def __init__(self, x, y, file):
        pg.sprite.Sprite.__init__(self)
        self.image = pg.image.load(file)
        self.image_left = pg.transform.flip(self.image, True, False)
        self.image_right = pg.transform.flip(self.image_left, True, False)
        self.rect = self.image.get_rect(center = (x, y))
        self.dead = False
        self.dx = 0
        self.dy = 0
        self.notFall = False
        self.platform_rect = None

    def update(self, *args):
        self.rect.x += self.dx
        if not self.notFall:
            self.dy += 1
        self.rect.y += self.dy
        self.notFall = False

        if self.rect.y > args[0]:
            self.rect.y = args[0]
            self.dy = 0
            self.notFall = True

        self.dx = 0

        if self.rect.colliderect(args[2].platform_rect):
            self.rect.bottom = args[2].platform_rect.top
            self.dy = 0
            self.notFall = True

class Platform(pg.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = pg.image.load('blue.png')
        #self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.platform_rect = self.rect

class Coin(pg.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = pg.image.load('coin.png')
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y

all_sprites = pg.sprite.Group()
platforms = pg.sprite.Group()
coins = pg.sprite.Group()


human = Player(100,400, 'human.png')
all_sprites.add(human)
pltf = Player(400, 400, 'blue.png')
pltf.platform_rect = pltf.image.get_rect(center=(pltf.rect.x, pltf.rect.y))

for i in range(10):
    p = Platform(random.randint(0, W - 100), random.randint(0, H - 40))
    platforms.add(p)
for i in range(10):
    p = Platform(random.randint(0, W - 100), random.randint(0, W - 40))
    all_sprites.add(p)
    platforms.add(p)

def main():
    while True:
        for e in pg.event.get():
            if e.type == pg.QUIT:
                return

        keys = pg.key.get_pressed()

        if keys[pg.K_a]:
            human.dx = -5
            human.image = human.image_left

        if keys[pg.K_d]:
            human.dx = 5
            human.image = human.image_right

        if keys[pg.K_SPACE]:
            if human.notFall:
                human.dy = -20
                human.notFall = False

        for platform in platforms:
            x = pltf.rect.x + random.randint(0, platform.rect.width - 30)
            y = pltf.rect.y - 30
            coin = Coin(x, y)
            #coins.add(coin)
            #all_sprites.add(coin)
        all_sprites.update(H - human.rect.height, platforms, Platform)
        display.fill('white')
        display.blit(human.image, human.rect)
        display.blit(pltf.image, pltf.rect)
        all_sprites.draw(display)
        pg.display.update()
        clock.tick(FPS)

if __name__ == '__main__':
    main()

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