Added facility to save and read DetailedInfo (DataRecorder data) in XML format using XStream.
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -15,4 +15,5 @@ docs
|
|||||||
.classpath
|
.classpath
|
||||||
player.txt
|
player.txt
|
||||||
DetailedInfo.txt
|
DetailedInfo.txt
|
||||||
|
DetailedInfo.xml
|
||||||
*.png
|
*.png
|
||||||
BIN
lib/xstream-1.4.2.jar
Normal file
BIN
lib/xstream-1.4.2.jar
Normal file
Binary file not shown.
@@ -4,24 +4,26 @@ import java.io.File;
|
|||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import com.thoughtworks.xstream.annotations.XStreamOmitField;
|
||||||
|
|
||||||
import dk.itu.mario.MarioInterface.GamePlay;
|
import dk.itu.mario.MarioInterface.GamePlay;
|
||||||
import dk.itu.mario.engine.sprites.SpriteTemplate;
|
|
||||||
import dk.itu.mario.engine.sprites.BulletBill;
|
import dk.itu.mario.engine.sprites.BulletBill;
|
||||||
import dk.itu.mario.engine.sprites.Enemy;
|
import dk.itu.mario.engine.sprites.Enemy;
|
||||||
|
import dk.itu.mario.engine.sprites.FlowerEnemy;
|
||||||
import dk.itu.mario.engine.sprites.Mario;
|
import dk.itu.mario.engine.sprites.Mario;
|
||||||
import dk.itu.mario.engine.sprites.Shell;
|
import dk.itu.mario.engine.sprites.Shell;
|
||||||
import dk.itu.mario.engine.sprites.Sprite;
|
import dk.itu.mario.engine.sprites.Sprite;
|
||||||
|
import dk.itu.mario.engine.sprites.SpriteTemplate;
|
||||||
import dk.itu.mario.level.Level;
|
|
||||||
import dk.itu.mario.level.RandomLevel;
|
import dk.itu.mario.level.RandomLevel;
|
||||||
import dk.itu.mario.scene.LevelScene;
|
import dk.itu.mario.scene.LevelScene;
|
||||||
import dk.itu.mario.engine.sprites.FlowerEnemy;
|
|
||||||
|
|
||||||
public class DataRecorder {
|
public class DataRecorder {
|
||||||
|
|
||||||
public boolean recording = true;
|
public boolean recording = true;
|
||||||
|
@XStreamOmitField
|
||||||
private RandomLevel level;
|
private RandomLevel level;
|
||||||
private boolean []keys, keyPressed;
|
private boolean []keys, keyPressed;
|
||||||
|
@XStreamOmitField
|
||||||
private LevelScene levelScene;
|
private LevelScene levelScene;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -213,7 +215,6 @@ public class DataRecorder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean timeStopped = true;
|
private boolean timeStopped = true;
|
||||||
private long endGRight;
|
|
||||||
|
|
||||||
public void endTime(){
|
public void endTime(){
|
||||||
if(timeStopped == false){
|
if(timeStopped == false){
|
||||||
@@ -424,7 +425,6 @@ public class DataRecorder {
|
|||||||
|
|
||||||
public void fireKillRecord(Sprite sprite){
|
public void fireKillRecord(Sprite sprite){
|
||||||
killRecord(sprite);
|
killRecord(sprite);
|
||||||
int enemyType = 0;
|
|
||||||
if(sprite instanceof FlowerEnemy){
|
if(sprite instanceof FlowerEnemy){
|
||||||
detailedLog += "FireKill: EnemyType = FlowerEnemy time = "+ (2982 - levelScene.timeLeft);
|
detailedLog += "FireKill: EnemyType = FlowerEnemy time = "+ (2982 - levelScene.timeLeft);
|
||||||
detailedLog += "\n";
|
detailedLog += "\n";
|
||||||
@@ -668,7 +668,7 @@ public class DataRecorder {
|
|||||||
printEnd();
|
printEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void printDeaths(){
|
private void printDeaths() {
|
||||||
printStart("Player Died Against");
|
printStart("Player Died Against");
|
||||||
int deathsTotal = 0;
|
int deathsTotal = 0;
|
||||||
|
|
||||||
@@ -789,7 +789,7 @@ public class DataRecorder {
|
|||||||
public void fillGamePlayMetrics(RandomLevel level){
|
public void fillGamePlayMetrics(RandomLevel level){
|
||||||
GamePlay gpm = new GamePlay();
|
GamePlay gpm = new GamePlay();
|
||||||
gpm.completionTime = getCompletionTime();
|
gpm.completionTime = getCompletionTime();
|
||||||
gpm.totalTime = getTotalTime();////sums all the time, including from previous games if player died
|
gpm.totalTime = getTotalTime();
|
||||||
gpm.jumpsNumber = getTimesJumped();
|
gpm.jumpsNumber = getTimesJumped();
|
||||||
gpm.timeSpentDucking = getTotalDuckTime();
|
gpm.timeSpentDucking = getTotalDuckTime();
|
||||||
gpm.duckNumber = getTimesDucked();
|
gpm.duckNumber = getTimesDucked();
|
||||||
@@ -838,7 +838,7 @@ public class DataRecorder {
|
|||||||
gpm.write("player.txt");
|
gpm.write("player.txt");
|
||||||
System.out.println(detailedLog);
|
System.out.println(detailedLog);
|
||||||
write(detailedLog);
|
write(detailedLog);
|
||||||
|
writeXML();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -854,11 +854,26 @@ public class DataRecorder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void writeXML() {
|
||||||
|
try {
|
||||||
|
FileWriter file = new FileWriter(new File("DetailedInfo.xml"));
|
||||||
|
file.write(toXML());
|
||||||
|
file.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public int getCompletionTime(){
|
public int getCompletionTime(){
|
||||||
return convertTime(completionTime);
|
return convertTime(completionTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sums all the time, including from previous games if player died
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public int getTotalTime(){
|
public int getTotalTime(){
|
||||||
return convertTime(totalTime);
|
return convertTime(totalTime);
|
||||||
}
|
}
|
||||||
@@ -976,6 +991,14 @@ public class DataRecorder {
|
|||||||
return (double)getTotalLargeTime()/(double)getTotalTime();
|
return (double)getTotalLargeTime()/(double)getTotalTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static DataRecorder fromXML(File file) throws IOException {
|
||||||
|
return (DataRecorder) XStreamFactory.getInstance().fromXML(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toXML() {
|
||||||
|
return XStreamFactory.getInstance().toXML(this);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Time in tiny mario form
|
* Time in tiny mario form
|
||||||
* @return
|
* @return
|
||||||
|
|||||||
14
src/dk/itu/mario/engine/XStreamFactory.java
Normal file
14
src/dk/itu/mario/engine/XStreamFactory.java
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
package dk.itu.mario.engine;
|
||||||
|
|
||||||
|
import com.thoughtworks.xstream.XStream;
|
||||||
|
import com.thoughtworks.xstream.io.xml.DomDriver;
|
||||||
|
|
||||||
|
public class XStreamFactory {
|
||||||
|
|
||||||
|
public static XStream getInstance() {
|
||||||
|
XStream xstream = new XStream(new DomDriver());
|
||||||
|
xstream.processAnnotations(DataRecorder.class);
|
||||||
|
|
||||||
|
return xstream;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ package dk.itu.mario.scene;
|
|||||||
|
|
||||||
import java.awt.GraphicsConfiguration;
|
import java.awt.GraphicsConfiguration;
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import dk.itu.mario.MarioInterface.GamePlay;
|
import dk.itu.mario.MarioInterface.GamePlay;
|
||||||
@@ -48,8 +49,18 @@ public class LevelSceneCustom extends LevelScene {
|
|||||||
currentLevel = (Level) clg.generateLevel(gp);
|
currentLevel = (Level) clg.generateLevel(gp);
|
||||||
|
|
||||||
String detailedInfo = FileHandler.readFile("DetailedInfo.txt");
|
String detailedInfo = FileHandler.readFile("DetailedInfo.txt");
|
||||||
//TODO parse DetailedInfo
|
|
||||||
System.out.println("DetailedInfo: " + detailedInfo);
|
File xmlInfoFile = new File("DetailedInfo.xml");
|
||||||
|
if (xmlInfoFile.exists()) {
|
||||||
|
try {
|
||||||
|
DataRecorder dataRecorder = DataRecorder.fromXML(xmlInfoFile);
|
||||||
|
System.out.println("DetailedInfo (from xml file): " + detailedInfo);
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
ioe.printStackTrace();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
System.out.println("DetailedInfo (from txt file): " + detailedInfo);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
level = currentLevel.clone();
|
level = currentLevel.clone();
|
||||||
@@ -57,7 +68,7 @@ public class LevelSceneCustom extends LevelScene {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO change this
|
// TODO change this
|
||||||
// level is always overground
|
// level is always overground
|
||||||
Art.startMusic(2);
|
Art.startMusic(2);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user