public void deal() {
		if (players.size() == 0)
			return;

		List<Card> deck = new LinkedList<Card>(cards); // duplicate the cards list for dealing
		Collections.shuffle(deck);

		Card person = null;
		Card weapon = null;
		Card room = null;
		
		int i = 0;
		while (deck.size() > 0) {
			Card card = deck.remove(0); // the deck is shuffled, so just remove the first card

			if (card.getType() == CardType.PERSON && person == null) {
				person = card;
				continue;
			}
			else if (card.getType() == CardType.WEAPON && weapon == null) {
				weapon = card;
				continue;
			}
			else if (card.getType() == CardType.ROOM && room == null) {
				room = card;
				continue;
			}
			
			players.get(i).giveCard(card);

			i = (i + 1) % players.size();
		}
		
		solution = new CardSet(person, weapon, room);
	}