Writing on json file with libgdx

Adrien

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 !

Enigo

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:

  1. Parse JsonResult object from file
  2. Get the score for the level from that object
  3. Compare with the new score and rewrite if needed.

To 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);
}

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related