private void playTurn(Player player) {
		List<Choice> choices = new ArrayList<>();

		player.setHasMoved(false);

		for (GameComponent g : gameComponents) {
			g.addChoices(player, choices);
		}

		if (!choices.isEmpty()) {
			Choice choice = player.presentChoices(choices);
			choice.choose(player);
			choice.execute(player);
			player.setLastChoice(choice);
		}

		choices.clear();

		if (player.hasMoved()) {
			for (GameComponent g : gameComponents) {
				g.addPostMoveChoices(player, choices);
			}
		}

		if (!choices.isEmpty()) {
			Choice choice = player.presentChoices(choices);
			choice.choose(player);
			choice.execute(player);
		}

		for (GameComponent g : gameComponents) {
			g.postTurn(player);
		}
	}