Найти - Пользователи
Полная версия: Как в pygame записать отрисовку, появление куба на рандомных координатах и движение куба в функцию?
Начало » Python для новичков » Как в pygame записать отрисовку, появление куба на рандомных координатах и движение куба в функцию?
1
ViRuss08
Я делаю свою игрушку там где бежишь постоянно вперед, и укланяешься от врагов, а если ты с ними столкнешься то проиграешь. Это лишь сам уровень игры, функция menu() отвечает за меню из которого уже попадаешь на уровень, но не суть.
Я вот задался задачей добавить рандомное появление врагов так, чтобы между ними можно было пройти(ну например запретить спавниться стеной, изза чего запарывать весь уровень), и чтобы не спавнились друг в друге, чтобы двигались постоянно вниз и чтобы это все вызывалось функцией.
Ниже скинул код, в котором запускается игра, отрисовывается два куба(один игрок, другой враг), игрок движеться влево вправо по клавишам ad, враг движеться вниз постоянно. Еще настроил паузу, и экран отладки на котором показывает положение игрока, умер он или нет(Если его корды совпали с вражескими то игрок погиб), и по идее положение всех врагов в зоне видимости.

 from menu import menu
import pygame as pg
import random
#menu() # Вызов 
pg.init() # импортируем библиотеку для игрушки
win = pg.display.set_mode((900, 600)) # Создвние главного окна программы
screen = pg.Surface((900, 600)) # Втоой слой
screen1 = pg.Surface((900, 600)) # Третий слой
pg.display.set_caption('game')  #Создание окна "GAME"
width = 100 # Ширина
height = 100 # Высота
x = 600 # Позиция Y Игрока
y = 400 # Позиция X игрока
speed = 20 # Скорость игрока
spd = 20 # Скорость врага
sy = 0 # Позиция Y врага
sx = 600
myfont = pg.font.SysFont("monospace", 15) # Системный шрифт в отладчике, выставленный на размер 15
myfont1 = pg.font.SysFont("arial", 50) # Системный шрифт в паузе, выставленный на размер 50
clock = pg.time.Clock() #Для обозначения фпс
death = False # Смерть выключена
cord = False # Экран отладки выключен
run = True # Цикл включен
paused = False # Пауза выключена
while run: # Главный цикл игры
    pg.time.delay(20)
    #a =  pg.mouse.get_pos()
    #print(a)
    for event in pg.event.get():
        if event.type == pg.QUIT:
            run = False # Разрешает завершение программы через крестик
        keys = pg.key.get_pressed() # Для регистрации клавиш
    if keys[pg.K_RETURN]: # Выключение паузы
        paused = False
    if keys[pg.K_ESCAPE]: # Включение паузы
        paused = True
    if paused == False:
        sy += spd # Бесконечное движение врага вниз
        if sy == 700:
            sy = 0
            sx = random.uniform(0, 900) # Позиция X врага,
        if keys[pg.K_d]: # Движение вправо по клавише D  
            x += speed
            if x > 730:
                x = 730
        if keys[pg.K_a]: # Движение влево по клавише A
            x -= speed   
            if x < 80:
                x = 70
        if keys[pg.K_g] and cord == False: # Включатель экрана отладки
            cord = True
        if keys[pg.K_h] and cord == True: # Выключатель экрана отладки
            cord = False
    
        if x == sx and y == sy:
            print("GAME OVER") # Столкновение игрока и врага
            death = True
    screen.fill((0, 255, 0)) #Заливка 2 слоя
    if paused == True:
        pause = myfont1.render('ПАУЗА!', 10, (200, 200, 200)) # Строки паузы
        pause1 = myfont1.render("Чтобы продолжить жмите ENTER", 10, (200, 200, 200))
        screen.set_alpha(100) # Прозрачность слоя выставленна на 100
        win.blit(screen1, (0, 0)) # Включение слоя скрин1
        screen1.blit(pause, (350, 250)) # Отрисовка надписи паузы
        screen1.blit(pause1, (50, 350)) # Отрисовка надписи паузы
    else:
        screen.set_alpha(255)
        
    if cord == True: # Вывод строк в экран отладки
        string1 = myfont.render('Игрок: X '+ str(x) + ' Y ' + str(y), 0, (255, 0, 0)) # Строки экрана отладки
        string2 = myfont.render('Враг(и) в зоне видимости: X' + str(sx) + ' Y' + str(sy), 0, (255, 0, 0))
        string3 = myfont.render('Вы проигали!', 0, (255, 0, 0))
        string4 = myfont.render('Вы пока не прогирали!', 0, (255, 0, 0))
        screen.blit(string1, (0, 30))
        screen.blit(string2, (0, 10))
        if death == True:
            screen.blit(string3, (0, 50)) # Если умер
        else:
            screen.blit(string4, (0, 50)) # Если жив
    
    pg.draw.rect(screen, (60,200,50), (sx,sy,width,height)) #враг
    pg.draw.rect(screen, (60,50,50), (x,y,width,height)) #игрок
    win.blit(screen, (0, 0)) 
    pg.display.update() # Обновление экрана
    clock.tick(60) # Фпс = 60
pg.quit()  

код меняю почти каждый день, т.к. работаю в реал тайм.

Я думаю что противники должны спавниться не совсем рандомно, а структурно(ну тоесть заготовленная структура, там где враги появляются так как записанно изначально. Но эта структура не может спавниться с другой такой структурой, или вот с этой может).
Вот и думаю как это реализовать?(Если будете кидать код, то кидайте свой код уже внутри моего, мне новичку будет трудно новый код пихать)
ViRuss08
На пару лишних пробелов в начале первой строки не обращайте внимание, это баг какой-то.
Наверно прошу много всего сразу, сорян за лишние головные боли
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB