Графический интерфейс Pygame перестает отвечать через некоторое время (примерно через 2 с после запуска), и я действительно не могу понять, почему.Также это работало как 2 часа назад, но я, должно быть, что-то изменил, и теперь я действительно не могу вспомнить, что это было (и я не могу ctrl-z в начале).
Я попытался закомментировать все частикода в основном цикле, но ошибка все еще остается.Это говорит о том, что ошибка не в цикле симуляции (основного), но, с другой стороны, она должна быть в основном цикле, поскольку это единственный код, который выполняется во время сбоя.
Здесьосновной цикл:
def simulation(genomes, config):
global win, Clock, paddleOG, display, paddle, ball, generation
BallGenerationThreshold = 0.9
SpeedMultiplier = 1
lastBGTtext = 0
nets = []
ge = []
paddles = []
balls = []
for genome_id, genome in genomes:
genome.fitness = 0 # start with fitness level of 0
net = neat.nn.FeedForwardNetwork.create(genome, config)
nets.append(net)
ge.append(genome)
paddles.append(Paddle())
balls.append(Ball(x=randint(0, display["w"])))
print("new gen")
while len(paddles) != 0:
win.fill((33, 33, 33))
# Movement update
for ball in balls:
ball.y += ball.velocity
if len(balls) == 0 or int(balls[-1].y) + balls[-1].radius >= 0.9 * display["h"]:
balls.append(Ball(x=randint(0, display["w"])))
if int(balls[0].y) + balls[0].radius >= paddles[0].y:
for paddle in paddles:
index = paddles.index(paddle)
if paddle.x < balls[0].x < paddle.x + paddle.width: # If paddle hit ball
ge[index].fitness += 10
else:
nets.pop(index)
ge.pop(index)
paddles.pop(index)
balls.pop(0)
for paddle in paddles:
output = nets[paddles.index(paddle)].activate((paddle.x, paddle.x + paddle.width, paddle.velocity, balls[0].x, balls[0].y))
if output[0] > 0.5 and 0 < (paddle.x - paddle.velocity):
paddle.x -= paddle.velocity
if output[1] > 0.5 and (paddle.x + paddle.width + paddle.velocity) < display["w"]:
paddle.x += paddle.velocity
BallGenerationThreshold -= 0.000008
SpeedMultiplier += 0.0003
# Rendering
for ball in balls:
pygame.draw.circle(win, ball.color, (ball.x, int(ball.y)), ball.radius) # Ball
for paddle in paddles:
pygame.draw.rect(win, paddle.color, (int(paddle.x), paddle.y, paddle.width, paddle.height)) # Paddle
SMtext = f"Generation: {generation}"
SM = myfont.render(SMtext, False, (200, 200, 200))
win.blit(SM, (SMtextX, SMtextY + 30))
SMtext = f"Players: {len(paddles)}"
SM = myfont.render(SMtext, False, (200, 200, 200))
win.blit(SM, (SMtextX, SMtextY + 60))
pygame.display.flip()
Нет сообщений об ошибках, но я знаю, что скрипт выполняется даже после того, как окно перестает отвечать.
Я прошу прощения, если мне было неясно, яне привык спрашивать здесь.Я с радостью отвечу, если у вас возникнут вопросы по коду