Comment un jeu devient plus difficile
Un niveau de jeu peut se décrire par un tableau de données. Une ligne dit à partir de quel score il commence, à quelle vitesse tombent les objets et à quel rythme ils arrivent. Le code lit le tableau, il n'a pas besoin d'être réécrit.
Les concepteurs changent ainsi la difficulté en modifiant des nombres, et un plan d'apparition se calcule avant même de lancer le jeu.
À la fin de cette leçon
Remarque
Je peux décrire des niveaux par un tableau de données et calculer quand les objets apparaissent.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Niveau | un palier de difficulté, décrit par des nombres | |
| Échelle | un nombre par lequel on multiplie un réglage de base | 1,25 |
| Intervalle d'apparition | le nombre d'images entre deux objets | |
| Reste | ce qui reste d'une division entière | 7 % 3 |
| Plan d'apparition | la liste des images où un objet apparaît | |
| Arrondi | le passage d'un nombre décimal à un nombre entier |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un niveau est une ligne de données
Chaque ligne du tableau porte un nom et le score à partir duquel le niveau commence. Elle porte aussi deux échelles : une pour la gravité, une pour le rythme des objets. Le niveau en cours est la dernière ligne que le score a atteinte.
Pour ajouter un niveau, on ajoute une ligne. Aucune ligne de code ne change.
Exemple : un tableau de niveaux
| Niveau | À partir du score | Échelle de gravité | Échelle d'apparition |
|---|---|---|---|
| Bruine | 0 | 1,0 | 1,0 |
| Averse | 5 | 1,4 | 1,25 |
| Orage | 12 | 1,8 | 1,6 |
| Météores | 20 | 2,4 | 2,0 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Exemple : trouver le niveau d'un score
<pre id="sortie"></pre>Avant de lancer les Run
Remarque
Démarrez le labo et ouvrez le terminal. Le script levels.py lit le tableau des niveaux du jeu et calcule la gravité et le rythme de chacun. Il écrit des mots anglais : levels, from score, gravity, a star every, frames.
Calculer gravité et rythme de chaque niveau
docker exec jupyter python3 steps/levels.pyAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Ce que montrent les quatre niveaux du jeu
Le Run écrit levels: 4, puis une ligne par niveau. Le premier niveau, Drizzle, a une gravité de 0.150 et une étoile toutes les 50 images. Le dernier, Meteors, a une gravité de 0.360 et une étoile toutes les 25 images.
Le jeu devient donc deux fois plus fréquent et plus de deux fois plus rapide, sans une seule ligne de code en plus.
Un reste nul dit quand un objet apparaît
Un objet apparaît quand le numéro de l'image est un multiple de l'intervalle. Avec un intervalle de 40, les objets arrivent aux images 40, 80, 120. On le teste avec le reste de la division : image % 40 == 0.
L'intervalle se calcule en divisant l'intervalle de base par l'échelle, puis on arrondit : 50 divisé par 1,25 donne 40.
Deux langages n'arrondissent pas de la même façon
Le jeu est écrit en JavaScript, dont l'arrondi envoie 2,5 vers 3. La fonction round de Python envoie 2,5 vers 2, car elle choisit le nombre pair. Les deux ne donnent pas toujours le même intervalle.
Pour retrouver l'arrondi de JavaScript en Python, on écrit int(x + 0.5). Le second Run le montre.
Comparer deux façons d'arrondir
docker exec jupyter python3 -c "print(round(2.5), int(2.5 + 0.5))"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Une erreur fréquente
Attention
Beaucoup pensent que rendre un niveau plus dur demande du nouveau code. Faux : une ligne de données suffit, si le code lit déjà le tableau. Gardez les règles dans le code et les nombres dans les données.