Мне нужно сделать гонки на Pygame) Появилось много вопросов в процессе, особенно по рандомизации спавна объектов, хотелось бы узнать у вас!)

В общем сечас сижу и думаю на моменте как рандомизировать объекты и заставить их двигаться относительно машинки, чтобы они приближались в сторону экрана и менялись в размере, в случае если игрок объехал объект, то объект уходит за экран и удаляется, или если врезался - нанесся урон или же объект разрушен, в общем много вопросов хотелось бы просто понять как что работает, можете просто написать функции с которыми мне стоит работать ибо уже много посмотрел видео, полазил на форумах, более менее понятного для себя ничего не нашел.


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


Так, покажу код вообще что я написал:

"""File RoadOfTheDead.py"""

import pygame
import controls
from car import Car
from walls import Wall

#Начало скрипта
def run():
    pygame.init()

    #Окна
    window = pygame.display.set_mode((1450, 750))
    pygame.display.set_caption("Дорога ярости!")
    screen = pygame.Surface((1450, 750))
    #Фон
    bg = pygame.image.load('image/bg.png')
    bg = pygame.transform.scale(bg, (1450,750))
    #Машинка
    car = Car(screen)
    wall = Wall(screen)

    #Цикл игры, расстановка событий
    while True:
        #Все события в controls
        controls.events(car)
        #Обновление машинки
        car.update_car()
        #Разгруженное в контролс
        controls.update(window, screen, bg, car, wall)

run()

pygame.quit()

"""File car.py"""
import pygame

class Car():

    def __init__(self,screen):
        self.screen = screen
        #Картинка машинки
        self.image = pygame.image.load('image/car.png')
        self.image = pygame.transform.scale(self.image,(320, 280))
        #Обозначение как прямоугольник
        self.rect = self.image.get_rect()
        self.screen_rect = screen.get_rect()
        #Координаты
        self.rect.centerx = self.screen_rect.centerx
        self.rect.bottom = self.screen_rect.bottom
        self.speed = 10
        #Изменение значения движения на флоат
        self.center = float (self.rect.centerx)

        self.mright = False
        self.mleft = False

    def output(self):
        #Рисовка
        self.screen.blit(self.image, self.rect)

    def update_car(self):
        #Границы и расположение машинки и её движение
        if self.mright and self.rect.right < 1280:
            self.center += 25.5
        if self.mleft and self.rect.left > 180:
            self.center -= 25.5
        #Плавное движение
        self.rect.centerx = self.center

"""File control.py"""
import pygame
import sys

def events(car):
    # Выход
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        #Движение
        elif event.type == pygame.KEYDOWN:
        #Вправо
            if event.key == pygame.K_RIGHT:
                car.mright = True
        #Влево
            elif event.key == pygame.K_LEFT:
                car.mleft = True
        elif event.type == pygame.KEYUP:
        #Вправо
            if event.key == pygame.K_RIGHT:
                car.mright = False
        #Влево
            elif event.key == pygame.K_LEFT:
                car.mleft = False

#Обновление экрана
def update(window, screen, bg, car, wall):
    # Отрисовка на экране
    window.blit(screen, (0, 0))
    screen.blit(bg, (0, 0))
    # Отрисовка машинки по координатам
    car.output()
    #Обновление и отрисовка препятствий
    wall.draw()
    # Обновление экрана
    pygame.display.update()
    pygame.display.flip()

"""File walls.py"""
import pygame

class Wall(pygame.sprite.Sprite):
    #Класс 1 объекта
    def __init__(self, screen):
        #Инициализация и координаты
        super(Wall, self).__init__()
        self.screen = screen
        self.image = pygame.image.load("image/block.png")
        self.rect = self.image.get_rect()
        #Координаты
        self.rect.x = self.rect.width
        self.rect.y = self.rect.height
        self.x = float(self.rect.x)
        self.y = float(self.rect.y)

    def draw(self):
        #Вывод на экран
        self.screen.blit(self.image, self.rect)

Рисунки\текстуры тоже могу скинуть для более детального понятия если нужно.


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