Exemple #1
0
// 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
}