Почему происходит сбой в игре? - PullRequest
0 голосов
/ 19 сентября 2019

Графический интерфейс 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()

Нет сообщений об ошибках, но я знаю, что скрипт выполняется даже после того, как окно перестает отвечать.

Я прошу прощения, если мне было неясно, яне привык спрашивать здесь.Я с радостью отвечу, если у вас возникнут вопросы по коду

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...