Мне нужно сделать гонки на 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)
Рисунки\текстуры тоже могу скинуть для более детального понятия если нужно.