diff --git a/src/dk/itu/mario/level/MyNewLevel.java b/src/dk/itu/mario/level/PCGLevel.java similarity index 82% rename from src/dk/itu/mario/level/MyNewLevel.java rename to src/dk/itu/mario/level/PCGLevel.java index 24a1656..3c550c5 100644 --- a/src/dk/itu/mario/level/MyNewLevel.java +++ b/src/dk/itu/mario/level/PCGLevel.java @@ -16,14 +16,14 @@ import dk.itu.mario.level.matcher.LevelArchetype; import dk.itu.mario.level.matcher.PlayerProfile; import dk.itu.mario.level.matcher.ProfileMatcher; -public class MyNewLevel extends Level { +public class PCGLevel extends Level { public enum MazeLevel { BOT, MID, TOP } public static long lastSeed; private static Random levelSeedRandom = new Random(); - + public int BLOCKS_COINS = 0; // the number of coin blocks public int BLOCKS_EMPTY = 0; // the number of empty blocks public int BLOCKS_POWER = 0; // the number of power blocks @@ -36,45 +36,54 @@ public class MyNewLevel extends Level { private int gaps; private int type; private Random random; - - public MyNewLevel(int width, int height) { + + public PCGLevel(int width, int height) { super(width, height); } - public MyNewLevel(int width, int height, long seed, int difficulty, + public PCGLevel(int width, int height, long seed, int difficulty, int type, GamePlay playerMetrics) { this(width, height); - - System.out.println("Generating level based on previous GamePlay metrics ONLY."); + + System.out + .println("Generating level based on previous GamePlay metrics ONLY."); this.dataRecorder = DataRecorder.BLANK_RECORD; - - create(seed, difficulty, type); + + generateLevel(seed, playerMetrics); } - public MyNewLevel(int width, int height, long seed, int difficulty, + public PCGLevel(int width, int height, long seed, int difficulty, int type, GamePlay playerMetrics, DataRecorder dataRecorder) { this(width, height); - - System.out.println("Generating level based on previous GamePlay AND DataRecorder metrics."); + + System.out + .println("Generating level based on previous GamePlay AND DataRecorder metrics."); this.dataRecorder = dataRecorder; - - PlayerProfile profile = ProfileMatcher.getMatchingProfile(playerMetrics, dataRecorder); - System.out.println("PlayerProfile: " + profile); - - LevelArchetype archetype = ArchetypeMatcher.getMatchingArchetype(playerMetrics, dataRecorder); - System.out.println("LevelArchetype: " + archetype); - - System.out.println("Creating level grammar"); - LevelGrammar grammar = LevelGrammarFactory.createGrammar(profile, archetype); - - System.out.println("Tuning grammar for PlayerProfile & LevelArchetype using RETE"); - grammar = GrammarTuner.tune(grammar,profile, archetype); - - System.out.println("Sample level parameters: " - + grammar.generateRandom(seed)); - create(seed, difficulty, type); + + generateLevel(seed, playerMetrics); } - + + private void generateLevel(long seed, GamePlay playerMetrics) { + + PlayerProfile profile = ProfileMatcher.getMatchingProfile( + playerMetrics, dataRecorder); + System.out.println("PlayerProfile: " + profile); + + LevelArchetype archetype = ArchetypeMatcher.getMatchingArchetype( + playerMetrics, dataRecorder); + System.out.println("LevelArchetype: " + archetype); + + System.out.println("Creating level grammar"); + LevelGrammar grammar = LevelGrammarFactory.createGrammar(profile, + archetype); + + System.out + .println("Tuning grammar for PlayerProfile & LevelArchetype using RETE"); + grammar = GrammarTuner.tune(grammar, profile, archetype); + + System.out.println("Creating level."); + } + @Override public RandomLevel clone() throws CloneNotSupportedException { @@ -100,13 +109,18 @@ public class MyNewLevel extends Level { } - public void create(long seed, int difficulty, int type) { + public void create(long seed, PlayerProfile profile, + LevelArchetype archetype, LevelGrammar grammar) { if (dataRecorder == DataRecorder.BLANK_RECORD) { - System.out.println("DataRecorder record is BLANK - using GamePlay metrics only."); + System.out + .println("DataRecorder record is BLANK - using GamePlay metrics only."); } - - this.type = type; - this.difficulty = difficulty; + + System.out.println("Sample level parameters: " + + grammar.generateRandom(seed)); + + this.type = archetype.getTypeInt(); + this.difficulty = archetype.getDifficultyLevel(); lastSeed = seed; random = new Random(seed); @@ -273,11 +287,11 @@ public class MyNewLevel extends Level { int length = random.nextInt(maxLength - 19) + 20; int soFar = 0; int next; - //MazeLevel last = MazeLevel.BOT; + // MazeLevel last = MazeLevel.BOT; class Stretch { public int len; - public MyNewLevel.MazeLevel lvl; + public PCGLevel.MazeLevel lvl; public Stretch(int lngth) { len = lngth; @@ -352,25 +366,11 @@ public class MyNewLevel extends Level { } } } - - //last = str.lvl; } return length; } - // private int buildPlatformJump(int xo, int maxLength) { - // int length = random.nextInt(maxLength + 1); - // int soFar; - // int segment; - // - // for (soFar = 0; soFar < length;) { - // int - // } - // - // return length; - // } - private int buildPipeJump(int xo, int maxLength) { int numPipes = 4; int length = numPipes * 2; @@ -434,60 +434,6 @@ public class MyNewLevel extends Level { } return length; - - // int numPipes = 4; - // int floor = height - 1 - random.nextInt(2); - // int length = numPipes * 4; - // int height; - // - // int[] pitLens = new int[numPipes]; - // int[] pipeGrad = new int[numPipes]; - // - // for (int i = 0; i < numPipes; i++) { - // pitLens[i] = random.nextInt(6) + 1; - // pipeGrad[i] = random.nextInt(4); - // - // length += pitLens[i]; - // } - // - // if (length > maxLength) { - // return 0; - // } - // - // length = 0; - // height = pipeGrad[0]; - // - // for (int i = 0; i < numPipes; i++) { - // - // height = (height == 0) ? 1 : (height < 1) ? height * -1 : height; - // - // setBlock(xo + length, floor, pits ? Level.HILL_TOP_LEFT - // : Level.GROUND); - // setBlock(xo + length + 1, floor, pits ? Level.HILL_TOP_RIGHT - // : Level.GROUND); - // - // for (int h = 0; h < height; h++) { - // setBlock(xo + length, floor - 1 - h, Level.TUBE_SIDE_LEFT); - // setBlock(xo + length + 1, floor - 1 - h, Level.TUBE_SIDE_RIGHT); - // } - // - // setBlock(xo + length, floor - 1 - height, Level.TUBE_TOP_LEFT); - // setBlock(xo + length + 1, floor - 1 - height, Level.TUBE_TOP_RIGHT); - // - // if (!pits) { - // for (int y = floor; y < pitLens[i]; y++) { - // for (int x = xo + length + 2; x < xo + length + 2 - // + pitLens[i]; x++) { - // setBlock(x, y, Level.HILL_FILL); - // } - // } - // - // length += (2 + pitLens[i]); - // height += (i == numPipes - 1) ? 0 : pipeGrad[i + 1]; - // } - // } - // - // return length; } private int buildStraight(int xo, int maxLength, boolean safe) { diff --git a/src/dk/itu/mario/level/generator/MyNewLevelGenerator.java b/src/dk/itu/mario/level/generator/PCGLevelGenerator.java similarity index 89% rename from src/dk/itu/mario/level/generator/MyNewLevelGenerator.java rename to src/dk/itu/mario/level/generator/PCGLevelGenerator.java index ef50c9a..9f9cd6c 100644 --- a/src/dk/itu/mario/level/generator/MyNewLevelGenerator.java +++ b/src/dk/itu/mario/level/generator/PCGLevelGenerator.java @@ -7,9 +7,9 @@ import dk.itu.mario.MarioInterface.LevelGenerator; import dk.itu.mario.MarioInterface.LevelInterface; import dk.itu.mario.engine.DataRecorder; import dk.itu.mario.level.Level; -import dk.itu.mario.level.MyNewLevel; +import dk.itu.mario.level.PCGLevel; -public class MyNewLevelGenerator implements +public class PCGLevelGenerator implements LevelGenerator { @Override public int generateLevelDifficulty(GamePlay playerMetrics, DataRecorder dataRecorder) { @@ -26,7 +26,7 @@ public class MyNewLevelGenerator implements @Override public LevelInterface generateLevel(GamePlay playerMetrics) { System.out.println("Generating customized level"); - LevelInterface level = new MyNewLevel(320, 15, + LevelInterface level = new PCGLevel(320, 15, new Random().nextLong(), generateLevelDifficulty(playerMetrics,DataRecorder.BLANK_RECORD), generateLevelType(playerMetrics,DataRecorder.BLANK_RECORD), playerMetrics); return level; } @@ -34,7 +34,7 @@ public class MyNewLevelGenerator implements @Override public LevelInterface generateLevel(GamePlay playerMetrics, DataRecorder dataRecorder) { System.out.println("Generating customized level"); - LevelInterface level = new MyNewLevel(320, 15, + LevelInterface level = new PCGLevel(320, 15, new Random().nextLong(), generateLevelDifficulty(playerMetrics,DataRecorder.BLANK_RECORD), generateLevelType(playerMetrics,dataRecorder), playerMetrics, dataRecorder); return level; }