PyGame продолжает падать, и я не знаю почему - PullRequest
2 голосов
/ 23 октября 2019

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

Я думал, что это информационная перегрузка, поэтому я задержал еено это все еще терпит крах. Я предполагаю, что я не использую pygame правильно или что есть команда, которую я не запускаю / работаю неправильно, но я продолжаю искать решения, и я не могу найти их. Это также первый проект, который я сделал, настолько большой, что я мог бы сделать больше неправильно, чем я думал.

pygame.init()
(width, height) = (600, 600)
screen = pygame.display.set_mode((width, height))
pygame.display.flip()
pygame.display.set_caption('kings Game')
running = True

class King(object):
    #reproduction,Food count, food distributuon, movment
    Status = 1

    def __init__(self,kfood,King_reproduction):
        self.food = kfood
        self.King_reproduction = King_reproduction

    def Charecter():

        x=50
        y=50
        width=60
        highth=60
        vel=5
        Status = 1

        pygame.draw.circle(screen,(0,0,255), (x,y), 10,)
        pygame.display.update()

        #KEYS = pygame.key.get_pressed()

        while Status == 1:
            direction = random.randrange(3)
            time.sleep(2)
            if direction == 0:  #right
                x += vel
                #time.sleep(5)
                print(direction)
            elif direction == 1:#left
                x -= vel
                #time.sleep(5)
                print(direction)
            elif direction == 2:#up
                y += vel
                #time.sleep(5)
                print(direction)
            elif direction == 3:#down
                y -= vel
                #time.sleep(5)
                print(direction)
            else:
                break
            screen.fill(0)

    def reproduction():
        pass

    def food(kfood):
        if kfood == 1:
            print('bet')
        else:
            print('nope')

class People():
    #movment, reproduction, giving king food, finding food
    def reproduction():
        pass
    def movment():
        pass
    def food():
        pass

class Food():
    #spawn
    pass

test = King.Charecter()

test

while running == True:
    pg.display.flip()
    for event in pg.event.get():
        if event.type==pg.event.QUIT:
            running = False

1 Ответ

2 голосов
/ 23 октября 2019

Изменить класс King. Сделать x, y, width, height и vel атрибутами экземпляра .
Character должен быть экземпляр Метод , которыйодин «шаг», а не бесконечный цикл while.

Обратите внимание, что цикл в Character изменяет положение объекта, но он не рисует символ или не обрабатывает события, поэтому вы не "видите" изменения объекта.
В любом случае, не стоит создавать несколько циклов приложений. Используйте игровой цикл для управления событиями и непрерывного рисования сцены.

class King(object):
    #reproduction,Food count, food distributuon, movment
    Status = 1

    def __init__(self, kfood=None, King_reproduction=None):
        self.food = kfood
        self.King_reproduction = King_reproduction
        self.x=50
        self.y=50
        self.width=60
        self.highth=60
        self.vel=5

    def Character(self, surface):

        #KEYS = pygame.key.get_pressed()
        if self.Status == 1:
            self.direction = random.randrange(4)
            if self.direction == 0:  #right
                self.x += self.vel
                print(self.direction)
            elif self.direction == 1:#left
                self.x -= self.vel
                print(self.direction)
            elif self.direction == 2:#up
                self.y += self.vel
                print(self.direction)
            elif self.direction == 3:#down
                self.y -= self.vel
                print(self.direction)

        pygame.draw.circle(surface, (0,0,255), (self.x,self.y), 10)

Создайте экземпляр King и используйте основной цикл приложения, чтобы непрерывно обновлять и соответственно рисовать объект:

test = King()

while running == True:

    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            running = False

    screen.fill(0)
    test.Character(screen)
    pygame.display.update()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...