Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Как исправить ошибку в отслеживании столкновения с врагами в игре на pygame? [RSS Feed]

#1 Март 28, 2021 19:10:15

ViRuss08
Зарегистрирован: 2021-01-23
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Как исправить ошибку в отслеживании столкновения с врагами в игре на pygame?

Я создаю игрушку, думал вроде бы настроил столкновение игрока с врагами. Но когда очередной раз запускал чтобы проверить не ошибся ли при работе с музыкой, узнал что сталкиваться с врагом я могу только с левой его стороны. Пробовал исправить, но, смерть защитывается только подходя к врагу слева.

 def pause():
    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, (480, 250)) # Отрисовка надписи паузы
        screen1.blit(pause1, (180, 350)) # Отрисовка надписи паузы
    else:
        screen.set_alpha(255)
def otladka():
    if cord == True: # Вывод строк в экран отладки
        string1 = myfont.render('Игрок: X '+ str(x) + ' Y ' + str(y), 0, (30,20,60)) # Строки экрана отладки
        string2 = myfont.render('Враг(и) в зоне видимости: X: ' + str(sx) + ' Y: ' + str(sy) + ' X1: ' + str(sx1) + ' Y1: ' + str(sy1), 0, (30,20,60))
        string5 = myfont.render('Координаты мышки в окне: ' + str(a), 0, (30,20,60))
        string6 = myfont.render('Кол-во FPS: ' + str(fps), 0, (30,20,60))
        screen.blit(string2, (0, 50))
        screen.blit(string1, (0, 30))
        screen.blit(string5, (0, 10))
        screen.blit(string6, (0, 90))
fu = input()
#from menu import menu
import pygame as pg
import random
import time
pg.init() # импортируем библиотеку для игрушки
win = pg.display.set_mode((1200, 700)) # Создвние главного окна программы
screen = pg.Surface((1200, 700)) # Втоой слой
screen1 = pg.Surface((1200, 700)) # Третий слой
pg.display.set_caption('game')  #Создание окна "GAME"
width = 100 # Ширина
height = 100 # Высота
x = 600 # Позиция Y Игрока
y = 400 # Позиция X игрока
speed = 30 # Скорость игрока
spd = 10 # Скорость врага
sy = -100 # Позиция Y врага
sx = 100 # Позиция X врага
spd1 = 10 # Скорость врага1
sy1 = -60 # Позиция Y врага1
sx1 = 350 # Позиция X врага1
myfont = pg.font.SysFont("monospace", 20) # Системный шрифт в отладчике, выставленный на размер 15
myfont1 = pg.font.SysFont("arial", 50) # Системный шрифт в паузе, выставленный на размер 50
clock = pg.time.Clock() #Для обозначения фпс
fps = 60
time1 = 0
m = False
death = False # Смерть выключена
cord = False # Экран отладки выключен
run = True # Цикл включен
paused = True # Пауза выключена
record = False
r1 = False
r2 = False
rn = False
sound1 = pg.mixer.Sound('C:\\Users\Юрий\Desktop\python\MyGame\m.wav')
soundlose = pg.mixer.Sound('C:\\Users\Юрий\Desktop\python\MyGame\lose.wav')
sound1.play(-1)
while run: # Главный цикл игры
    pg.time.delay(20)
    a =  pg.mouse.get_pos()
    for event in pg.event.get():
        if event.type == pg.QUIT:
            run = False # Разрешает завершение программы через крестик
        keys = pg.key.get_pressed() # Для регистрации клавиш
        win.blit(screen1, (0, 0)) # Включение слоя скрин1  
    if death == False:
        if sx >= x and sx <= x + 100 and sy >= y and sy <= y + 100:
            death = True
            r1 = True
        if sx1 >= x and sx1 <= x + 100 and sy1 >= y and sy1 <= y + 100:
            death = True
            r1 = True
    pause()
    if keys[pg.K_RETURN]: # Выключение паузы
        paused = False
    if keys[pg.K_ESCAPE]: # Включение паузы
        paused = True
    if keys[pg.K_TAB]: # Включение паузы
        run = False
    if paused == False:
        time1 += 0.030
        #if rn == False:
            #spd = random.randint(10, 40)# Бесконечное движение врага вниз
        sy += spd # Бесконечное движение врага вниз
        if sy >= 700:
            sy = random.randint(-10, 0) # Позиция Y врага
            sx = random.randint(0, 900) # Позиция X врага
        #if rn == False:
            #spd1 = random.randint(10, 40)
        sy1 += spd1 # Бесконечное движение врага вниз
        if sy1 >= 700:
            sy1 = random.randint(-20, 0) # Позиция Y врага 1
            sx1 = random.randint(0, 900) # Позиция X врага 1
        if keys[pg.K_d]: # Движение вправо по клавише D  
            x += speed
            if x > 1050:
                x = 1050
        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
    
    string3 = myfont.render('Вы проигали!', 0, (30,20,60))
    string4 = myfont.render('Вы пока не прогирали!', 0, (30,20,60))
    screen.fill((0, 255, 0)) #Заливка 2 слоя
    if run == True:
        p_time = myfont.render(str(time1), 10, (30, 20, 60))
        screen.blit(p_time, (1130, 1)) # Отрисовка надписи времени
        p_time1 = myfont.render(" Секунд", 10, (30, 20, 60))
        screen.blit(p_time1, (1115, 20)) # Отрисовка надписи времени
    otladka()
    
    if death == True:
        #run = False
        record = True
        screen.blit(string3, (0, 70)) # Если умер
        if r1 == True:
            soundlose.play(0)
            r1 == False
        if record == True:
            if fu == "2":
                f = open('Результаты.txt', 'a')
                f.write('{' + "Fred " + str(time1)  + '},')
                f.close
                record = False
                print('{' + "Fred " + str(time1)  + '},')
            if fu == "1":
                f = open('Результаты.txt', 'a')
                f.write('{' + "ViR " + str(time1)  + '},')
                f.close
                record = False
                print('{' + "ViR " + str(time1)  + '},')
            else:
                f = open('Результаты.txt', 'a')
                f.write('{' + fu + " " + str(time1)  + '},')
                f.close
                record = False
                print('{' + fu + " " + str(time1)  + '},')
        death = False
    else:
        screen.blit(string4, (0, 70)) # Если жив
    
    pg.draw.rect(screen, (60,200,50), (sx,sy,width,height)) #враг
    pg.draw.rect(screen, (30,10,70), (sx1,sy1,width,height)) #враг 1
    pg.draw.rect(screen, (60,50,50), (x,y,width,height)) #игрок
    win.blit(screen, (0, 0)) 
    pg.display.update() # Обновление экрана
    clock.tick(fps) # Фпс = 60
pg.quit() 

Я хз что делать формула столкновения выделена жирным шрифтом.
Я питонист начинающий на код не ругайтесь.

Офлайн

#2 Март 29, 2021 08:06:15

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4065
Репутация: +  247  -
Профиль   Отправить e-mail  

Как исправить ошибку в отслеживании столкновения с врагами в игре на pygame?

Не дублируйте темы. Лучше от этого не станет.



Офлайн

  • Начало
  • » GUI
  • » Как исправить ошибку в отслеживании столкновения с врагами в игре на pygame?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version