Почему моя программа Python pygame закрывается сразу после запуска? - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь сделать игру, используя Pygame.Но программа закрывается сразу после запуска.

Я следовал учебному пособию в YT и скопировал функцию точно так, как было, но все равно получил ошибку.


Вот код:

import pygame
import sys
import random as rd

pygame.init()

width = 800
height = 600

red = (255, 0, 0)
black = (0, 0, 0)
blue = (0, 0, 255)

playerPosition = [400, 500]
playerSize = 35

enemySize = 50
enemyPosition = [rd.randint(0, width - enemySize), 0]
enemySpeed = 10

screen = pygame.display.set_mode((width, height))
title = pygame.display.set_caption("Dodge Game by Ishak")


def collision(playerPosition, enemyPosition):
    playerX = playerPosition[0]  # player x coordinate
    playerY = playerPosition[1]  # player y coordinate

    enemyX = enemyPosition[0]  # enemy x coordinate
    enemyY = enemyPosition[1]  # enemy y coordinate

    if (enemyX >= playerX and enemyX < (playerX + playerSize)) or (playerX >= enemyX and playerX < (enemyX + enemySize)):
        if (enemyY >= playerY and enemyY < (playerY + playerSize)) or (playerY >= enemyY and playerY < (enemyY + enemySize)):
            return False
    return True


clock = pygame.time.Clock()

gameOver = False
# game loop
while not gameOver:

    # QUIT
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

    # keyboard
    if event.type == pygame.KEYDOWN:

        x = playerPosition[0]
        y = playerPosition[1]

        if event.key == pygame.K_RIGHT:
            x += 13
        elif event.key == pygame.K_LEFT:
            x -= 13

        playerPosition = [x, y]

    if enemyPosition[1] >= 0 and enemyPosition[1] < height:
        enemyPosition[1] += enemySpeed
    else:
        enemyPosition[0] = rd.randint(0, width - enemySize)  # sets a random postion of the enemy
        enemyPosition[1] = 0

    if collision(playerPosition, enemyPosition):
        gameOver = True

    screen.fill(black)

    pygame.draw.rect(screen, red, (playerPosition[0], playerPosition[1], playerSize, playerSize))  # player shape
    pygame.draw.rect(screen, blue, (enemyPosition[0], enemyPosition[1], enemySize, enemySize))  # enemy shape

    clock.tick(30)

    pygame.display.update()

Эта проблема возникла после того, как я добавил функцию столкновения и реализовал ее в основном игровом цикле, но я не могу понять, что с ней не так.

1 Ответ

3 голосов
/ 18 апреля 2019

Это единственное место, где я вижу, где цикл остановится:

if collision(playerPosition, enemyPosition):
        gameOver = True

Так что я бы предсказал, что у вас есть столкновение между вашим игроком и врагом, когда они появляются. Чтобы убедиться наверняка, я бы предложил напечатать позиции игрока и врага, чтобы увидеть, действительно ли они сталкиваются.

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