◆ Portail Antalaha

Annuaire › Code ouvert

Pirogue d'Antalaha - jeu de vanille (p5.js)

tutorial · Voir le site ↗
Connectez-vous pour copier ce site

Code publié par son auteur, en lecture seule. « Copier dans mon espace » crée un nouveau site à vous (non publié) que vous pouvez modifier librement.

js/config.js · 4.3 Ko

/* ============================================================
   config.js - tous les réglages du jeu au même endroit
   ============================================================
   Vous voulez un jeu plus facile ? plus rapide ? Modifiez les
   nombres ci-dessous, rien d'autre !

   IDÉE IMPORTANTE : le jeu est écrit dans un monde LOGIQUE de
   360 x 640 unités (format portrait). Le vrai canevas peut être
   plus petit ou plus grand : on "zoome" l'affichage avec scale()
   (voir sketch.js). Ainsi toutes les positions et vitesses
   ci-dessous restent valables sur n'importe quel écran.
   ============================================================ */

/* ---------- Monde logique ---------- */
const LARGEUR_JEU = 360;
const HAUTEUR_JEU = 640;

/* ---------- Taille du canevas à l'écran (en pixels) ---------- */
const LARGEUR_CANVAS_MAX = 480;   // pas plus large que ça, même sur un grand écran
const LARGEUR_CANVAS_MIN = 220;   // pas plus étroit que ça
const MARGE_VERTICALE = 90;       // hauteur réservée au titre (le canevas doit tenir dans la fenêtre)

/* ---------- Police ---------- */
const POLICE = 'system-ui, -apple-system, "Segoe UI", sans-serif';

/* ---------- États du jeu (machine à états) ----------
   Le jeu est toujours dans UN SEUL de ces trois états. */
const ETATS = {
  MENU: 'menu',   // écran d'accueil
  JEU: 'jeu',     // partie en cours
  FIN: 'fin'      // écran de fin de partie
};

/* ---------- Règles ---------- */
const VIES_DEPART = 3;            // nombre de vies
const INVULNERABILITE = 1.5;      // secondes sans dégâts après un choc
const POINTS_GOUSSE = 1;
const POINTS_GOUSSE_DOREE = 5;
const PROBA_DOREE = 0.1;          // 10 % des gousses sont dorées
const DELAI_REJOUER = 0.7;        // secondes avant de pouvoir relancer (évite un appui involontaire)

/* ---------- Rives (bandes de sable à gauche et à droite) ---------- */
const RIVE = 44;                  // largeur approximative de chaque rive

/* ---------- Pirogue ---------- */
const PIROGUE = {
  y: 520,                // position verticale fixe (le doigt reste sous le bateau)
  longueur: 84,          // taille du dessin
  largeur: 22,
  vitesseClavier: 340,   // unités par seconde avec les touches
  vitesseTactile: 620    // vitesse maximale pour rejoindre le doigt
};

/* ---------- Difficulté progressive ----------
   La difficulté "d" va de 0 (début) à 1 (au bout de dureeMax secondes).
   Chaque valeur est calculée entre sa valeur "Min" (facile) et "Max" (difficile)
   avec lerp(). */
const DIFFICULTE = {
  dureeMax: 80,                 // secondes pour atteindre la difficulté maximale
  vitesseMenu: 70,              // vitesse de défilement dans les menus
  vitesseMin: 170,              // défilement de l'eau (unités/s) au début
  vitesseMax: 380,              // ... et à la fin
  intervalleObstacleMin: 1.45,  // secondes entre deux obstacles, au début
  intervalleObstacleMax: 0.6,   // ... et à la fin (plus fréquent)
  intervalleGousseMin: 1.0,
  intervalleGousseMax: 1.3,
  probaVagueMin: 0.2,           // part d'obstacles qui sont des vagues (le reste = rochers)
  probaVagueMax: 0.5,
  secondesParNiveau: 15         // pour l'affichage « Niveau n »
};

/* ---------- Couleurs (hexadécimal) ---------- */
const COULEURS = {
  eauHaut: '#1d86b5',
  eauBas: '#0d557f',
  ecume: '#ffffff',
  sable: '#e8d09a',
  sableMouille: '#c9ae75',
  palmeClair: '#3f8f3a',
  palmeFonce: '#2a6a2c',
  coque: '#9a6330',
  coqueContour: '#5a3513',
  coqueInterieur: '#6f4420',
  balancier: '#b67a3d',
  chapeau: '#e9d27a',
  pagaie: '#7a4a1e',
  gousse: '#3b2314',
  gousseDoree: '#e6a800',
  rocher: '#6b7078',
  rocherClair: '#9aa0a8',
  vague: '#7fd0f0',
  coeur: '#ff5c6c',
  texte: '#ffffff',
  texteSombre: '#1b2a36',
  bouton: '#ffb703',
  record: '#ffd23f'
};

/* ---------- Stockage du record ---------- */
const CLE_RECORD = 'pirogue-antalaha-record-v1';
const CLE_MUET = 'pirogue-antalaha-muet-v1';

/* ---------- Sons (fichiers du dossier medias/) ----------
   On les charge avec new Audio(...) (p5.sound n'est pas disponible). */
const SONS_FICHIERS = {
  clic: 'medias/clic.wav',
  piece: 'medias/piece.wav',
  succes: 'medias/succes.wav',
  erreur: 'medias/erreur.wav',
  victoire: 'medias/victoire.wav'
};
const VOLUME_SONS = 0.6;          // de 0 (muet) à 1 (maximum)