package dk.itu.mario.level.grammar; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import java.util.Set; import java.util.TreeSet; public class LevelGrammar { private Variable start; private Map ruleMap = new HashMap(); private Set variables = new TreeSet(); public void addVariable(Variable var) { if (variables.contains(var)) { throw new IllegalArgumentException( "Grammar already contains variable: " + var); } variables.add(var); } public void addProductionRule(ProductionRule rule) { if (ruleMap.containsKey(rule.getLHS())) { throw new IllegalArgumentException( "Grammar already contains rule with LHS: " + rule.getLHS()); } ruleMap.put(rule.getLHS(), rule); } public String generateRandom(long randomSeed) { System.out.println("Generating random level parameters using seed: " + randomSeed); List startRuleRHS = getRule(getStart()).getRHS(); StringBuilder sb = new StringBuilder(); for (Variable var : startRuleRHS) { sb.append(var.toString()); } return sb.toString(); } public String generateRandom() { System.out.println("Creating new random seed for LevelGrammar"); return generateRandom(new Random().nextLong()); } public ProductionRule getRule(Variable var) { return ruleMap.get(var); } public Variable getStart() { return start; } public void setStart(Variable start) { this.start = start; } }