Python Forum
[PyGame] Spawning platforms that don't touch
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[PyGame] Spawning platforms that don't touch
#6
Example how I would handle it.
import os
import pygame
import random
from pygame.sprite import Sprite, Group, spritecollide

class Engine:
    def __init__(self, title, width, height, center=True, flags=0):
        if center:
            os.environ['SDL_VIDEO_CENTERED'] = '1'

        pygame.display.set_caption(title)
        self.surface = pygame.display.set_mode((width, height), flags)
        self.rect = self.surface.get_rect()
        self.clock = pygame.time.Clock()
        self.running = False
        self.delta = 0
        self.fps = 60

class Images:
    def __init__(self):
        self.platforms = []
        self.create_platforms()

    def create_platforms(self):
        colors = pygame.Color("orange"), pygame.Color("firebrick")
        for enum, width in enumerate(range(50, 101, 5)):
            platform = pygame.Surface((width, 10))
            platform.fill(colors[enum % 2])
            self.platforms.append(platform)

class Platform(Sprite):
    def __init__(self, image, position, anchor="topleft"):
        Sprite.__init__(self)
        self.image = image
        self.rect = image.get_rect(**{anchor: position})
        self.center = pygame.Vector2(self.rect.center)
        self.speed = 0.08

    def update(self, delta, engine):
        self.center.y += self.speed * delta
        self.rect.center = self.center

        if self.rect.y > engine.rect.bottom:
            self.kill()

def main():
    engine = Engine("Moving Platforms", 120, 400)
    platforms = Group()
    images = Images()
    countdown = 1000
    interval = 1000

    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False

        countdown -= engine.delta
        if countdown < 0 and len(platforms) < 7:
            countdown = interval
            image = random.choice(images.platforms)
            width = image.get_rect().width
            position = random.randrange(0, engine.rect.width - width), random.randrange(-60, -40)
            platform = Platform(image, position)
            if len(spritecollide(platform, platforms, False)) == 0:
                platforms.add(platform)

        platforms.update(engine.delta, engine)

        engine.surface.fill(pygame.Color("black"))
        platforms.draw(engine.surface)
        pygame.display.flip()
        engine.delta = engine.clock.tick(engine.fps)

main()
99 percent of computer problems exists between chair and keyboard.
Reply


Messages In This Thread
RE: Spawning platforms that don't touch - by Windspar - Jan-22-2020, 07:53 AM

Possibly Related Threads…
Thread Author Replies Views Last Post
  [PyGame] Timing the spawning enemies MichaelEssey 2 4,783 Aug-22-2020, 05:51 AM
Last Post: SheeppOSU
  spawning enemies in pygame Elberg 2 5,764 Mar-05-2020, 09:45 AM
Last Post: Windspar

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020