【问题标题】:TypeError: get_cell_value() takes 3 positional arguments but 4 were givenTypeError: get_cell_value() 接受 3 个位置参数,但给出了 4 个
【发布时间】:2020-06-27 15:08:14
【问题描述】:

我是 pygame 新手,我正在按照本教程制作一个 tictactoe 游戏:

https://www.youtube.com/watch?v=08VAdznyuSo&list=PL1P11yPQAo7pJT26yr1_cmfS1g_RX7b4d&index=5

这是我的一些代码: tictactoe.py

player = "X"


class Grid:
    def __init__(self):
        self.grid_lines = [((0, 200), (600, 200)),  # first horizontal line
                           ((0, 400), (600, 400)),  # second horizontal line
                           ((200, 0), (200, 600)),  # first vertical line
                           ((400, 0), (400, 600))]  # second vertical line
        self.grid = [[0 for x in range(3)] for y in range(3)]

    def draw(self, win):
        for line in self.grid_lines:
            pygame.draw.line(win, BLACK, line[0], line[1], 2)

    def get_cell_value(self, x, y):
        return self.grid[y][x]

    def set_cell_value(self, x, y, value):
        self.grid[y][x] = value

    def get_mouse(self, x, y, player):
        if player == "X":
            self.get_cell_value(x, y, "X")
        elif player == "O":
            self.get_cell_value(x, y, "O")

    def print_grid(self):
        for row in self.grid:
            print(row)


# game loop
running = True
grid = Grid()


while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            if pygame.mouse.get_pressed()[0]:
                pos = pygame.mouse.get_pos()
                grid.get_mouse(pos[0]//200, pos[1]//200, player)
                if player == "X":
                    player == "O"
                else:
                    player == "X"

                grid.print_grid()

    win.fill(WHITE)
    grid.draw(win)
    pygame.display.flip()

当我尝试运行它时。这个错误显示:

Traceback (most recent call last):
  File "C:/Users/NJ/PycharmProjects/pylab/tictactoe.py", line 58, in <module>
    grid.get_mouse(pos[0]//200, pos[1]//200, player)
  File "C:/Users/NJ/PycharmProjects/pylab/tictactoe.py", line 37, in get_mouse
    self.get_cell_value(x, y, "X")
TypeError: get_cell_value() takes 3 positional arguments but 4 were given

我不知道出了什么问题,代码几乎是教程中的完全相同的副本。盯着代码看了好几个小时,“反复试验”,但无法让它运行。请帮忙

【问题讨论】:

    标签: python pygame


    【解决方案1】:

    您混淆了set_cell_valueget_cell_value。在get_mouse 中,您必须调用set_cell_value 而不是get_cell_value

    class Grid:
        # [...]
    
        def get_mouse(self, x, y, player):
            if player == "X":
                self.set_cell_value(x, y, "X")
            elif player == "O":
                self.set_cell_value(x, y, "O")
    

    【讨论】:

      【解决方案2】:

      你在这里传递了一个额外的位置参数:

      self.get_cell_value(x, y, "X")

      但是只为两个位置参数提供了空间:

      get_cell_value(self, x, y)

      【讨论】:

      • 我觉得应该是self.set_cell_value()
      猜你喜欢
      • 2021-04-14
      • 2021-10-05
      • 2018-03-07
      • 1970-01-01
      • 2022-01-17
      • 2021-02-02
      • 2020-11-02
      • 1970-01-01
      • 2019-12-07
      相关资源
      最近更新 更多