- Implemented the reward weighting.

- Fixed a balance issue with the blocks and coins on straight stretches of even length.
This commit is contained in:
Marshall
2012-03-18 13:42:59 -04:00
parent 4ce414408e
commit bc45062ad8
2 changed files with 111 additions and 69 deletions

View File

@@ -7,90 +7,121 @@ import java.util.Set;
import dk.itu.mario.level.matcher.ProfileMatcher.SKILL;
public class PlayerProfile {
//From Bartle/Yee models of player psychology: achiever, killer, explorer, manipulator
public enum TYPE { BUMPER, COLLECTOR, RUNNER, SHOOTER, JUMPER}
//Dreyfus model of skill acquisition:
public enum SKILL_LEVEL { NOVICE, BEGINNER, COMPETENT, PROFICIENT, EXPERT}
// From Bartle/Yee models of player psychology: achiever, killer, explorer,
// manipulator
public enum TYPE {
BUMPER, COLLECTOR, RUNNER, SHOOTER, JUMPER
}
// Dreyfus model of skill acquisition:
public enum SKILL_LEVEL {
NOVICE, BEGINNER, COMPETENT, PROFICIENT, EXPERT
}
private Set<LevelComponent.TYPE> enabledComponents = new HashSet<LevelComponent.TYPE>();
private SKILL_LEVEL skillLevel;
private Map<SKILL,Integer> skillVector;
private Map<SKILL, Integer> skillVector;
private TYPE type;
public PlayerProfile(SKILL_LEVEL skillLevel, TYPE type, Map<SKILL,Integer> skillVector) {
public PlayerProfile(SKILL_LEVEL skillLevel, TYPE type,
Map<SKILL, Integer> skillVector) {
this.skillLevel = skillLevel;
this .type = type;
this.type = type;
this.skillVector = skillVector;
for (LevelComponent.TYPE lcType: LevelComponent.TYPE.values()) {
for (LevelComponent.TYPE lcType : LevelComponent.TYPE.values()) {
setEnabled(lcType);
}
}
public boolean isEnabled(LevelComponent.TYPE type) {
return enabledComponents.contains(type);
}
public SKILL_LEVEL getSkillLevel() {
return skillLevel;
}
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 :
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;
}
}
public double getProbability(LevelComponent.TYPE type) {
if (!isEnabled(type)) {
return 0.0;
}
// SKILLs: { BUMP, COLLECT, JUMP, RUN, SHOOT, STOMP }
// TYPEs: { BUMPER, COLLECTOR, RUNNER, SHOOTER, JUMPER}
switch (type) {
case BLOCKS:
return 0.3;
case COINS :
return 0.5;
case POWER_UP :
return 0.1;
default :
return 0.1;
case BLOCKS:
return (.5) * (skillVector.get(SKILL.BUMP) / 100.0);
case COINS:
return (.5) * (skillVector.get(SKILL.COLLECT) / 100.0);
case POWER_UP:
double skillMod = 0;
switch (skillLevel) {
case BEGINNER:
skillMod = .8;
break;
case COMPETENT:
skillMod = .6;
break;
case PROFICIENT:
skillMod = .4;
break;
case EXPERT:
skillMod = .2;
break;
default:
skillMod = 1;
}
skillMod = (skillMod + (skillVector.get(SKILL.SHOOT) / 100.0)) / 2.0;
return (.3) * skillMod;
default:
return 0.1;
}
}
public TYPE getType() {
return type;
}
public void setDisabled(LevelComponent.TYPE type) {
if (enabledComponents.contains(type)) {
System.out.println("Component type disabled: " + type);
enabledComponents.remove(type);
}
}
public void setEnabled(LevelComponent.TYPE type) {
if (!enabledComponents.contains(type)) {
System.out.println("Component type enabled: " + type);
enabledComponents.add(type);
}
}
@Override
public String toString() {
return skillLevel + " " + type;