Créer plusieurs niveaux

Il est possible de faire autant de niveaux que tu le souhaites dans ton jeu.

Ajouter un niveau

Dans le script level.js, trouve la variable LEVELS et ajoutes-y simplement ton nouveau niveau de la façon suivante.

// plan du niveau
const LEVELS = [
  
  [
    "     =     " ,
    "==       @ " ,
    "        ===" ,
    "  ==       " ,
    "           " ,
    "       ====" ,
    " #         " ,
    "=====      " ,
  ],

[ " == " , " # @ " , "====== ======" , ],
];

N'oublie pas de placer un portail avec le symbole @ pour que ton joueur puisse accéder au niveau suivant.

BONUS : Ajouter des portes avec différentes destinations

pour Victor (Rosny-sous-bois)

La suite va te permettre de placer plusieurs portails dans ton niveau avec pour chacun une destination différente.

Importer des images

Pour commencer, il va te falloir des images. Réalises-en si tu ne l'as pas déjà fait, ou utilise celles ci-dessous (click droit -> enregistrer-sous).

Charger les images dans le programme

Importe ensuite tes images dans ton projet en les plaçant dans le bon dossier : assets/sprites/. Puis, ajoute ces lignes au début de ton script game.js, comme suit.

// chargement des images du jeu
loadSprite( "bean"   , "assets/sprites/bean.png"   ) ;
loadSprite( "grass"  , "assets/sprites/grass.png"  ) ;
loadSprite( "portal" , "assets/sprites/portal.png" ) ;

loadSprite( "door1" , "assets/sprites/door1.png" ) ; loadSprite( "door2" , "assets/sprites/door2.png" ) ; loadSprite( "door3" , "assets/sprites/door3.png" ) ;

Déclarer des symboles

Nous allons maintenant déclarer de nouveaux types d'objets que tu vas pouvoir placer dans ton jeu. Dans cet exemple nous avons choisi les caractères 1, 2 et 3. Dans le script level.js, trouve la variable LEVEL_CONFIG et ajoutes-y le code ci-dessous, comme suit.

// défini ce à quoi correspond chaque symbole dans le niveau
const LEVEL_CONFIG = {
  
  // taille en pixel de chaque case
  width: 64,
  height: 64,

  // sol
  "=": () => [
    sprite("grass"), 
    area(), 
    solid(), 
    origin("bot")
  ],
  
// porte 1 "1": () => [ sprite("door1"), area(), origin("bot"), "door", ], // porte 2 "2": () => [ sprite("door2"), area(), origin("bot"), "door", ], // porte 3 "3": () => [ sprite("door3"), area(), origin("bot"), "door", ],
} ;

Placer les portes

Tu vas maintenant pouvoir disperser des portes dans ton niveau. Toujours dans le script level.js, trouve le tableau LEVELS et place des caractères 1, 2 et 3 là où tu le souhaites.

// plan du niveau
const LEVELS = [
  
  // niveau 1
  [
    "    3 " ,
    "   ===" ,
    " #  2 " ,
    "======" ,
  ],
  
  // niveau 2
  [
    "    1 " ,
    "   ===" ,
    " #  3 " ,
    "======" ,
  ],
  
  // niveau 3
  [
    "    2 " ,
    "   ===" ,
    " #  1 " ,
    "======" ,
  ],
  
];

Créer un nouveau composant

Pour que ton joueur puisse utiliser les portes, il nous faut créer un nouveau composant. Rends-toi dans le script component.js et ajoutes-y cette fonction.

// composant permettant aux portes de changer de niveau function door( num = 0 ){ return { number : num - 1 , add(){ onCollide( "player" , "door" , ( p , d ) => { if ( d.number <= LEVELS.length ) { CURRENT_LEVEL = d.number ; } play( "portal" ) ; go( "game" ) ; }) }, } }

Ajouter le nouveau composant

Pour finir, nous devons maintenant ajouter ce nouveau composant aux portes. Dans le script level.js, trouve dans la variable LEVEL_CONFIG le passage où nous avons déclaré les portes, puis ajoute-leur ton nouveau composant.

// porte 1
"1": () => [
  sprite("door1"), 
  area(), 
  origin("bot"), 

  door(1),

  "door",
],

// porte 2
"2": () => [
  sprite("door2"), 
  area(), 
  origin("bot"), 

  door(2),

  "door",
],

// porte 3
"3": () => [
  sprite("door3"), 
  area(), 
  origin("bot"), 

  door(3),

  "door",
],