Rogue101/src/inf101/v18/util/generators/GridGenerator.java
Anya Helene Bagge 6c2103c9ca initial import
2018-02-28 10:22:33 +01:00

81 lines
2.2 KiB
Java

package inf101.v18.util.generators;
import inf101.v18.grid.IGrid;
import inf101.v18.grid.MyGrid;
import inf101.v18.util.IGenerator;
import java.util.Random;
public class GridGenerator<T> extends AbstractGenerator<IGrid<T>> {
/**
* Generator for the width of a random grid
*/
private final IGenerator<Integer> widthGenerator;
/**
* Generator for the height of a random grid
*/
private final IGenerator<Integer> heightGenerator;
/**
* Generator for one element of a random grid
*/
private final IGenerator<T> elementGenerator;
/**
* Generator for random 2D grids. Each dimension will be from 1 to 100.
*
* @param elementGenerator
* Generator for the elements
*/
public GridGenerator(IGenerator<T> elementGenerator) {
this.elementGenerator = elementGenerator;
this.widthGenerator = new IntGenerator(1, 100);
this.heightGenerator = new IntGenerator(1, 100);
}
/**
* Generator for random 2D grids using the supplied generators to generate width
* and height.
*
* @param elementGenerator
* Generator for the elements
* @param widthGenerator
* Should only generate positive numbers
* @param heightGenerator
* Should only generate positive numbers
*/
public GridGenerator(IGenerator<T> elementGenerator, IGenerator<Integer> widthGenerator,
IGenerator<Integer> heightGenerator) {
this.elementGenerator = elementGenerator;
this.widthGenerator = widthGenerator;
this.heightGenerator = heightGenerator;
}
/**
* Generator for random 2D grids with the given max dimensions.
*
* @param elementGenerator
* Generator for the elements
* @param maxWidth
* @param maxHeight
*/
public GridGenerator(IGenerator<T> elementGenerator, int maxWidth, int maxHeight) {
if (maxWidth < 1 || maxHeight < 1) {
throw new IllegalArgumentException("Width and height must be 1 or greater");
}
this.elementGenerator = elementGenerator;
this.widthGenerator = new IntGenerator(1, maxWidth);
this.heightGenerator = new IntGenerator(1, maxHeight);
}
@Override
public IGrid<T> generate(Random r) {
int w = widthGenerator.generate(r);
int h = heightGenerator.generate(r);
IGrid<T> grid = new MyGrid<>(w, h, (l) -> elementGenerator.generate(r));
return grid;
}
}