public <T extends ICreature> Collection<T> createCreatures(IEnvironment env, int count, 
								IColorStrategy colorStrategy, Constructor<T> constructor) {
		Collection<T> creatures = new ArrayList<T>();		
		Dimension s = env.getSize();		
		for (int i=0; i<count; i++) {	
			// X coordinate
			double x = (rand.nextDouble() * s.getWidth()) - s.getWidth() / 2;
			// Y coordinate
			double y = (rand.nextDouble() * s.getHeight()) - s.getHeight() / 2;
			// direction
			double direction = (rand.nextDouble() * 2 * Math.PI);
			// speed
			int speed = (int) (rand.nextDouble() * maxSpeed);			
			T creature = null;
			try {
				creature = constructor.newInstance(env, new Point2D.Double(x,y), speed, direction, colorStrategy.getColor());
			} catch (Exception e) {
				logger.info("calling constructor " + constructor + " failed with exception " + e.getLocalizedMessage());
				e.printStackTrace();
			}
			creatures.add(creature);
		}		
		return creatures;
	}