2017-01-18 16 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。忽略的是現在!)

正如你似乎沒有使用colorCheckWin,只取它是這樣的:

def CheckWin(self): 

有關參數進一步閱讀,閱讀this tutorial,尤其是關於函數的參數位。

+0

我這樣做,但後來這個錯誤出現: – Meg

+0

自.__ gboard.MakeMove(C,self.get_player_symbol()) AttributeError的: 'ComputerPlayer'對象沒有屬性'_ComputerPlayer__gboard' – Meg

+0

@Meg我會快速瀏覽一下,但這是一個完全不同且無關的錯誤。它應該真的有一個單獨的問題。 – tburrows13