Added the LemmingTrap challenge.

This commit is contained in:
Marshall
2012-03-17 17:47:40 -04:00
parent 1d9eae7af0
commit 2d7507632d

View File

@@ -19,10 +19,7 @@ import dk.itu.mario.level.matcher.PlayerProfile;
import dk.itu.mario.level.matcher.ProfileMatcher;
public class PCGLevel extends Level {
public enum MazeLevel {
BOT, MID, TOP
}
public static boolean TESTING = true;
public static long lastSeed;
private static Random levelSeedRandom = new Random();
@@ -124,13 +121,33 @@ public class PCGLevel extends Level {
lastSeed = seed;
random = new Random(seed);
int length = 0;
if (TESTING) {
length = buildStraight(0, width - 64, true);
length += buildLemmingTrap(length, width - 64 - length,
SpriteTemplate.GOOMPA);
length += buildLemmingTrap(length, width - 64 - length,
SpriteTemplate.GREEN_TURTLE);
length += buildLemmingTrap(length, width - 64 - length,
SpriteTemplate.ARMORED_TURTLE);
length += buildPlatformJump(length, width - 64 - length);
length += buildMaze(length, width - 64 - length);
length += buildPipeJump(length, width - 64 - length);
// create all of the medium sections
while (length < width - 64) {
length += buildStraight(length, width - length, true);
}
}
else {
System.out.println("Generating level for component list: ");
LevelParseTree parseTree = grammar.generateRandomTree(seed, width);
List<LevelComponent> levelTemplate = parseTree.getLevelTemplate();
int length = 0;
for (LevelComponent lcomp : levelTemplate) {
LevelComponent.TYPE lctype = lcomp.getType();
System.out.println("Building for: " + lcomp);
@@ -139,13 +156,13 @@ public class PCGLevel extends Level {
length += buildStraight(length, lcomp.getEnd(), true);
break;
case PIPE_JUMP:
length += buildPipeJump(length, width-64-length);
length += buildPipeJump(length, width - 64 - length);
break;
case PLATFORM_JUMP:
length += buildPlatformJump(length, width-64-length);
length += buildPlatformJump(length, width - 64 - length);
break;
case MAZE:
length += buildMaze(length, width-64-length);
length += buildMaze(length, width - 64 - length);
break;
default:
System.out
@@ -153,6 +170,7 @@ public class PCGLevel extends Level {
+ type);
}
}
}
System.out.println("Total length built: " + length);
@@ -173,6 +191,31 @@ public class PCGLevel extends Level {
fillEndPiece(length, floor);
}
private int buildLemmingTrap(int xo, int maxLength, int enemyType) {
if (maxLength >= 14
&& (enemyType == SpriteTemplate.GOOMPA
|| enemyType == SpriteTemplate.GREEN_TURTLE || enemyType == SpriteTemplate.ARMORED_TURTLE)) {
for (int x = 0; x < 18; x++) {
if (x > 5) {
for (int y = 0; y < 5; y++) {
setBlock(xo + x, this.height - 1 - y, Level.GROUND);
}
} else {
setBlock(xo + x, this.height - 1 - ((x > 5) ? 6 : 0),
Level.GROUND);
}
if (x > 6 && x % 2 == 0) {
setSpriteTemplate(xo + x, this.height - 6,
new SpriteTemplate(enemyType, false));
}
}
return 18;
}
return 0;
}
private void fillEndPiece(int length, int floor) {
// fills the end piece
for (int x = length; x < width; x++) {
@@ -530,7 +573,7 @@ public class PCGLevel extends Level {
if (numPlatforms > 1) {
boolean found = false;
MazeLevel nextDir = MazeLevel.TOP;
LevelComponent.MazeLevel nextDir = LevelComponent.MazeLevel.TOP;
LevelComponent.PlatformLevel last;
LevelComponent.PlatformLevel next;
ArrayList<LevelComponent.PlatformLevel> jumps = new ArrayList<LevelComponent.PlatformLevel>();
@@ -547,33 +590,33 @@ public class PCGLevel extends Level {
switch (random.nextInt(5)) {
case 0:
case 1:
nextDir = MazeLevel.BOT;
nextDir = LevelComponent.MazeLevel.BOT;
break;
case 2:
case 3:
nextDir = MazeLevel.TOP;
nextDir = LevelComponent.MazeLevel.TOP;
break;
default:
nextDir = MazeLevel.MID;
nextDir = LevelComponent.MazeLevel.MID;
}
found = !((last == LevelComponent.PlatformLevel.TOP && nextDir == MazeLevel.TOP) || (last == LevelComponent.PlatformLevel.BOT && nextDir == MazeLevel.BOT));
found = !((last == LevelComponent.PlatformLevel.TOP && nextDir == LevelComponent.MazeLevel.TOP) || (last == LevelComponent.PlatformLevel.BOT && nextDir == LevelComponent.MazeLevel.BOT));
}
if ((last == LevelComponent.PlatformLevel.BOT && nextDir == MazeLevel.MID)
|| (last == LevelComponent.PlatformLevel.MID_D && nextDir == MazeLevel.BOT)) {
if ((last == LevelComponent.PlatformLevel.BOT && nextDir == LevelComponent.MazeLevel.MID)
|| (last == LevelComponent.PlatformLevel.MID_D && nextDir == LevelComponent.MazeLevel.BOT)) {
next = LevelComponent.PlatformLevel.BOT;
}
else if ((last == LevelComponent.PlatformLevel.MID_D && nextDir == MazeLevel.MID)
|| (last == LevelComponent.PlatformLevel.MID_U && nextDir == MazeLevel.BOT)
|| (last == LevelComponent.PlatformLevel.BOT && nextDir == MazeLevel.TOP)) {
else if ((last == LevelComponent.PlatformLevel.MID_D && nextDir == LevelComponent.MazeLevel.MID)
|| (last == LevelComponent.PlatformLevel.MID_U && nextDir == LevelComponent.MazeLevel.BOT)
|| (last == LevelComponent.PlatformLevel.BOT && nextDir == LevelComponent.MazeLevel.TOP)) {
next = LevelComponent.PlatformLevel.MID_D;
}
else if ((last == LevelComponent.PlatformLevel.MID_U && nextDir == MazeLevel.MID)
|| (last == LevelComponent.PlatformLevel.TOP && nextDir == MazeLevel.BOT)
|| (last == LevelComponent.PlatformLevel.MID_D && nextDir == MazeLevel.TOP)) {
else if ((last == LevelComponent.PlatformLevel.MID_U && nextDir == LevelComponent.MazeLevel.MID)
|| (last == LevelComponent.PlatformLevel.TOP && nextDir == LevelComponent.MazeLevel.BOT)
|| (last == LevelComponent.PlatformLevel.MID_D && nextDir == LevelComponent.MazeLevel.TOP)) {
next = LevelComponent.PlatformLevel.MID_U;
}
@@ -608,6 +651,9 @@ public class PCGLevel extends Level {
heightMod = 3;
}
heightMod += (random.nextBoolean() ? random.nextInt(2) : -1
* random.nextInt(2));
setBlock(xo + length, this.height - heightMod,
Level.BLOCK_EMPTY);
setBlock(xo + length + 1, this.height - heightMod,