Почему не работает #continue в программе? - PullRequest
0 голосов
/ 04 июля 2018

Он должен вызывать функцию events () и перезапускать весь процесс, снова отображая блок на экране, почему он не работает? Я попытался выйти из gameover (), попытался вызвать pygame.display.update (), но, похоже, ничего не получалось [Это моя первая игра на python, так что, возможно, я немного запутался в наборе кода]. Кто-нибудь может помочь мне решить проблему?

import pygame
import time

pygame.init()
global display_height
global display_width

display_height = 800
display_width = 800
class slither(object):

    def __init__(self,top):
        self.top=top
        self.x = display_height/2
        self.y = display_width/2
        self.x_change = 0
        self.y_change = 0
        self.gameOver = False
        self.gameLoop = False
        self.FPS=30
        self.brick_size=10

        self.black = (0,0,0)
        self.white = (255,255,255)
        self.red = (255,0,0)
        self.font = pygame.font.SysFont(None, 30)
        self.clock = pygame.time.Clock()


        self.events()
        self.message('',(0,0,0))
        self.gameover()



    def create_move(self, a, b):
        pygame.draw.rect(screen, self.black , [a,b,self.brick_size,self.brick_size])

    def message(self, msg, color):
        screen_text=self.font.render(msg, True, color)
        screen.blit(screen_text, [display_height/2, display_width/2])
        pygame.display.update()

    def events(self):

        while self.gameLoop == False:
            screen.fill(self.white)
            self.create_move(self.x,self.y)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self.const=True

                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_LEFT:
                        self.x_change = -self.brick_size
                        self.y_change = 0
                    elif event.key == pygame.K_RIGHT:
                        self.x_change = self.brick_size
                        self.y_change = 0
                    elif event.key == pygame.K_UP:
                        self.y_change = -self.brick_size
                        self.x_change = 0
                    elif event.key == pygame.K_DOWN:
                        self.y_change = self.brick_size
                        self.x_change = 0
            if self.x_change == -self.brick_size:
                self.x -= self.brick_size
                y=self.y
                self.create_move(self.x, y)
            elif self.x_change == self.brick_size:
                self.x += self.brick_size
                y=self.y
                self.create_move(self.x, y)
            if self.y_change == -self.brick_size:
                self.y -= self.brick_size
                x=self.x
                self.create_move(x, self.y)
            elif self.y_change == self.brick_size:
                self.y += self.brick_size
                x=self.x
                self.create_move(x, self.y)
            if self.x == display_height or self.x < 0 or self.y == display_width or self.y < 0 :
                self.gameover()

            pygame.display.update()
            self.clock.tick(30)
    def gameover(self):
        while self.gameOver == False:
            screen.fill((255, 255, 255))
            self.message('Game over, Press any to continue or W to quit ', self.black)
            for event in pygame.event.get():
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_w:
                        screen.fill(self.white)
                        self.message('Game Over, You lose', self.black)
                        time.sleep(2)
                        pygame.quit()
                        quit()
                    else:
                        self.events() #continue


screen=pygame.display.set_mode((display_height,display_width))
pygame.display.set_caption('Snake')
slither(0).events()
pygame.quit()
quit()

РЕДАКТИРОВАТЬ: Я решил, СПАСИБО.

1 Ответ

0 голосов
/ 04 июля 2018

Это все, что мне пришлось изменить. По сути, поскольку блок все еще был вне экрана, следовательно, gameover () использовался для повторного выполнения, поэтому, когда я вернул блок на экран, он работал.

else: #continue
 self.x=display_height/2
 self.y=display_width/2
 self.events()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...