def game_play_ai(): """ This is the main mechanism of the human vs. ai game play. You need to implement this function by taking helps from the game_play_human() function. For a given board situation/state, you can call the ai function to get the next best move, like this: move = ai.get_next_move(board, turn) where the turn variable is a color 'black' or 'white', also you need to import ai module as 'import gameai as ai' at the beginning of the file. This function will be very similar to game_play_human(). # UNCOMMENT THESE TWO LINES TO TEST ON MIMIR SUBMISSION This is the main mechanism of the human vs. human game play. Use this function to write the game_play_ai() function. """ # UNCOMMENT THESE TWO LINES TO TEST ON MIMIR SUBMISSION Piece.symbols = ['b', 'w'] Piece.symbols_king = ['B', 'W'] prompt = "[{:s}'s turn] :> " print(tools.banner) # Choose the color here (my_color, opponent_color) = tools.choose_color() # Take a board of size 8x8 board = Board(8) initialize(board) # Decide on whose turn, use a variable called 'turn'. turn = my_color if my_color == 'black' else opponent_color print("Black always plays first.\n") # loop until the game is finished while not is_game_finished(board): try: # Count the pieces and assign into piece_count piece_count = count_pieces(board) print("Current board:") board.display(piece_count) # ============================================================================= # Modififications from the game_play_human # Changes starts HERE # ============================================================================= if turn == my_color: command = input(prompt.format(turn)).strip().lower() else: move = ai.get_next_move(board, turn) if type(move) == tuple: command = "move {:s} {:s}".format(move[0], move[1]) else: command = "jump {:s}".format(" ".join([b for b in move])) command = command.strip().lower() # Now decide on different commands if command == 'pass': break elif command == 'exit': break elif command == 'hints': (moves, captures) = get_hints(board, turn, True) if moves: print("You have moves:") for i, move in enumerate(moves): print("\t{:d}: {:s} --> {:s}"\ .format(i + 1, move[0], move[1])) if captures: print("You have captures:") for i, path in enumerate(captures): print("\t{:d}: {:s}".format(i + 1, str(path))) else: command = [s.strip().lower() for s in command.split()] (moves, captures) = get_hints(board, turn, True) action = None if command and command[0] == 'move' and len(command) == 3: if not captures: action = (command[1], command[2]) if action in moves: apply_move(board, action) else: raise RuntimeError(move_error) else: raise RuntimeError(hasjump_error) elif command and command[0] == 'jump' and len(command) >= 3: action = command[1:] if action in captures: apply_capture(board, action) else: raise RuntimeError(jump_error) elif command and command[0] == 'apply' and len(command) == 2: id_hint = int(command[1]) if moves and (1 <= id_hint <= len(moves)): action = moves[id_hint - 1] apply_move(board, action) elif captures and (1 <= id_hint <= len(captures)): action = captures[id_hint - 1] apply_capture(board, action) else: raise ValueError(hint_error) else: raise RuntimeError(cmd_error + tools.usage) print("\t{:s} played {:s}.".format(turn, str(action))) turn = my_color if turn == opponent_color else opponent_color except Exception as err: print("Error:", err) # The loop is over. piece_count = count_pieces(board) print("Current board:") board.display(piece_count) if command != 'pass': winner = get_winner(board) if winner != 'draw': diff = abs(piece_count[0] - piece_count[1]) print("\'{:s}\' wins by {:d}! yay!!".format(winner, diff)) else: print("This game ends in a draw.") else: winner = opponent_color if turn == my_color else my_color print("{:s} gave up! {:s} is the winner!! yay!!!".format(turn, winner))
def game_play_human(): """ This is the main mechanism of the human vs. human game play. Use this function to write the game_play_ai() function. """ # UNCOMMENT THESE TWO LINES TO TEST ON MIMIR SUBMISSION Piece.symbols = ['b', 'w'] Piece.symbols_king = ['B', 'W'] prompt = "[{:s}'s turn] :> " print(tools.banner) # Choose the color here (my_color, opponent_color) = tools.choose_color() # Take a board of size 8x8 board = Board(8) initialize(board) # Decide on whose turn, use a variable called 'turn'. turn = my_color if my_color == 'black' else opponent_color print("Black always plays first.\n") # loop until the game is finished while not is_game_finished(board): try: # Count the pieces and assign into piece_count piece_count = count_pieces(board) print("Current board:") board.display(piece_count) # Get the command from user using input command = input(prompt.format(turn)).strip().lower() # Now decide on different commands if command == 'pass': break elif command == 'exit': break elif command == 'hints': (moves, captures) = get_hints(board, turn, True) if moves: print("You have moves:") for i, move in enumerate(moves): print("\t{:d}: {:s} --> {:s}"\ .format(i + 1, move[0], move[1])) if captures: print("You have captures:") for i, path in enumerate(captures): print("\t{:d}: {:s}".format(i + 1, str(path))) else: command = [s.strip().lower() for s in command.split()] (moves, captures) = get_hints(board, turn, True) action = None if command and command[0] == 'move' and len(command) == 3: if not captures: action = (command[1], command[2]) if action in moves: apply_move(board, action) else: raise RuntimeError(move_error) else: raise RuntimeError(hasjump_error) elif command and command[0] == 'jump' and len(command) >= 3: action = command[1:] if action in captures: apply_capture(board, action) else: raise RuntimeError(jump_error) elif command and command[0] == 'apply' and len(command) == 2: id_hint = int(command[1]) if moves and (1 <= id_hint <= len(moves)): action = moves[id_hint - 1] apply_move(board, action) elif captures and (1 <= id_hint <= len(captures)): action = captures[id_hint - 1] apply_capture(board, action) else: raise ValueError(hint_error) else: raise RuntimeError(cmd_error + tools.usage) print("\t{:s} played {:s}.".format(turn, str(action))) turn = my_color if turn == opponent_color else opponent_color except Exception as err: print("Error:", err) # The loop is over. piece_count = count_pieces(board) print("Current board:") board.display(piece_count) if command != 'pass': winner = get_winner(board) if winner != 'draw': diff = abs(piece_count[0] - piece_count[1]) print("\'{:s}\' wins by {:d}! yay!!".format(winner, diff)) else: print("This game ends in a draw.") else: winner = opponent_color if turn == my_color else my_color print("{:s} gave up! {:s} is the winner!! yay!!!".format(turn, winner))