Как сделать столкновение?

Проверяешь, если координаты квадрата больше либо равно высоты квадрата, и X находится в квадрате, то speed = -speed.
Если не понятно, спрашивай, могу скинуть код. Удачи.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Python
- +2 ещё
Python как получить данные из 1С находящейся на удаленном рабочем столе?
- 1 подписчик
- 3 минуты назад
- 2 просмотра
Нужна помощь по PYGAME. Столкновение объектов
Всем привет! Пытаюсь сделать лабиринт с 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
24.04.21 20:21:31 MSK
Обработка столкновений в pygame
Шарики летают по области экрана и сталкиваются со стенами. При столкновении со стеной шарик должен изменить направление движения. Всё хорошо, пока обрабатываются только столкновения с верхней стеной и левой стеной. Но стоит добавить обработку столкновений с нижней стеной и с правой — шарики перестают летать.
pygame.init() pygame.mixer.init() screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("My Game") clock = pygame.time.Clock() dots_sprites = pygame.sprite.Group() walls_sprites = pygame.sprite.Group() # WALLS top_wall = Wall(0, 0, WIDTH, 5) bot_wall = Wall(0, HEIGHT - 5, WIDTH-5, HEIGHT) # . right_wall = Wall(WIDTH - 5, 0, WIDTH, HEIGHT) # . left_wall = Wall(0, 0, 5, HEIGHT) walls_sprites.add(top_wall, bot_wall, left_wall, right_wall) # WALLS # DOTS dots = [Dot() for i in range(10)] for dot in dots: dots_sprites.add(dot) # DOTS running = True while running: clock.tick(FPS) for event in pygame.event.get(): # check for closing window if event.type == pygame.QUIT: running = False for dot in dots_sprites.sprites(): dot.update() if pygame.sprite.collide_rect(dot, left_wall): if isinstance(dot, Dot): dot.invert_speed_x() if pygame.sprite.collide_rect(dot, right_wall): if isinstance(dot, Dot): dot.invert_speed_x() if pygame.sprite.collide_rect(dot, top_wall): if isinstance(dot, Dot): dot.invert_speed_y() if pygame.sprite.collide_rect(dot, bot_wall): if isinstance(dot, Dot): dot.invert_speed_y() screen.fill(BLACK) dots_sprites.draw(screen), walls_sprites.draw(screen) pygame.display.flip() pygame.quit()
class Wall(pygame.sprite.Sprite): def __init__(self, x0, y0, x, y): pygame.sprite.Sprite.__init__(self) self.x0 = x0 self.y0 = y0 self.x = x self.y = y rect_width = self.x - self.x0 rect_height = self.y - self.y0 self.color = RED self.image = pygame.Surface([self.x, self.y], pygame.SRCALPHA) pygame.draw.rect(self.image, self.color, (self.x0, self.y0, rect_width, rect_height)) self.rect = self.image.get_rect()
class Dot(pygame.sprite.Sprite): def __init__(self, speed=2, mass=10, size=25): pygame.sprite.Sprite.__init__(self) self.x = random.randint(size//2, WIDTH - size//2) self.y = random.randint(size//2, HEIGHT - size//2) self.start_speed = speed self.speed_x = self.start_speed * random.choice([-1, 1]) self.speed_y = self.start_speed * random.choice([-1, 1]) self.mass = mass self.size = size self.image = pygame.Surface([self.size, self.size], pygame.SRCALPHA) pygame.draw.circle(self.image, WHITE, (size // 2, size // 2), size // 2) self.rect = self.image.get_rect() self.rect.x, self.rect.y = self.x - size // 2, self.y - size // 2 def invert_speed_x(self): self.speed_x = -self.speed_x def invert_speed_y(self): self.speed_y = -self.speed_y def update(self): self.rect.x += self.speed_x self.rect.y += self.speed_y
Программирование аркадных игр
и обучение информатике
Copyright © 2017
English version by Paul Vincent Craven
Spanish version by Antonio Rodríguez Verdugo
Russian version by Vladimir Slav
Turkish version by Güray Yildirim
Portuguese version by Armando Marques Sobrinho and Tati Carvalho
Dutch version by Frank Waegeman
Hungarian version by Nagy Attila
Finnish version by Jouko Järvenpää
French version by Franco Rossi
Korean version by Kim Zeung-Il
Chinese version by Kai Lin