private void setUpCards(){

		// set up card collections
		List<CharacterCard> characterCards = new ArrayList<CharacterCard>();
		List<WeaponCard> weaponCards = new ArrayList<WeaponCard>();
		List<RoomCard> roomCards = new ArrayList<RoomCard>();

		for (Character character : Character.values()){
			characterCards.add(new CharacterCard(character));
		}
		for (Weapon weapon : Weapon.values()){
			weaponCards.add(new WeaponCard(weapon));
		}
		for (Room room : Room.values()){
			if (room == Room.Cellar){
				// don't add the cellar to the cards!
				continue;
			}
			roomCards.add(new RoomCard(room));
		}

		// pick murderer, weapon and room
		CharacterCard murderer = characterCards.get((int) (characterCards.size()*Math.random()));
		WeaponCard murderWeapon = weaponCards.get((int) (weaponCards.size()*Math.random()));
		RoomCard murderRoom = roomCards.get((int) (roomCards.size()*Math.random()));

		murderSolution = new MurderHypothesis(murderer, murderRoom, murderWeapon);

		// remove murder cards from deck
		characterCards.remove(murderer);
		weaponCards.remove(murderWeapon);
		roomCards.remove(murderRoom);

		// distribute cards
		Set<Card> allCards = new HashSet<Card>();

		allCards.addAll(characterCards);
		allCards.addAll(weaponCards);
		allCards.addAll(roomCards);

		assert allCards.size() == 21-3; // all cards minus 3 for solution.

		// deal cards to all players!
		for (int i = 0; !allCards.isEmpty(); i++){

			// way of getting random elements from a set
			int item = new Random().nextInt(allCards.size());
			int c = 0;
			Card random = null;
			for(Card card : allCards){
			    if (c == item){
			        random = card;
			    }
			    c++;
			}

			players.get(i%players.size()).giveCard(random);
			allCards.remove(random);
		}
	}