Объект int не является подписным.Ошибка кортежа - PullRequest
0 голосов
/ 29 сентября 2019

Как мне решить проблему в моем коде, который генерирует TypeError?

class Player(object):
    def __init__(self, board):
        self.board = board
        self.x = 607
        self.y = 420
        self.pos = [(self.x, self.y)]

    def movement(self, x, y):
        self.x += x
        self.y += y
        self.pos = [self.x, self.y]

    def draw(self):
        for tup in self.pos:
            if (tup[0] == self.x) and (tup[1] == self.y):
                pygame.draw.circle(self.board.window, (255, 255, 0), (self.x, self.y), 8)

    def update(self):
        pygame.display.update()
Traceback (most recent call last):
   File "C:/Users/fotio_000/PycharmProjects/Pacman/main.py", line 4, in <module>
   board = Board()
   File "C:\Users\fotio_000\PycharmProjects\Pacman\Game.py", line 32, in __init__
   self.all_events()
   File "C:\Users\fotio_000\PycharmProjects\Pacman\Game.py", line 38, in all_events
   self.draw()
   File "C:\Users\fotio_000\PycharmProjects\Pacman\Game.py", line 65, in draw
   self.player.draw()
   File "C:\Users\fotio_000\PycharmProjects\Pacman\Player.py", line 18, in draw
   if (tup[0] == self.x) and (tup[1] == self.y):
TypeError: 'int' object is not subscriptable

Ответы [ 2 ]

1 голос
/ 29 сентября 2019

Зачем вам нужно несколько позиций для объектного игрока?

Int the constrictor self.pos - это список кортежей:

self.pos = [(self.x, self.y)]

, но когда выизмените его на movement это одна позиция с двумя координатами, сохраненными в списке:

self.pos = [self.x, self.y]

Именно это и вызывает ошибку.Изменение более позднего значения на self.pos = [(self.x, self.y)] решит проблему, но ...

Поскольку вы хотите нарисовать круг в позиции (self.x, self.y), нет необходимости сравнивать позицию (s) в списке к (self.x, self.y).Обратите внимание, что (self.x, self.y) всегда сохраняется в списке, так почему вы пытаетесь это проверить?
Просто нарисуйте круг в (self.x, self.y).например:

class Player(object):

    # [...]

    def draw(self):
        pygame.draw.circle(self.board.window, (255, 255, 0), (self.x, self.y), 8)
0 голосов
/ 29 сентября 2019

изменить

self.pos = [self.x, self.y]

на

self.pos = [(self.x, self.y)]

для def movement(self, x, y)

...