Very rough draft of write-up (not proof-read).

This commit is contained in:
Woody Folsom
2012-03-18 18:46:30 -04:00
parent 18643d17e4
commit d5b8e0b85e
8 changed files with 83 additions and 51 deletions

View File

@@ -1,11 +1,13 @@
\relax
\citation{zimmerman}
\citation{bartle}
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Adaptive Mario in action}}{1}}
\newlabel{img:mario-ex}{{1}{1}}
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Flow State: Game Difficulty vs. Player Skill}}{2}}
\newlabel{img:flow-state}{{2}{2}}
\bibstyle{unsrt}
\bibdata{p3refs}
\bibcite{bartle}{1}
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces A Simple Overland Level Grammar}}{3}}
\newlabel{img:stochastic-grammar}{{3}{3}}
\bibstyle{unsrt}
\bibdata{p3refs}
\bibcite{zimmerman}{1}
\bibcite{bartle}{2}

View File

@@ -1,8 +1,13 @@
\begin{thebibliography}{1}
\bibitem{zimmerman}
K.~Salen and E.~Zimmerman.
\newblock {\em Rules of Play}.
\newblock The MIT Press, 2004.
\bibitem{bartle}
Richard Bartle.
\newblock Hearts, {Clubs}, {Diamonds}, {Spades}: {Players Who} suit {MUDs}.
\newblock Hearts, clubs, diamonds, spades: Players who suit {MUDs}.
\newblock http://aigamedev.com/open/interviews/mario-ai/, 1996.
\newblock [Online; accessed 18-March-2012].

View File

@@ -1,4 +1,4 @@
This is pdfTeX, Version 3.1415926-2.3-1.40.12 (MiKTeX 2.9) (preloaded format=pdflatex 2012.1.11) 18 MAR 2012 15:01
This is pdfTeX, Version 3.1415926-2.3-1.40.12 (MiKTeX 2.9) (preloaded format=pdflatex 2012.1.11) 18 MAR 2012 18:45
entering extended mode
**D:/workspace/cs8803p3/writeup/CS8803_P3.tex
(D:/workspace/cs8803p3/writeup/CS8803_P3.tex
@@ -175,10 +175,11 @@ File: mario_example.png Graphic file (type png)
<use mario_example.png>
Package pdftex.def Info: mario_example.png used on input line 23.
(pdftex.def) Requested size: 216.80669pt x 162.60416pt.
File: mario_example.png Graphic file (type png)
<use mario_example.png>
Package pdftex.def Info: mario_example.png used on input line 24.
<mario_underground.png, id=2, 642.4pt x 481.8pt>
File: mario_underground.png Graphic file (type png)
<use mario_underground.png>
Package pdftex.def Info: mario_underground.png used on input line 24.
(pdftex.def) Requested size: 216.80669pt x 162.60416pt.
Missing character: There is no à in font cmr10!
Missing character: There is no ¡ in font cmr10!
@@ -186,12 +187,12 @@ Missing character: There is no
Missing character: There is no ­ in font cmr10!
Missing character: There is no à in font cmr10!
Missing character: There is no ¡ in font cmr10!
<flow-state.png, id=2, 305.34074pt x 223.43475pt>
File: flow-state.png Graphic file (type png)
<flow-state.png, id=3, 305.34074pt x 223.43475pt>
File: flow-state.png Graphic file (type png)
<use flow-state.png>
Package pdftex.def Info: flow-state.png used on input line 36.
(pdftex.def) Requested size: 216.80669pt x 158.65341pt.
(pdftex.def) Requested size: 271.0125pt x 198.33125pt.
LaTeX Warning: `!h' float specifier changed to `!ht'.
@@ -199,32 +200,28 @@ LaTeX Warning: `!h' float specifier changed to `!ht'.
[1
{C:/ProgramData/MiKTeX/2.9/pdftex/config/pdftex.map} <D:/workspace/cs8803p3/wri
teup/mario_example.png>]
teup/mario_example.png> <D:/workspace/cs8803p3/writeup/mario_underground.png (P
NG copy)>]
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <7> on input line 61.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <5> on input line 61.
[2 <D:/workspace/cs8803p3/writeup/flow-state.png>]
<StochasticGrammar.png, id=15, 438.438pt x 222.8325pt>
<StochasticGrammar.png, id=16, 438.438pt x 222.8325pt>
File: StochasticGrammar.png Graphic file (type png)
<use StochasticGrammar.png>
Package pdftex.def Info: StochasticGrammar.png used on input line 83.
Package pdftex.def Info: StochasticGrammar.png used on input line 84.
(pdftex.def) Requested size: 406.51875pt x 206.62346pt.
(D:\workspace\cs8803p3\writeup\CS8803_P3.bbl
Underfull \hbox (badness 10000) in paragraph at lines 4--8
[]\OT1/cmr/m/n/10 Richard Bar-tle. Hearts, Clubs, Di-a-monds, Spades: Play-ers
Who suit MUDs.
[]
[3 <D:/workspace/cs8803p3/writeup/StochasticGrammar.png>]) [4]
[3 <D:/workspace/cs8803p3/writeup/StochasticGrammar.png>] (D:\workspace\cs8803
p3\writeup\CS8803_P3.bbl) [4]
(D:\workspace\cs8803p3\writeup\CS8803_P3.aux) )
Here is how much of TeX's memory you used:
1905 strings out of 494045
26059 string characters out of 3145969
87712 words of memory out of 3000000
5212 multiletter control sequences out of 15000+200000
7458 words of font info for 27 fonts, out of 3000000 for 9000
1913 strings out of 494045
26215 string characters out of 3145969
87715 words of memory out of 3000000
5218 multiletter control sequences out of 15000+200000
7804 words of font info for 28 fonts, out of 3000000 for 9000
715 hyphenation exceptions out of 8191
27i,7n,32p,875b,220s stack positions out of 5000i,500n,10000p,200000b,50000s
<C:/Program Files (x86)/MiKTeX 2
@@ -233,10 +230,11 @@ Here is how much of TeX's memory you used:
onts/type1/public/amsfonts/cm/cmr10.pfb><C:/Program Files (x86)/MiKTeX 2.9/font
s/type1/public/amsfonts/cm/cmr12.pfb><C:/Program Files (x86)/MiKTeX 2.9/fonts/t
ype1/public/amsfonts/cm/cmr17.pfb><C:/Program Files (x86)/MiKTeX 2.9/fonts/type
1/public/amsfonts/cm/cmtt10.pfb>
Output written on CS8803_P3.pdf (4 pages, 130421 bytes).
1/public/amsfonts/cm/cmti10.pfb><C:/Program Files (x86)/MiKTeX 2.9/fonts/type1/
public/amsfonts/cm/cmtt10.pfb>
Output written on CS8803_P3.pdf (4 pages, 153381 bytes).
PDF statistics:
42 PDF objects out of 1000 (max. 8388607)
47 PDF objects out of 1000 (max. 8388607)
0 named destinations out of 1000 (max. 500000)
16 words of extra memory for PDF output out of 10000 (max. 10000000)
21 words of extra memory for PDF output out of 10000 (max. 10000000)

Binary file not shown.

Binary file not shown.

View File

@@ -21,7 +21,7 @@ The authors of Adaptive Mario use several PCG techniques to develop a simple pla
\begin{figure}[h!]
\centering
\includegraphics[width=0.4 \textwidth]{mario_example.png}
\includegraphics[width=0.4 \textwidth]{mario_example.png}
\includegraphics[width=0.4 \textwidth]{mario_underground.png}
\caption{Adaptive Mario in action}
\label{img:mario-ex}
\end{figure}
@@ -29,11 +29,11 @@ The authors of Adaptive Mario use several PCG techniques to develop a simple pla
As shown in Figure \ref{img:mario-ex}, the conceptual goal is that players with different play styles and skill levels should have a very different gameplay experience from the moment the level begins. Of course, the very first time Adaptive Mario is run in a new environment, a specific level is presented based on an a priori model of an 'average' player.
\section*{Related Works}
The essential goal of Adaptive Mario is to facilitate flow state by giving the player sufficient challenge and variety without rapidly becoming too difficult. As defined by Mihály Csíkszentmihályi, ``flow'' is the state of total immersion and cocentration in which the player believes he or she is overcoming obstacles by the narrowest of margins. As shown in Figure \ref{img:flow-state}, achieving this state involves a delicate balance between the difficulty of the game and the player's degree of skill. If the game is too hard, the player will become frustrated. On the other hand, most players will become bored if the game is too easy.
The essential goal of Adaptive Mario is to facilitate flow state by giving the player sufficient challenge and variety without rapidly becoming too difficult. As defined by Mihály Csíkszentmihályi, according to Salen and Zimmerman \cite{zimmerman}, ``flow'' is the state of total immersion and cocentration in which the player believes he or she is overcoming obstacles by the narrowest of margins. As shown in Figure \ref{img:flow-state}, achieving this state involves a delicate balance between the difficulty of the game and the player's degree of skill. If the game is too hard, the player will become frustrated. On the other hand, most players will become bored if the game is too easy.
\begin{figure}[h!]
\centering
\includegraphics[width=0.4 \textwidth]{flow-state.png}
\includegraphics[width=0.5 \textwidth]{flow-state.png}
\caption{Flow State: Game Difficulty vs. Player Skill}
\label{img:flow-state}
\end{figure}
@@ -61,13 +61,14 @@ In addition to assigning a player profile, the ProfileMatcher assesses the playe
\begin{tabular}{ | l | l | l | }
\hline
Score & Skill Level & Attributes\\ \hline
20\% & Novice & low situational awareness, reflexive responses\\ \hline
40\% & Beginner & uses judgement to react to challenges, limited awareness \\ \hline
60\% & Competent & copies with multiple challenges, uses sound strategy \\ \hline
80\% & Proficient & makes rapid decisions, prioritzes goals \\ \hline
100\% & Expert & intuitively solves challenges, pushes boundaries \\ \hline
20\% & Novice & Low situational awareness, Reflexive responses\\ \hline
40\% & Beginner & Uses judgement to react to challenges, Limited awareness \\ \hline
60\% & Competent & Copes with multiple challenges, Uses sound strategy \\ \hline
80\% & Proficient & Makes rapid decisions, Prioritzes goals \\ \hline
100\% & Expert & Intuitively solves challenges, Pushes limits \\ \hline
\end{tabular}
\end{table}
\subsection*{Level Archetype Selection}
The Level Archetype selector picks an overall macro-form for the level based on the player's profile and skill level. As there are five categories and only three distinct environments in the Inifinite Mario engine (Overland, Underground and Castle), different profiles cause similar Level Archetypes to be generated. However, this does provide the opportunity to indicate to the player what types of challenges lie ahead and may serve to enhance immersion.
@@ -88,8 +89,38 @@ Given a suitable array of predefined LevelComponent types, each of which corresp
One potential pitfall of using a CFG for this purpose is that the generated level may be over-specified (containing too many elements) and hence too crowded, or under-specified and nearly empty. To mitigate this problem, a fitness evaluation function iteratively invokes the LevelGrammar, rejecting proposed levels with too many or too few LevelComponents.
\subsection*{Challenge Components: Micro-structure}
Challenge components are small puzzles that lend variety to the randomized levels and serve a dual purpose in allowing Adaptive Mario to fit the player's preferred style.
First, by providing ever more difficulty scenarios, challenge is mainted. This trend also prevents a feedback loop wherein a player jumps frequently because a level contains many platforms, which causes the next level to contain many jumping puzzles and so on.
Second, specific can could be chosen to allow Adaptive Mario to discriminate between playstyles when a player's metrics are borderline between two typical profiles. Thus a player who is both a Runner and a Jumper could be given a very difficult jumping challenge to cause the metrics to trend one way or the other. However, this advanced adaptation was not implemented during this iteration of the project.
\begin{table}[ht]
\centering
\begin{tabular}{ | l | l | l | }
\hline
Difficulty & Challenge Component & Description \\ \hline
1 & Coin Dive & Some empty blocks, coins line the path to the ground.\\ \hline
2 & Free power-up & Sets the player up to get a power-up with little or no challenge.\\ \hline
3 & Straight & A straight stretch of land with maybe one enemy and maybe some coins or blocks\\ \hline
4 & Single Pit & A pit that the user must jump over; rocks on either side.\\ \hline
5 & Bowling Alley & A red koopa right before a long line of enemies. Kill them all!\\ \hline
6 & Cannon Line & A stack of 2 or 3 cannons.\\ \hline
7 & Maze & A maze of indestructible blocks, with enemies.\\ \hline
8 & Lemming Trap & A little pit with a few enemies that jump down into it.\\ \hline
9 & Platform Jump & A bunch of platforms to jump between.\\ \hline
10 & Pipe Jump & A bunch of thin pipes to jump between.\\ \hline
\end{tabular}
\end{table}
\section*{Evaluation}
Several challenges were overcome during the implementation of Adaptive Mario.
From a technical standpoint, finding a Java-compatible rule engine (Drools) was a time-consuming effort, mainly due to the large number of third-party JAR dependencies. Sufficient time was invested in this endeavor before integration was ultimately successful that the role of the rules engine was minimized during the design process. Consequently, only basic alterations are made to the random level structure based on the player profile.
Randomized level generation using a stochastic CFG was largely successful, however. Not only can this very simple grammar generate a variety of levels, implementation of a parser for the rule set allows a designer to make meaningful content changes without the need to recompile source code. Such grammars are limited of course - integration between the top-down macro generation code and bottom-up Challenge Component code was a challenge, as the LevelGrammar module lacks the capability to plan ahead and avoid akward juxtapositions of LevelComponents.
While the arbitrary scoring and single-iteration feedback loop of the PlayerProfile module functions as designed, the core PlayerProfile model reperesents the most likely area of improvement in the next version of Adaptive Mario. Because small changes to the scoring weights can make a great difference in determining which level-building rules are ultimately invoked, better tuning of these parameters is vital. Consequently, this package would benefit greatly from use of Artificial Neural Networks or Bayesian Inference to discover more accurate scoring values.
\section*{Conclusion}
It seems clear from the results that the framework of Adaptive Mario has the potential to guide the player toward his or her own idealized version of a platform game, while still presenting a reasonable level of challenge. Not only does difficulty scale in proportion to the player's performance (preventing frustration), but care is taken in the design of the level grammar to avoid repeatedly giving the player 'more of the same' (leading to boredom). One potential issue exists, however - it is possible that some players simply are not fans of the platform jumper genre!

View File

@@ -30,8 +30,15 @@
@MISC{bartle,
AUTHOR = "Richard Bartle",
TITLE = "Hearts, {Clubs}, {Diamonds}, {Spades}: {Players Who} suit {MUDs}",
TITLE = "Hearts, Clubs, Diamonds, Spades: Players Who suit {MUDs}",
HOWPUBLISHED = "http://aigamedev.com/open/interviews/mario-ai/",
YEAR = 1996,
NOTE = "[Online; accessed 18-March-2012]"
}
@BOOK{zimmerman,
title = {Rules of Play},
author = {Salen, K. and Zimmerman, E.},
publisher = {The MIT Press},
year = 2004
}

View File

@@ -1,11 +0,0 @@
This is pdfTeX, Version 3.1415926-2.3-1.40.12 (MiKTeX 2.9) (preloaded format=pdftex 2012.1.30) 18 MAR 2012 14:06
entering extended mode
**D:/workspace/cs8803p3/writeup/p3refs.bib
(D:/workspace/cs8803p3/writeup/p3refs.bib)
*
! Emergency stop.
<*> D:/workspace/cs8803p3/writeup/p3refs.bib
End of file on the terminal!
! ==> Fatal error occurred, no output PDF file produced!