LINUX.ORG.RU

Нужна помощь по PYGAME. Столкновение объектов

 , ,


0

1

Всем привет! Пытаюсь сделать лабиринт с 2-мя игроками. Хочу сделать так, чтобы при столкновении объектов с лабиринтом (точнее касание его стенок), игра заканчивалась. Я уже все сайты пересмотрела, не понимаю! Подскажите, пожалуйста кто в этом разбирается.

Вот код:

import pygame

pygame.init()
speed = 8
X =130
Y = 550
X1 = 253
Y1 = 550
move_up1 = False
move_down1 = False
move_right1 = False
move_left1 = False
move_up2 = False
move_down2 = False
move_right2 = False
move_left2 = False



flag_1=False
FPS = 10
flag=1
width = 800
height = 600

clock = pygame.time.Clock()
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('ЛАБИРИНТ')
my_font = pygame.font.SysFont(None, 30)
pygame.mixer.init()
pygame.mixer.music.load('sounds\\Rock.mp3')
pygame.mixer.music.set_volume(0.4)
pygame.mixer.music.play(loops=-1)
game_run=True
while game_run:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_run=False
        flag_1=True
        bg = pygame.image.load('jmg\\fona.jpg')
        screen.blit(bg, (0, 0))
        lab_img = pygame.image.load('objekt\\labirint.png')
        screen.blit(lab_img, (100, 0))
        ob_img = pygame.image.load('objekt\\obezana.png')
        screen.blit(ob_img, (X, Y))
        mush_img = pygame.image.load('objekt\\mush.png')
        screen.blit(mush_img, (X1, Y1))
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                move_left1 = True
            if event.key == pygame.K_RIGHT:
                move_right1 = True
            if event.key == pygame.K_UP:
                move_up1 = True
            if event.key == pygame.K_DOWN:
                move_down1 = True
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                move_left1 = False
            if event.key == pygame.K_RIGHT:
                move_right1 = False
            if event.key == pygame.K_UP:
                move_up1 = False
            if event.key == pygame.K_DOWN:
                move_down1 = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_a:
                move_left2 = True
            if event.key == pygame.K_w:
                move_up2 = True
            if event.key == pygame.K_s:
                move_down2 = True
            if event.key == pygame.K_d:
                move_right2 = True
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_a:
                move_left2 = False
            if event.key == pygame.K_w:
                move_up2 = False
            if event.key == pygame.K_s:
                move_down2 = False
            if event.key == pygame.K_d:
                move_right2 = False
        if move_up1:
            if Y > 0:
                Y -= speed
        if move_down1:
            if Y < height:
                Y += speed
        if move_right1:
            if X < width:
                X += speed
        if move_left1:
            if X > 0:
                X -= speed

        if move_up2:
            if Y1 > 0:
                Y1 -= speed
        if move_down2:
            if Y1 < height:
                Y1 += speed
        if move_right2:
            if X1 < width:
                X1 += speed
        if move_left2:
            if X1 > 0:
                X1 -= speed
pygame.quit()

Может, если у вас есть Pycharm сможете попробовать что-то с ним сделать.



Последнее исправление: Lisa_Lesov (всего исправлений: 3)

Перед началом кода напиши строку ```python а после последней строки кода напиши строку ```. Твой код будет гораздо читабельнее и строки не будут склеиваться. Вот например:

    if move_up2:
        if Y1 > 0:
            Y1 -= speed
    if move_down2:
        if Y1 < height:
            Y1 += speed
    if move_right2:
        if X1 < width:
            X1 += speed
    if move_left2:
        if X1 > 0:
            X1 -= speed

hummer
()

А что уже было испробовано? В приведённом коде не только нет никаких попыток обнаруживать столкновения, но даже возможность такая не просматривается.

У тебя есть (наверное) два варианта:

  • описать лабиринт в виде набора прямоугольных блоков и проверять не пересекается ли прямоугольник игрока с любым из блоков;
  • сделать из картинки с лабиринтом маску и проверять пересечения с маской.
frob ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.