2017-01-18 18 views
-3

Я создал код до сих пор, и эта ошибка возникает, я не знаю, как это исправить. Может ли кто-нибудь помочь? Я начинающий программист, поэтому я не очень разбираюсь в кодировании и как исправлять ошибки.Как создать петлю для доски?

winner = gboard.CheckWin() 
TypeError: CheckWin() missing 1 required positional argument: 'color' 
>>> 

Мой код основные:

def main(): 

gboard = ConnectFourBoard() 

hp = HumanPlayer("R", gboard) 
cp = ComputerPlayer("B", gboard) 

players_1st = (hp, cp) 

winner = False 

gboard.show_board_dynamic() 

while (winner == False): 

    for p in players_1st: 
     p.play() 
     gboard.show_board_dynamic() 
     winner = gboard.CheckWin() 


     if winner == True: 
      print() 
      print('Player %s has Won!' % p.get_player_symbol()) 
      break 

main() 

игра кода:

RED = 'R' 
BLUE = 'B' 
NONE = '.' 

class ConnectFourBoard: 

    def __init__(self, cols = 7, rows = 6, requiredToWin = 4): 
     self.__space = '' 
     self.__board = [] 
     self.cols = cols 
     self.rows = rows 
     self.Win = requiredToWin 
     self.__board = [[''] * cols for i in range(rows)] 

    def MakeMove(self, col, color): 
     if self.AllowMove(col): 
      for row in range(self.rows): 
       if self.__board[row][col] != '': 
        self.__board[row-1][col] = color 
        return 
       self.__board[self.rows-1][col] = color 
     else: return 

    def AllowMove(self, col): 
     if 0 <= col < self.cols: 
      return self.__board[0][col] == '' 
     if self.__board[0][col] == '': 
      return 



    def CheckWin(self, color): 
     #Checking for horizontal win 
     for row in range(0, self.rows): 
      for col in range(0, self.cols-3): 
       if self.__board[row][col] == color and\ 
        self.__board[row][col+1] == color and\ 
        self.__board[row][col+2] == color and\ 
        self.__board[row][col+3] == color: 
        return True 

     #Checking for vertical win 
     for row in range(0, self.rows-3): 
      for col in range(0, self.cols): 
       if self.__board[row][col] == color and\ 
        self.__board[row+1][col] == color and\ 
        self.__board[row+2][col] == color and\ 
        self.__board[row+3][col] == color: 
        return True 

     #Checking for negative diagonal win 
     for row in range(0, self.rows-3): 
      for col in range(0, self.cols-3): 
       if self.__board[row][col] == color and\ 
        self.__board[row+1][col+1] == color and\ 
        self.__board[row+2][col+2] == color and\ 
        self.__board[row+3][col+3] == color: 
        return True 

     #Checking for positive diagonal win 
     for row in range(0, self.rows-3): 
      for col in range(0, self.cols): 
       if self.__board[row][col] == color and\ 
        self.__board[row+1][col-1] == color and\ 
        self.__board[row+2][col-2] == color and\ 
        self.__board[row+3][col-3] -- color: 
        return True 


    def FullBoard(self): 
     for col in range(self.rows): 
      if self.__board[0][col] == '': 
       return False 
     return True 

    def FreeSpace(self, row, col): 
     if self.__board[row][col] == "": 
      return True 
     return False 

    def show_board_dynamic(self): 
     print() 
     print("-------") 
     for i in range(len(self.__board)): 
      for j in range(len(self.__board[0])): 
       print("|", end = "") 
       print(self.__board[i][j], end = ""), 
      print("|") 
      print("-------") 
     print() 

-

class Player: 

    def __init__(self, color, board): 
     self.symbol = color 

class HumanPlayer(Player): 

    def __init__(self, color, board): 
     self.symbol = color 
     self.gboard = board 

    def get_player_symbol(self): 
     return self.symbol 

    def play(self): 
     print('Player %s turn' %self.get_player_symbol()) 
     c = int(input('Please enter column no: ')) 
     self.gboard.MakeMove(c, self.get_player_symbol()) 

import random 

class ComputerPlayer(Player): 

    def __init__(self, color, board): 
     self.symbol = color 
     self.gboard = board 

    def get_player_symbol(self): 
     return self.symbol 

    def play(self): 
     print("Player %s turn" %self.get_player_symbol()) 
     c = random.randint(0, 6) 
     self.__gboard.MakeMove(c, self.get_player_symbol()) 
+2

'CheckWin' принимает аргумент' color' но вы называете его без аргументов –

ответ

0

В вашей игре коде, у вас есть линия

def CheckWin(self, color): 

, что означает, что при вызове, вы должны назвать это что-то вроде этого

winner = gboard.CheckWin("green") 

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

Тогда, внутри метода CheckWin вы можете указать color как любой параметр, который вы передадите в CheckWin, в данном случае "green".

Когда вы звоните CheckWin, вам необходимо пройти один аргумент для каждого параметра метода ожидает (кроме self. Не обращайте внимания, что на данный момент!)

Как представляется, не использовать color внутри CheckWin, просто взять это вот так:

def CheckWin(self): 

Для дальнейшего чтения об аргументах, читайте this tutorial, особенно немного о аргументах функции.

+0

я сделал это, но потом эта ошибка возникает: – Meg

+0

самого .__ gboard.MakeMove (с, self.get_player_symbol()) AttributeError: «ComputerPlayer» объект не имеет атрибута «_ComputerPlayer__gboard» – Meg

+0

@Meg Я буду иметь быстрый взгляд, но это совершенно другая и несвязанная ошибка. У него действительно должен быть отдельный вопрос. – tburrows13

 Смежные вопросы

  • Нет связанных вопросов^_^