2016-08-07 1 views
0

Je suis nouveau sur ce forum et je fais une application Android en utilisant libgdx et je veux enregistrer le score du joueur sur un fichier json. Je peux lire le fichier json pour récupérer le score, mais si le joueur fait un meilleur score, je ne sais pas comment écrire le nouveau meilleur score sur le fichier json. Je cherchai sur de nombreux sites et je ne trouve pas quelque chose de bon ...Écrire sur le fichier json avec libgdx

Mon fichier JSON est comme ça:

{ "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 
    } 
    ] 
} 

Et par exemple, si le joueur de faire un score de 30 au niveau 1, je veux remplacer le "100" du niveau 1 par "30".

J'espère que quelqu'un pourra m'aider! Merci, j'attends vos réponses!

Répondre

0

Eh bien, je peux vous suggérer une approche légèrement différente pour cela. Je suppose que vous utilisez Libgdx Json Api. Tout d'abord nous avons besoin d'une représentation Java de JSON, quelque chose comme:

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

Ici, dans la scores carte la clé est un préfixe level_ avec le numéro de niveau réel (par exemple level_1) et la valeur est un score pour ce niveau.

De cette façon, votre structure JSON serait similaire à:

{ 
    "scores":{ 
     "level_1":100, 
     "level_2":100, 
     "level_3":200, 
     "level_4":300 
     .... 
} 

Ainsi, lorsque vous enregistrez 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); 
    } 
} 

La logique est assez simple:

  1. Parse JsonResult objet à partir du fichier
  2. Obtenez le score pour level from this object
  3. Comparer avec le nouveau score et réécrire si nécessaire.

Pour créer un nouveau fichier JSON:

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); 
} 
+0

Merci pour votre réponse rapide! Mais je fais cela et ça ne marche pas, j'ai "un fichier de lecture d'erreur, Causé par des scores pas trouvés". Avez-vous une idée pourquoi? Est-ce correct, pour le départ: Json json = new Json(); \t \t FileHandle handle = Gdx.files.internal ("scores.json"); \t JsonResult jsonResult = json.fromJson (JsonResult.class, handle); \t ObjectMap scores = JsonResult.getScores() ;? – Adrien

+0

@Adrien vous devez recréer le fichier de résultats, voir ma réponse mise à jour. Je le fais pendant l'écran de chargement, vérifier que le fichier existe et sinon - en créer un nouveau. Et votre ancien fichier json n'est pas valide pour cette nouvelle structure et devrait donc être supprimé. – Enigo