def wait_for_move(prevboard: Board, state: State, expected_move): pboard = prevboard board = state.board() while True: d, diffs = pboard.diff(board) if d == 1: dr, dc = diffs[0] if pboard(dr, dc) != 0: raise MoveError("You can\'t put sign on busy field") if board(dr, dc) != expected_move: raise MoveError("It's not your sign") return dr, dc elif d > 1: raise MoveError("You can do only one move") pboard = board board = state.board()
def move(self, state: State, opponent): board = state.board() self.say("Now it's my turn! You will lose!") movement = optimum_move(board, opponent.symbol, self.symbol, self.symbol).index r, c = movement self.say("Please put {0} in {1} row and {2} column".format( symbol_name(self.symbol), number_name(r+1), number_name(c + 1))) try: dr, dc = wait_for_move(board, state, self.symbol) if dr != r or dc != c: raise MoveError("Sign was putted not in requested place") except MoveError as e: self.say("You tried to lie me. I won't play with you, because {0}".format(e)) raise MoveError("Computer move error") self.say("Thank you")
def move(self, state: State, opponent: Player): correct_input = False board = state.board() while not correct_input: movement = input() if len(movement) > 1: raise TypeError("Wrong input!\n") if ord(movement) < 48 or ord(movement) > 56: raise TypeError("Wrong input!\n") movement = int(movement, 10) if board(movement // len(board), movement % len(board)) != 0: print("This field is busy!\nWrite correct number of field.\n") print(state) else: correct_input = True state.move(movement // len(board), movement % len(board), self.symbol)
def move(self, state: State, opponent: Player): movement = optimum_move(state.board(), opponent.symbol, self.symbol, self.symbol).index r, c = movement state.move(r, c, self.symbol)
def move(self, state: State, opponent): board = state.board() print("Waiting for {0} move".format(self.name)) wait_for_move(board, state, self.symbol) print("{0} has done a move".format(self.name))