Added PlayerProfile.getProbability(LevelComponent.TYPE).

This commit is contained in:
Woody Folsom
2012-03-18 13:03:16 -04:00
parent 554e9af319
commit 0bb61eece8
4 changed files with 35 additions and 3 deletions

View File

@@ -2,7 +2,7 @@ package dk.itu.mario.level;
public class LevelComponent { public class LevelComponent {
public enum TYPE { public enum TYPE {
FLAT_HI, FLAT_LO, HI_LO, HI_PATH, LEVEL_SEGMENT, LEVEL, LO_HI, LO_PATH, PIPE_JUMP, PLATFORM_JUMP, MAZE BLOCKS, COINS, FLAT_HI, FLAT_LO, FLAT_SAFE, HI_LO, HI_PATH, LEVEL_SEGMENT, LEVEL, LO_HI, LO_PATH, MAZE, PIPE_JUMP, PLATFORM_JUMP, POWER_UP
}; };
public enum MazeLevel { public enum MazeLevel {

View File

@@ -9,6 +9,7 @@ import dk.itu.mario.MarioInterface.GamePlay;
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.engine.sprites.SpriteTemplate; import dk.itu.mario.engine.sprites.SpriteTemplate;
import dk.itu.mario.level.LevelComponent.TYPE;
import dk.itu.mario.level.grammar.LevelGrammar; import dk.itu.mario.level.grammar.LevelGrammar;
import dk.itu.mario.level.grammar.LevelGrammarFactory; import dk.itu.mario.level.grammar.LevelGrammarFactory;
import dk.itu.mario.level.grammar.LevelParseTree; import dk.itu.mario.level.grammar.LevelParseTree;
@@ -125,6 +126,9 @@ public class PCGLevel extends Level {
private void create(long seed, PlayerProfile profile, private void create(long seed, PlayerProfile profile,
LevelArchetype archetype, LevelGrammar grammar) { LevelArchetype archetype, LevelGrammar grammar) {
System.out.println("PlayerProfile.getProbability(COINS): " + profile.getProbability(TYPE.COINS));
if (dataRecorder == DataRecorder.BLANK_RECORD) { if (dataRecorder == DataRecorder.BLANK_RECORD) {
System.out System.out
.println("DataRecorder record is BLANK - using GamePlay metrics only."); .println("DataRecorder record is BLANK - using GamePlay metrics only.");

View File

@@ -1,8 +1,11 @@
package dk.itu.mario.level; package dk.itu.mario.level;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map;
import java.util.Set; import java.util.Set;
import dk.itu.mario.level.matcher.ProfileMatcher.SKILL;
public class PlayerProfile { public class PlayerProfile {
//From Bartle/Yee models of player psychology: achiever, killer, explorer, manipulator //From Bartle/Yee models of player psychology: achiever, killer, explorer, manipulator
public enum TYPE { BUMPER, COLLECTOR, RUNNER, SHOOTER, JUMPER} public enum TYPE { BUMPER, COLLECTOR, RUNNER, SHOOTER, JUMPER}
@@ -12,11 +15,20 @@ public class PlayerProfile {
private Set<LevelComponent.TYPE> enabledComponents = new HashSet<LevelComponent.TYPE>(); private Set<LevelComponent.TYPE> enabledComponents = new HashSet<LevelComponent.TYPE>();
private SKILL_LEVEL skillLevel; private SKILL_LEVEL skillLevel;
private Map<SKILL,Integer> skillVector;
private TYPE type; private TYPE type;
public PlayerProfile(SKILL_LEVEL skillLevel, TYPE type) { public PlayerProfile(SKILL_LEVEL skillLevel, TYPE type, Map<SKILL,Integer> skillVector) {
this.skillLevel = skillLevel; this.skillLevel = skillLevel;
this .type = type; this .type = type;
this.skillVector = skillVector;
for (LevelComponent.TYPE lcType: LevelComponent.TYPE.values()) {
setEnabled(lcType);
}
}
public boolean isEnabled(LevelComponent.TYPE type) {
return enabledComponents.contains(type);
} }
public SKILL_LEVEL getSkillLevel() { public SKILL_LEVEL getSkillLevel() {
@@ -45,6 +57,22 @@ public class PlayerProfile {
} }
} }
public double getProbability(LevelComponent.TYPE type) {
if (!isEnabled(type)) {
return 0.0;
}
switch (type) {
case BLOCKS:
return 0.3;
case COINS :
return 0.5;
case POWER_UP :
return 0.1;
default :
return 0.1;
}
}
public TYPE getType() { public TYPE getType() {
return type; return type;
} }

View File

@@ -140,7 +140,7 @@ public class ProfileMatcher {
System.out.println("Skill level for this " + closestMatch + " is " + skillLevel + " (based on a score of " + keyScore + " out of 100.)"); System.out.println("Skill level for this " + closestMatch + " is " + skillLevel + " (based on a score of " + keyScore + " out of 100.)");
return new PlayerProfile(skillLevel, closestMatch); return new PlayerProfile(skillLevel, closestMatch, playerProfileVector);
} }
private static int getKeyScore(Map<SKILL, Integer> playerProfileVector, PlayerProfile.TYPE playerProfileType) { private static int getKeyScore(Map<SKILL, Integer> playerProfileVector, PlayerProfile.TYPE playerProfileType) {