Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Table des matières
Fichier pour le niveau
On souhaite pouvoir stoker le niveau dans un fichier texte. Le contenu du niveau est défini par la position des plateformes et des récompenses.
Premier choix
On pourrait donc adopter ce choix :
PLATEFORME,0,10,800,50 PLATEFORME,100,60,200,10 PLATEFORME,250,110,200,10 PLATEFORME,440,160,200,10 COIN,300,20,dollar COIN,150,70,dollar
C'est un simple fichier csv. On convient qu'une ligne dont le premier élément est PLATEFORME décrit une plateforme et que les 4 nombres suivants doivent décrire la position de la plateforme.
Par exemple : PLATEFORME,100,60,200,10 indique une plateforme avec le bord gauche à 100 pixels du bord gauche du niveau ; le bord bas à 60 pixels du bas ; une largeur de 200 et une hauteur de 10.
Principe identique pour les récompenses.
Cette façon de procéder est très souple mais elle a un gros défaut : on a beaucoup de mal à se représenter ce que sera le niveau…
Je propose donc une 2e solution plus imagée.
Deuxième choix
On produit un fichier texte dont chaque caractère représente un élément à l'écran.
D D
D D D D D D D
PPPPPPPPPPPPPP PPPPPPPPPPPPPP
D D D
PPPP PPPP PPPPPP PPPPPPPPP PPPP
D D
PPPPPP PPPP
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
Dans ce code un P représente une plateforme, un D un dollar.
Cette façon de faire est beaucoup moins souple que la précédente. On n'est pas libre de mettre une plateforme exactement où on veut. Si on veut des plateformes de types différents, il faudra utiliser des lettres différentes, ce qui complique… En revanche, c'est très rapide de faire un niveau.
Rien n'empêche de mélanger les deux approches.
Module de lecture de niveau
# level.py
import pygame
from rectangle import Rectangle
from coin import Coin
# taille d'un carré de base
SIZE = 30
def load(filename:str):
with open(filename, 'r', encoding='utf8') as file:
lines = file.read().split('\n')
plateformes = pygame.sprite.Group()
coins = pygame.sprite.Group()
for i_line, line in enumerate(lines):
y = i_line * SIZE
for i_col, car in enumerate(line):
x = i_col * SIZE
if car == 'P':
s = Rectangle(x, y, SIZE, SIZE, (255, 0, 0))
plateformes.add(s)
elif car == 'D':
s = Coin(x, y, 'dollar')
coins.add(s)
return plateformes, coins
Le code est assez simple : il s'agit de parcourir le fichier et d'ajouter une plateforme chaque fois que l'on voit un P et un dollar chaque fois que l'on voit un D.
La constante SIZE permet de régler la taille d'un carré à l'écran.
Dans le main, on modifie la création des groupes de plateformes et de pièces :
...
import level.py
...
platesformes, coins = level.load('level1.txt')
Et le fichier level1.txt contient le niveau.
Hybride
Supposons que l'on veuille représenter le niveau suivant la méthode précédente mais que l'on veuille de plus ajouter des items supplémentaires comme des monstres qui peuvent se déplacer. On aurait dû mal à indiquer les informations sur le mouvement des monstres dans le fichier où chaque caractère représente un item.
On peut faire une solution hybride.
D D
D D D D D D D
PPPPPPPPPPPPPP PPPPPPPPPPPPPP
D D D
PPPP PPPP PPPPPP PPPPPPPPP PPPP
D D
PPPPPP PPPP
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
---
MOB,1,9,15,20,15
MOB,2,40,3,40,12,35,12
On convient alors que la ligne --- permet de séparer le fichier en deux parties.
- La partie avant est le contenu déjà décrit avant.
- La partie après représente une liste d'items à ajouter, avec leurs attributs. Par exemple ici :
MOB,1,9,15,20,15pourrait représenter un monstre de type 1, se déplaçant de la case en (9,15) à la case en (20,15).MOB,2,40,3,40,12pourrait représenter un monstre de type 2, se déplaçant selon les cases (40,3), (40,12), (35,12)
On pourra ajouter ainsi tout ce que l'on veut : des éléments de décors supplémentaires, des monstres, des récompenses, la fin du niveau…
