自动退出

时间:2018-08-31 05:33:27

标签: pygame

我试图用python编写蛇类游戏,但是输入超出边界的代码后,我的游戏会自动运行。 我不知道我的rect的坐标如何大于游戏的宽度,因为在屏幕上它们不是。我认为这是因为游戏自动退出而发生的事情。 我将在下面发布我的代码,以使其更加清晰

import pygame
from random import randint

pygame.init()

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

class Game():

    width, height = 800, 600
    screen = pygame.display.set_mode((width, height))
    pygame.display.set_caption("Second snake game.")

    def __init__(self):
        pass

game = Game()

class Player(pygame.sprite.Sprite):

    lead_x = game.width/2
    lead_y = game.height/2
    lead_x_change = 0
    lead_y_change = 0
    velocity = 0.2
    block_size = 10

    def __init__(self):
        pygame.sprite.Sprite.__init__(self)

    def draw_character(self):
        self.cube = pygame.draw.rect(game.screen, black, [self.lead_x, self.lead_y, self.block_size, self.block_size])

    def change_x_right(self):
        self.lead_x_change += -self.velocity

    def change_x_left(self):
        self.lead_x_change += self.velocity

    def change_y_up(self):
        self.lead_y_change += -self.velocity

    def change_y_down(self):
        self.lead_y_change += self.velocity

    def move_x(self):
        self.lead_x += self.lead_x_change

    def move_y(self):
        self.lead_y += self.lead_y_change

    def stop_moving_x(self):
        self.lead_x_change = 0

    def stop_moving_y(self):
        self.lead_y_change = 0

class Apple():

    lead_x = randint(100, 700)
    lead_y = randint(100, 500)
    block_size = 10


    def __init__(self):
        pass

    def spawn_apple_after_eaten(self):
        self.lead_x = randint(100, 700)
        self.lead_y = randint(100, 500)
        self.apple = pygame.draw.rect(game.screen, red, [self.lead_x, self.lead_y, self.block_size, self.block_size])

    def spawn_apple(self):
        self.apple = pygame.draw.rect(game.screen, red, [self.lead_x, self.lead_y, self.block_size, self.block_size])

apple = Apple()
player = Player()

gameExit = False

while not gameExit:

    game.screen.fill(white)
    apple.spawn_apple()

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            gameExit = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_d:
                player.change_x_left()
                player.stop_moving_y()
            if event.key == pygame.K_a:
                player.change_x_right()
                player.stop_moving_y()
            if event.key == pygame.K_w:
                player.change_y_up()
                player.stop_moving_x()
            if event.key == pygame.K_s:
                player.change_y_down()
                player.stop_moving_x()
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_w or event.key == pygame.K_s:
                player.stop_moving_y()
            if event.key == pygame.K_a or event.key == pygame.K_d:
                player.stop_moving_x()

    player.move_x()
    player.move_y()
    player.draw_character()

    if player.cube.colliderect(apple.apple):
        apple.spawn_apple_after_eaten()

    if player.lead_x + player.block_size >= game.width or player.lead_x <= game.width:
        gameExit = True

    pygame.display.update()

pygame.quit()
quit()

1 个答案:

答案 0 :(得分:2)

如果x坐标大于或等于gameExit或小于或等于True,则将game.width设置为game.width,因此始终True。条件语句的第二部分应为or player.lead_x <= 0

if player.lead_x + player.block_size >= game.width or player.lead_x <= 0:
    gameExit = True