Я пытался изучить основы PyGame, поэтому я пытался сделать очень простую игру. Игра (должна) состоять из красного квадрата, который перемещается и проигрывает, если попадает в один из синих квадратов, падающих с неба. Все работает правильно, кроме детектора столкновений, который ничего не обнаруживает. Может кто-нибудь мне помочь? Вот код:
import pygame as pg
import sys
import random as rd
pg.init()
winWidth = 850
winHeight = 600
red = (255, 0, 0)
blue = (0, 0, 255)
speed = 10
player_pos = [int(winWidth/2-25), winHeight-100]
enemyList = []
clock = pg.time.Clock()
win = pg.display.set_mode((winWidth, winHeight))
pg.display.set_caption('Game')
# creates the position of the enemy and returns it
def createEnemy():
enemy = [rd.randrange(0, winWidth-50, 50), 0]
return enemy
# draws an enemy in the position received
def drawEnemy(enemy_pos):
pg.draw.rect(win, blue, (enemy_pos[0], enemy_pos[1], 50, 50))
# if the enemy is inside the screen, it is moved downwards.
# else, it is deleted from the list.
def updateEnemy(enemy_pos):
if 0 <= enemy_pos[1] < winHeight:
enemy_pos[1] += speed
else:
enemyList.remove(enemy_pos)
# detects collisions
def collisionDetector(enemy):
if enemy[0] == player_pos[0] and enemy[1] >= player_pos[1] + 50 >= enemy[1] + 50:
return True
elif enemy[0] == player_pos[0] and enemy[1] >= player_pos[1] >= enemy[1] + 50:
return True
return False
while True:
# keeps 10 enemies on screen always
while len(enemyList) < 11:
enemyList.append(createEnemy())
# moves the player
for event in pg.event.get():
if event.type == pg.QUIT:
sys.exit()
if event.type == pg.KEYDOWN:
if event.key == pg.K_LEFT:
player_pos[0] -= 50
elif event.key == pg.K_RIGHT:
player_pos[0] += 50
for enemy_pos in enemyList:
updateEnemy(enemy_pos)
for enemy in enemyList:
if collisionDetector(enemy):
sys.exit()
win.fill((0, 0, 0))
pg.draw.rect(win, red, (player_pos[0], player_pos[1], 50, 50))
for enemy_pos in enemyList:
drawEnemy(enemy_pos)
clock.tick(30)
pg.display.update()