I'm new on this forum and I make an android app using libgdx and I want to save the player score on a json file. I can read the json file to get back the score but if the player do a better score I don't know how to write the new best score on the json file. I searched on many websites and I didn't find something good...
My json file is like that :
{ "scores":[
{
"level":1,
"bestScore":100
},
{
"level":2,
"bestScore":100
},
{
"level":3,
"bestScore":100
},
{
"level":4,
"bestScore":100
},
{
"level":5,
"bestScore":100
},
{
"level":6,
"bestScore":100
},
{
"level":7,
"bestScore":100
},
{
"level":8,
"bestScore":100
},
{
"level":9,
"bestScore":100
},
{
"level":10,
"bestScore":100
},
{
"level":11,
"bestScore":100
},
{
"level":12,
"bestScore":100
},
{
"level":13,
"bestScore":100
},
{
"level":14,
"bestScore":100
},
{
"level":15,
"bestScore":100
},
{
"level":16,
"bestScore":100
},
{
"level":17,
"bestScore":100
},
{
"level":18,
"bestScore":100
},
{
"level":19,
"bestScore":100
},
{
"level":20,
"bestScore":100
}
]
}
And for example, if the player do a score of 30 in the level 1, I want to replace the "100" from the level 1 by "30".
I hope somebody will can help me ! Thank you, I'm waiting for your answers !
Well, I may suggest you slightly different approach for that. I assume that you use Libgdx Json Api. First of all we need Java representation of json, something like:
public class JsonResult {
private ObjectMap<String, Integer> scores;
public ObjectMap<String, Integer> getScores() {
return scores;
}
public void setScores(ObjectMap<String, Integer> scores) {
this.scores = scores;
}
}
Here in the scores
map the key is a level_
prefix with actual level number (e.g. level_1
) and the value is a score for that level.
This way your json structure would be similar to:
{
"scores":{
"level_1":100,
"level_2":100,
"level_3":200,
"level_4":300
....
}
So, then when you save new score:
public void saveResult(Integer level, Integer newScore) {
JsonResult jsonResult = json.fromJson(JsonResult.class, resultJson);
ObjectMap<String, Integer> scores = jsonResult.getScores();
String levelKey = "level_" + level;
Integer scoreForLevel = scores.get(levelKey);
if (newScore > scoreForLevel) {
scores.put(levelKey, newScore);
jsonResult.setScores(scores);
json.toJson(jsonResult, resultJson);
}
}
The logic is quite simple:
JsonResult
object from fileTo create new json file:
public void resetResultFile() {
JsonResult jsonResult = new JsonResult();
ObjectMap<String, Integer> initialScores = new ObjectMap<>(1);
initialScores.put("level_1", 0);
jsonResult.setScores(initialScores);
json.toJson(jsonResult, resultJson);
}