Renamed MyNewLevel -> PCGLevel.
This commit is contained in:
@@ -16,7 +16,7 @@ import dk.itu.mario.level.matcher.LevelArchetype;
|
|||||||
import dk.itu.mario.level.matcher.PlayerProfile;
|
import dk.itu.mario.level.matcher.PlayerProfile;
|
||||||
import dk.itu.mario.level.matcher.ProfileMatcher;
|
import dk.itu.mario.level.matcher.ProfileMatcher;
|
||||||
|
|
||||||
public class MyNewLevel extends Level {
|
public class PCGLevel extends Level {
|
||||||
public enum MazeLevel {
|
public enum MazeLevel {
|
||||||
BOT, MID, TOP
|
BOT, MID, TOP
|
||||||
}
|
}
|
||||||
@@ -37,42 +37,51 @@ public class MyNewLevel extends Level {
|
|||||||
private int type;
|
private int type;
|
||||||
private Random random;
|
private Random random;
|
||||||
|
|
||||||
public MyNewLevel(int width, int height) {
|
public PCGLevel(int width, int height) {
|
||||||
super(width, 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) {
|
int type, GamePlay playerMetrics) {
|
||||||
this(width, height);
|
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;
|
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) {
|
int type, GamePlay playerMetrics, DataRecorder dataRecorder) {
|
||||||
this(width, height);
|
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;
|
this.dataRecorder = dataRecorder;
|
||||||
|
|
||||||
PlayerProfile profile = ProfileMatcher.getMatchingProfile(playerMetrics, dataRecorder);
|
generateLevel(seed, playerMetrics);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void generateLevel(long seed, GamePlay playerMetrics) {
|
||||||
|
|
||||||
|
PlayerProfile profile = ProfileMatcher.getMatchingProfile(
|
||||||
|
playerMetrics, dataRecorder);
|
||||||
System.out.println("PlayerProfile: " + profile);
|
System.out.println("PlayerProfile: " + profile);
|
||||||
|
|
||||||
LevelArchetype archetype = ArchetypeMatcher.getMatchingArchetype(playerMetrics, dataRecorder);
|
LevelArchetype archetype = ArchetypeMatcher.getMatchingArchetype(
|
||||||
|
playerMetrics, dataRecorder);
|
||||||
System.out.println("LevelArchetype: " + archetype);
|
System.out.println("LevelArchetype: " + archetype);
|
||||||
|
|
||||||
System.out.println("Creating level grammar");
|
System.out.println("Creating level grammar");
|
||||||
LevelGrammar grammar = LevelGrammarFactory.createGrammar(profile, archetype);
|
LevelGrammar grammar = LevelGrammarFactory.createGrammar(profile,
|
||||||
|
archetype);
|
||||||
|
|
||||||
System.out.println("Tuning grammar for PlayerProfile & LevelArchetype using RETE");
|
System.out
|
||||||
|
.println("Tuning grammar for PlayerProfile & LevelArchetype using RETE");
|
||||||
grammar = GrammarTuner.tune(grammar, profile, archetype);
|
grammar = GrammarTuner.tune(grammar, profile, archetype);
|
||||||
|
|
||||||
System.out.println("Sample level parameters: "
|
System.out.println("Creating level.");
|
||||||
+ grammar.generateRandom(seed));
|
|
||||||
create(seed, difficulty, type);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -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) {
|
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;
|
System.out.println("Sample level parameters: "
|
||||||
this.difficulty = difficulty;
|
+ grammar.generateRandom(seed));
|
||||||
|
|
||||||
|
this.type = archetype.getTypeInt();
|
||||||
|
this.difficulty = archetype.getDifficultyLevel();
|
||||||
|
|
||||||
lastSeed = seed;
|
lastSeed = seed;
|
||||||
random = new Random(seed);
|
random = new Random(seed);
|
||||||
@@ -277,7 +291,7 @@ public class MyNewLevel extends Level {
|
|||||||
|
|
||||||
class Stretch {
|
class Stretch {
|
||||||
public int len;
|
public int len;
|
||||||
public MyNewLevel.MazeLevel lvl;
|
public PCGLevel.MazeLevel lvl;
|
||||||
|
|
||||||
public Stretch(int lngth) {
|
public Stretch(int lngth) {
|
||||||
len = lngth;
|
len = lngth;
|
||||||
@@ -352,25 +366,11 @@ public class MyNewLevel extends Level {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//last = str.lvl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return length;
|
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) {
|
private int buildPipeJump(int xo, int maxLength) {
|
||||||
int numPipes = 4;
|
int numPipes = 4;
|
||||||
int length = numPipes * 2;
|
int length = numPipes * 2;
|
||||||
@@ -434,60 +434,6 @@ public class MyNewLevel extends Level {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return length;
|
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) {
|
private int buildStraight(int xo, int maxLength, boolean safe) {
|
||||||
@@ -7,9 +7,9 @@ import dk.itu.mario.MarioInterface.LevelGenerator;
|
|||||||
import dk.itu.mario.MarioInterface.LevelInterface;
|
import dk.itu.mario.MarioInterface.LevelInterface;
|
||||||
import dk.itu.mario.engine.DataRecorder;
|
import dk.itu.mario.engine.DataRecorder;
|
||||||
import dk.itu.mario.level.Level;
|
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 {
|
LevelGenerator {
|
||||||
@Override
|
@Override
|
||||||
public int generateLevelDifficulty(GamePlay playerMetrics, DataRecorder dataRecorder) {
|
public int generateLevelDifficulty(GamePlay playerMetrics, DataRecorder dataRecorder) {
|
||||||
@@ -26,7 +26,7 @@ public class MyNewLevelGenerator implements
|
|||||||
@Override
|
@Override
|
||||||
public LevelInterface generateLevel(GamePlay playerMetrics) {
|
public LevelInterface generateLevel(GamePlay playerMetrics) {
|
||||||
System.out.println("Generating customized level");
|
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);
|
new Random().nextLong(), generateLevelDifficulty(playerMetrics,DataRecorder.BLANK_RECORD), generateLevelType(playerMetrics,DataRecorder.BLANK_RECORD), playerMetrics);
|
||||||
return level;
|
return level;
|
||||||
}
|
}
|
||||||
@@ -34,7 +34,7 @@ public class MyNewLevelGenerator implements
|
|||||||
@Override
|
@Override
|
||||||
public LevelInterface generateLevel(GamePlay playerMetrics, DataRecorder dataRecorder) {
|
public LevelInterface generateLevel(GamePlay playerMetrics, DataRecorder dataRecorder) {
|
||||||
System.out.println("Generating customized level");
|
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);
|
new Random().nextLong(), generateLevelDifficulty(playerMetrics,DataRecorder.BLANK_RECORD), generateLevelType(playerMetrics,dataRecorder), playerMetrics, dataRecorder);
|
||||||
return level;
|
return level;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user