Menu
CoddyTech

Les états du jeu

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

Un jeu se trouve dans un seul état à la fois : en attente du joueur, en cours ou terminé. Deux booléens comme isPlaying et isOver peuvent tous deux finir par être vrais par erreur, et une chaîne comme "Playng" compile sans jamais correspondre. C# possède un type pour une liste fixe de choix, l’enum. Ce feu de circulation en utilise un :

public enum Signal { Red, Yellow, Green }

public class Crossing : MonoBehaviour
{
    public Signal signal;

    void Update()
    {
        if (signal == Signal.Red && Input.GetMouseButtonDown(0))
        {
            signal = Signal.Green;
            Debug.Log("Walk!");
        }
    }

    public bool CanWalk()
    {
        return signal == Signal.Green;
    }
}

enum Signal { Red, Yellow, Green } crée un nouveau type avec exactement trois valeurs, écrites Signal.Red, Signal.Yellow et Signal.Green. Un champ Signal contient l’une d’elles à la fois ; tu la compares avec == et tu la modifies avec =. Une faute de frappe comme Signal.Gren provoque une erreur de compilation : l’erreur apparaît donc avant que tu appuies sur Play.

L’énumération est déclarée en dehors de la classe, afin que chaque script puisse utiliser Signal, et que le script d’un piéton puisse appeler crossing.CanWalk(). Un nouveau champ d’énumération prend la première valeur par défaut, ici Red. Dans l’Inspector, un champ public d’énumération apparaît sous forme de liste déroulante de ses valeurs. En dessous, chaque valeur est un nombre compté à partir de 0 : (int)Signal.Green vaut 2.

challenge icon

Défi

Facile

Traverse le sol sans toucher la lave. Le GameManager (un singleton) et le script Lava sont déjà là ; ajoute les états au jeu.

  • Dans GameManager.cs, au-dessus de la classe, déclare une énumération GameState avec les valeurs Ready, Playing et GameOver, dans cet ordre, et ajoute à GameManager un champ public de type GameState nommé state. Le jeu commence en état Ready.
  • Tant que le jeu est en état Ready, la barre d’espace le démarre : l’état passe à Playing et Go! est consigné.
  • La lave appelle HitLava(). Tant que le jeu est en état Playing, cela met fin à la partie : l’état passe à GameOver et Game over est consigné. La barre d’espace ne redémarre jamais une partie terminée.
  • Dans Player.cs, les flèches ne déplacent le joueur que lorsque l’état est Playing.

Appuie sur Play, essaie les flèches avant d’appuyer sur la barre d’espace, puis avance dans la lave et enfin appuie sur Check.

Essayez vous-même

using UnityEngine;

// Déclare l’énumération GameState ici : Ready, Playing, GameOver

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;
    // un champ public de type GameState nommé state

    void Awake()
    {
        Instance = this;
    }

    void Update()
    {
        // Lorsque l’état est Ready, la touche Space lance le jeu et affiche Go! dans le journal
    }

    public void HitLava()
    {
        // Lorsque l’état est Playing, la partie se termine : affiche Game over dans le journal
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

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