Example rules to enable/disable challenges (feeds fitness evaluator).
This commit is contained in:
@@ -15,3 +15,19 @@ rule "BeginnerJumper"
|
||||
System.out.println("PlayerProfile indicates Beginner (or better) Jumper. Pipe challenge enabled!"); // consequence
|
||||
playerProfile.setEnabled(LevelComponent.TYPE.PIPE_JUMP);
|
||||
end
|
||||
|
||||
rule "NoviceRunner"
|
||||
when
|
||||
playerProfile : PlayerProfile( runSkill <= 20 ) // condition
|
||||
then
|
||||
System.out.println("PlayerProfile indicates NoviceRunner. Disabling Maze challenge."); // consequence
|
||||
playerProfile.setDisabled(LevelComponent.TYPE.MAZE);
|
||||
end
|
||||
|
||||
rule "BeginnerRunner"
|
||||
when
|
||||
playerProfile : PlayerProfile( runSkill > 20 ) // condition
|
||||
then
|
||||
System.out.println("PlayerProfile indicates Beginner (or better) Runner. Maze challenge enabled!"); // consequence
|
||||
playerProfile.setEnabled(LevelComponent.TYPE.MAZE);
|
||||
end
|
||||
@@ -8,7 +8,23 @@ public class FitnessEvaluator {
|
||||
public static boolean isFit(LevelParseTree parseTree, PlayerProfile playerProfile, LevelArchetype levelArchetype) {
|
||||
System.out.println("Evaluating LevelParseTree for fitness");
|
||||
List<LevelComponent> levelTemplate = parseTree.getLevelTemplate();
|
||||
//a good level has 8-16 components, plus some additional complexity depending on the player's skill level
|
||||
return levelTemplate.size() > 9 && levelTemplate.size() < 25;
|
||||
//a good level has 8-24 components, plus some additional complexity depending on the player's skill level
|
||||
|
||||
if (levelTemplate.size() < 8) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (levelTemplate.size() > 24) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (LevelComponent lc : levelTemplate) {
|
||||
if (!playerProfile.isEnabled(lc.getType())) {
|
||||
System.out.println("Level is not fit: " + lc.getType() + " is not enabled.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1110,7 +1110,7 @@ public class PCGLevel extends Level {
|
||||
System.out.println("Generating level for component list: ");
|
||||
LevelParseTree parseTree = grammar.generateRandomTree(seed, width);
|
||||
|
||||
int MAX_REGENS = 10;
|
||||
int MAX_REGENS = 30;
|
||||
int nRegens = 0;
|
||||
while (!FitnessEvaluator.isFit(parseTree, profile, archetype)
|
||||
&& nRegens < MAX_REGENS) {
|
||||
@@ -1120,13 +1120,18 @@ public class PCGLevel extends Level {
|
||||
nRegens++;
|
||||
}
|
||||
|
||||
List<LevelComponent> levelTemplate = parseTree.getLevelTemplate();
|
||||
|
||||
if (nRegens == MAX_REGENS) {
|
||||
System.out.println("Failed to generate a fit level after "
|
||||
+ nRegens + " attempts. Proceeding with unfit level.");
|
||||
} else {
|
||||
System.out.println("Found fit level:");
|
||||
for (LevelComponent lc : levelTemplate) {
|
||||
System.out.println(lc);
|
||||
}
|
||||
}
|
||||
|
||||
List<LevelComponent> levelTemplate = parseTree.getLevelTemplate();
|
||||
|
||||
for (LevelComponent lcomp : levelTemplate) {
|
||||
LevelComponent.TYPE lctype = lcomp.getType();
|
||||
System.out.println("Building for: " + lcomp);
|
||||
@@ -1162,7 +1167,6 @@ public class PCGLevel extends Level {
|
||||
break;
|
||||
case POWER_UP :
|
||||
length += buildFreebie(length, width - 64 - length);
|
||||
//length += buildStraight(length, lcomp.getEnd(), true);
|
||||
break;
|
||||
case SINGLE_PIT :
|
||||
length += buildSinglePit(length, width - 64 - length);
|
||||
|
||||
@@ -52,33 +52,26 @@ public class PlayerProfile {
|
||||
return skillLevel;
|
||||
}
|
||||
|
||||
public int getBumpSkill() {
|
||||
return skillVector.get(SKILL.BUMP);
|
||||
}
|
||||
public int getCollectSkill() {
|
||||
return skillVector.get(SKILL.COLLECT);
|
||||
}
|
||||
public int getJumpSkill() {
|
||||
switch (type) {
|
||||
case JUMPER:
|
||||
switch (skillLevel) {
|
||||
case NOVICE:
|
||||
return 20;
|
||||
case BEGINNER:
|
||||
return 40;
|
||||
case COMPETENT:
|
||||
return 60;
|
||||
case PROFICIENT:
|
||||
return 80;
|
||||
case EXPERT:
|
||||
return 100;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return skillVector.get(SKILL.JUMP);
|
||||
}
|
||||
public int getRunSkill() {
|
||||
return skillVector.get(SKILL.RUN);
|
||||
}
|
||||
public int getShootSkill() {
|
||||
return skillVector.get(SKILL.SHOOT);
|
||||
}
|
||||
public int getStompSkill() {
|
||||
return skillVector.get(SKILL.STOMP);
|
||||
}
|
||||
|
||||
public double getProbability(ChallengeRewardType crt) {
|
||||
// if (!isEnabled(type)) {
|
||||
// return 0.0;
|
||||
// }
|
||||
|
||||
switch (crt) {
|
||||
case GAP:
|
||||
return Math.min(.5, (.5) * (skillVector.get(SKILL.JUMP) / 100.0)
|
||||
|
||||
Reference in New Issue
Block a user