#python #pygame #collision-detection #collision
#python #pygame #обнаружение столкновений #столкновение
Вопрос:
Я играю в игру со змеями (в игре есть две змеи) с pygame, и я хочу определить, когда голова змеи сталкивается с другим телом змеи, сделайте это для обоих и для особого случая, когда обе головы сталкиваются, в настоящее время я делаю столкновение между головой змеи и другой змеейтело, оно отлично работает, если одна из змей заморожена, а другая движется, но если оба движутся, столкновение просто не работает, вот код, который перемещает змей:
new_pos = None
if direction == 'DOWN':
new_pos = (snake[0][0], snake[0][1] size)
if direction == 'UP':
new_pos = (snake[0][0], snake[0][1] - size)
if direction == 'LEFT':
new_pos = (snake[0][0] - size, snake[0][1])
if direction == 'RIGHT':
new_pos = (snake[0][0] size, snake[0][1])
if new_pos:
snake = [new_pos] snake
del snake[-1]
имейте в виду, что код, который перемещает другую змею, тот же, но snake превращается в snake2, new_pos в new_pos2 и т. Д
код столкновения:
if snake2[0] in snake[1:]:
gameOverBlue()
if snake2[0] in snake[1:]:
gameOverRed()
редактировать: я решил, что мне следует добавить код, который тоже создает змею:
#snake
size = 15
s_pos = 60
snake = [(s_pos size * 2, s_pos),(s_pos size, s_pos),(s_pos, s_pos)]
s_skin = pygame.Surface((size, size))
s_skin.fill((82,128,208))
#snake2
size2 = 15
s2_pos = 195
snake2 = [(s2_pos size2 * 2, s2_pos),(s2_pos size2, s2_pos),(s2_pos, s2_pos)]
s2_skin = pygame.Surface((size2, size2))
s2_skin.fill((208,128,82))
Комментарии:
1. Вторая проверка столкновения должна быть snake [0] в snake2 [1:]: ?
2. Также вы не проверяете наличие столкновений между головами.
3. о, хорошо, позвольте мне посмотреть, работает ли это, изменив это редактирование: тоже не работает, и я знаю, что я не проверяю столкновения лицом к лицу
Ответ №1:
Вам нужно оценить, есть ли заголовок snake
в списке snake2
, включая заголовок snake2
:
if snake[0] in snake2:
gameOverBlue()
и если глава snake2
находится в snake
:
if snake2[0] in snake:
gameOverRed()
Если вы хотите определить, сталкиваются ли головы змей, вам нужно сравнить snake[0]
и snake2[0]
отдельно:
if snake[0] == snake2[0]:
print("heads are colliding")
if snake[0] in snake2[1:]:
gameOverBlue()
if snake2[0] in snake[1:]:
gameOverRed()
Комментарии:
1. это работает, но как я могу добавить случай, когда голова сталкивается с головой?
2. @zac Я расширил ответ.