package ge.edu.freeuni.sdp.snake.model; import java.util.Random; /* * A base class for any populator which requires finding a random empty cell * in the universe. */ public abstract class RandomPositionPopulator implements Populator { private Random _random; private Configuration _configuration; public RandomPositionPopulator() { this(new Random()); } /* * This constructor is required to avoid randomness in tests */ public RandomPositionPopulator(Random random) { _random = random; } public RandomPositionPopulator(Random random, Configuration configuration){ _configuration = configuration; _random = random; } private Configuration getConfig() { if (_configuration==null) { return Configuration.getInstance(); } else { return _configuration; } } @Override public abstract void populate(Universe universe); /* * Finds by probing a random cell which is unoccupied */ protected Point getRandomUnocupied(Universe universe) { while (true) { Configuration config = getConfig(); int randomX = _random.nextInt(config.getSize().getWidth()); int randomY = _random.nextInt(config.getSize().getHeight()); Point candidate = new Point(randomX, randomY); if (universe.getBeingAt(candidate) == null) return candidate; } } }