2017-01-18 6 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

, 당신은 라인을 가지고

(210) 당신이 그것을 호출 할 때, 당신은

그렇다면이 같은 인수가 문자열, 정수, 또는 목록 등이 될 수 있음을

winner = gboard.CheckWin("green") 

주를 호출해야 함을 의미

def CheckWin(self, color): 

, CheckWin 메서드 내에서 CheckWin에 전달하는 매개 변수 (이 경우 "green")로 color을 참조 할 수 있습니다. 당신이 CheckWin를 호출 할 때

, 당신은 방법을 기대하고 매개 변수 각각에 대해 하나 개의 인수를 전달해야 (self 제외. 지금은 그 무시!)

당신이 CheckWin 내부 color를 사용하는 표시되지 않기 때문에, 단지 걸릴 이런 식으로 아웃 : 인수에 대한 추가 읽기를 위해

def CheckWin(self): 

는, 함수 인수에 대해 특히 조금 this tutorial를 참조하십시오. 'ComputerPlayer'

+0

나는 그것을했지만이 오류가 온다 : – Meg

+0

자기 .__ gboard.MakeMove (C, self.get_player_symbol()) AttributeError를 개체에 '_ComputerPlayer__gboard'속성이 없습니다. – Meg

+0

@Meg 빠른 모양을 보일 테지만 완전히 다른 관련없는 오류입니다. 그것은 정말로 그것에 대해 별도의 질문을 가져야합니다. – tburrows13