From 0bb61eece8a9dfc50752d336ace0508e503e584b Mon Sep 17 00:00:00 2001 From: Woody Folsom Date: Sun, 18 Mar 2012 13:03:16 -0400 Subject: [PATCH] Added PlayerProfile.getProbability(LevelComponent.TYPE). --- src/dk/itu/mario/level/LevelComponent.java | 2 +- src/dk/itu/mario/level/PCGLevel.java | 4 +++ src/dk/itu/mario/level/PlayerProfile.java | 30 ++++++++++++++++++- .../mario/level/matcher/ProfileMatcher.java | 2 +- 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/dk/itu/mario/level/LevelComponent.java b/src/dk/itu/mario/level/LevelComponent.java index 0514f39..8db7e0a 100644 --- a/src/dk/itu/mario/level/LevelComponent.java +++ b/src/dk/itu/mario/level/LevelComponent.java @@ -2,7 +2,7 @@ package dk.itu.mario.level; public class LevelComponent { 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 { diff --git a/src/dk/itu/mario/level/PCGLevel.java b/src/dk/itu/mario/level/PCGLevel.java index f01b838..7e4684e 100644 --- a/src/dk/itu/mario/level/PCGLevel.java +++ b/src/dk/itu/mario/level/PCGLevel.java @@ -9,6 +9,7 @@ import dk.itu.mario.MarioInterface.GamePlay; import dk.itu.mario.MarioInterface.LevelInterface; import dk.itu.mario.engine.DataRecorder; 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.LevelGrammarFactory; import dk.itu.mario.level.grammar.LevelParseTree; @@ -125,6 +126,9 @@ public class PCGLevel extends Level { private void create(long seed, PlayerProfile profile, LevelArchetype archetype, LevelGrammar grammar) { + + System.out.println("PlayerProfile.getProbability(COINS): " + profile.getProbability(TYPE.COINS)); + if (dataRecorder == DataRecorder.BLANK_RECORD) { System.out .println("DataRecorder record is BLANK - using GamePlay metrics only."); diff --git a/src/dk/itu/mario/level/PlayerProfile.java b/src/dk/itu/mario/level/PlayerProfile.java index 0d18b47..f8e77e8 100644 --- a/src/dk/itu/mario/level/PlayerProfile.java +++ b/src/dk/itu/mario/level/PlayerProfile.java @@ -1,8 +1,11 @@ package dk.itu.mario.level; import java.util.HashSet; +import java.util.Map; 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} @@ -12,11 +15,20 @@ public class PlayerProfile { private Set enabledComponents = new HashSet(); private SKILL_LEVEL skillLevel; + private Map skillVector; private TYPE type; - public PlayerProfile(SKILL_LEVEL skillLevel, TYPE type) { + public PlayerProfile(SKILL_LEVEL skillLevel, TYPE type, Map skillVector) { this.skillLevel = skillLevel; 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() { @@ -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() { return type; } diff --git a/src/dk/itu/mario/level/matcher/ProfileMatcher.java b/src/dk/itu/mario/level/matcher/ProfileMatcher.java index 09b09c8..cd01b0e 100644 --- a/src/dk/itu/mario/level/matcher/ProfileMatcher.java +++ b/src/dk/itu/mario/level/matcher/ProfileMatcher.java @@ -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.)"); - return new PlayerProfile(skillLevel, closestMatch); + return new PlayerProfile(skillLevel, closestMatch, playerProfileVector); } private static int getKeyScore(Map playerProfileVector, PlayerProfile.TYPE playerProfileType) {