Menu
CoddyTech

Meilleur score

Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 24 sur 60.

Un meilleur score est le meilleur résultat obtenu au cours de toutes les parties jouées. Il est donc stocké dans PlayerPrefs et ne change que lorsqu’une partie le dépasse. Cette table de flipper vérifie le score lorsque la dernière bille tombe :

void GameOver()
{
    int best = PlayerPrefs.GetInt("PinballBest", 0);
    if (score > best)
    {
        PlayerPrefs.SetInt("PinballBest", score);
        PlayerPrefs.Save();
        Debug.Log("New high score: " + score);
    }
}

C’est la comparaison qui permet de déterminer s’il s’agit d’un meilleur score. Sans elle, une partie avec un score de 300 après un meilleur score de 5000 enregistrerait 300, et le record serait perdu. Compare le score au meilleur score enregistré, et non à une valeur qui repart de 0 à chaque partie : un champ dont aucune valeur n’a été chargée vaut 0 après chaque redémarrage, donc n’importe quel score le dépasse. score > best conserve l’ancien record en cas d’égalité, tandis que score >= best considérerait une égalité comme un nouveau meilleur score.

Pour afficher le meilleur score pendant la partie, charge-le dans un champ dans Start() et affiche ce champ. Lorsqu’une partie le dépasse, mets à jour le champ, PlayerPrefs et le texte en même temps, afin que l’écran et la valeur enregistrée ne soient jamais en désaccord.

challenge icon

Défi

Moyen

Conserve un meilleur score sous la clé BestPoints.

  1. Dans Start(), au-dessus de ShowBest();, écris best = PlayerPrefs.GetInt("BestPoints", 0);.
  2. Dans EndRound(), à l’intérieur de if (points > best) : définis best = points;, enregistre-le avec PlayerPrefs.SetInt et PlayerPrefs.Save(), puis appelle ShowBest(); et newBestText.SetActive(true);.

Appuie sur « Jouer » et gonfle un ballon (maintiens la barre d’espace, puis relâche-la), puis sur Arrêter et « Jouer » : le meilleur score est conservé. Puis appuie sur « Vérifier ».

Essayez vous-même

using UnityEngine;
using TMPro;

public class BalloonPump : MonoBehaviour
{
    public TMP_Text pointsText;
    public TMP_Text bestText;
    public GameObject newBestText;
    public float pumpRate = 20f;

    private float air;
    private int points;
    private int best;
    private bool roundOver;

    void Start()
    {
        ShowBest();
    }

    void Update()
    {
        if (roundOver) return;

        if (Input.GetKey(KeyCode.Space))
        {
            air += pumpRate * Time.deltaTime;
            transform.localScale = Vector3.one * (1f + air / 50f);
            pointsText.text = "Points: " + Mathf.FloorToInt(air);
            if (air > 100f)
            {
                points = 0;
                pointsText.text = "Pop! Points: 0";
                GetComponent<Renderer>().enabled = false;
                roundOver = true;
                EndRound();
            }
        }
        else if (Input.GetKeyUp(KeyCode.Space))
        {
            points = Mathf.FloorToInt(air);
            pointsText.text = "Points: " + points;
            roundOver = true;
            EndRound();
        }
    }

    void EndRound()
    {
        // Enregistrez un nouveau record ici
    }

    void ShowBest()
    {
        bestText.text = "Best: " + best;
    }
}

Toutes les leçons de Créer de vrais jeux

Entraînez-vous par vous-même : Playground Unity