// Play asks for input from an external source until a valid move is given. func (human *HumanAgent) Play( referee *mancala.Referee, player mancala.PlayerIndex, ) (mancala.HouseIndex, error) { move := mancala.HouseIndex(-1) var moveLine string for move == -1 { fmt.Printf("%s, make a move:\n", strings.Title(player.String())) fmt.Scanf("%s", &moveLine) fmt.Println() parsedMove, err := strconv.Atoi(moveLine) if err != nil { fmt.Println("Input must be an integer.") fmt.Println() moveLine = "" } else if _, err := referee.SimulateMove( player, mancala.HouseIndex(parsedMove), ); err != nil { fmt.Printf("Illegal move: %v.\n", err) fmt.Println() moveLine = "" move = -1 } else { move = mancala.HouseIndex(parsedMove) } } return move, nil }