TypeError: Аргумент должен быть объектом стиля прямоугольника - PullRequest
3 голосов
/ 16 января 2020

Когда я пытаюсь запустить мою программу, я получаю следующую ошибку

    Traceback (most recent call last):
      File "C:\Users\terry\Thonny\Computer Science\Final Snake.py", line 134, in <module>
         pygame.draw.rect(window,pygame.Color("RED"),pygame.Rect(foodpos[0],foodpos[1],10,10))
    TypeError: Argument must be rect style object

Ошибка возникает в строке 134 моего кода. Вот код, который был использован, подробные ответы приветствуются, так как я довольно новичок в Pygame

    while True:
        for event in pygame.event.get():

            #------------------------- quits the game
            if event.type == pygame.QUIT:
               game_over();
            #-------------------------

            #------------------------- movement of the snake
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RIGHT:
                    snake.change_dir_to("RIGHT")
                if event.key == pygame.K_LEFT:
                    snake.change_dir_to("LEFT")
                if event.key == pygame.K_RIGHT:
                    snake.change_dir_to("UP")
                if event.key == pygame.K_RIGHT:
                    snake.change_dir_to("DOWN")
            #-------------------------

        #----------------------------- adds to score if the nake eats the food
        foodpos = food_spawner.spawn_food()
        if(snake.move(foodpos)==1):
            score+=1
            food_spawner.set_food_on_screen(False)
        #------------------------------

        #------------------------------ draws the screen, the snake, and its food
        window.fill(pygame.Color("BLACK"))
        for pos in snake.get_body():
            pygame.draw.rect(window,pygame.Color("BLUE"),pygame.Rect(pos[0],pos[1],10,10))
        pygame.draw.rect(window,pygame.Color("RED"),pygame.Rect(foodpos[0],foodpos[1],10,10))
        #------------------------------

1 Ответ

0 голосов
/ 17 января 2020

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

foodpos = [ 'apple', 'pie' ]         # NOTE: strings not integers
pygame.draw.rect(window,pygame.Color("RED"),pygame.Rect(foodpos[0],foodpos[1],10,10))

Дает:

Traceback (последний вызов был последним): файл "./rect_draw.py", Ваше объяснение 38 в pygame.draw.rect (window, pygame.Color ("RED"), pygame.Rect (foodpos [0], foodpos 1 , 10,10)) TypeError: Аргумент должен быть Объект стиля прямоугольника

Объект прямоугольника Pyagme принимает 4 целых чисел в своем конструкторе. Пожалуйста, обратитесь к руководству .

Изменение содержания foodpos на целые числа:

foodpos = [ 10, 10 ]         # NOTE: integers
pygame.draw.rect(window,pygame.Color("RED"),pygame.Rect(foodpos[0],foodpos[1],10,10))

Работает нормально.

Пример кода не показывает содержимое foodpos, но независимо от того, что оно имеет, целочисленные значения решат проблему.

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