Outils pour utilisateurs

Outils du site


nsi:tds:pygame:candycrush:start

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
nsi:tds:pygame:candycrush:start [2023/11/07 09:42] goupillwikinsi:tds:pygame:candycrush:start [2023/11/07 16:20] (Version actuelle) – [Ingrédients supplémentaires] goupillwiki
Ligne 3: Ligne 3:
 ===== Présentation ===== ===== Présentation =====
  
-*Mettre une illustration*+{{ :nsi:tds:pygame:candycrush:candy-crush-like.jpg?direct&400 |}} 
 + 
 +La zone de jeu est une grille contenant des items (des bijoux, des fruits...) de différents types et répartis aléatoirement. 
 + 
 +Le principe du jeu consiste à former des groupes d'items semblables. Quand ces groupes sont formés, ils disparaissent, les items du dessus tombent dans l'espace vacant. Éventuellement, on remplit l'espace formé en haut par de nouveaux groupes. 
 + 
 +Pour les groupes et l'interaction souris, il existe différentes approches : 
 +  parfois un groupe est une ligne d'au moins trois items semblables. Parfois c'est un groupe d'au moins 3 items connexes. 
 +  * parfois il suffit de cliquer sur un item pour provoquer la disparition du groupe correspondant, parfois la souris permet de déplacer des items et les groupes sont détectés automatiquement. 
 + 
 +On gagne des points chaque fois que l'on élimine un groupe. Le jeu peut continuer indéfiniment ou bien jusqu'à ce qu'il n'y ait plus d'items ou bien au bout d'un certain temps ou encore au bout d'une certaine quantité d'items supprimés. 
 + 
 +**Vous l'avez compris, derrière le principe général, il y a beaucoup de choix à faire.** 
  
 ===== Faire des choix ===== ===== Faire des choix =====
Ligne 15: Ligne 28:
   * ...   * ...
  
-===== Loader d'image ===== +===== Les modules utiles =====
- +
-Je vous propose un module tout fait pour le chargement d'image dans pygame. +
- +
-Quelques explications : Quand on charge un fichier image, Python doit lancer une demande vers le système d'exploitation qui va devoir aller chercher le fichier sur le disque dur... Un chargement est rapide mais si on doit charger des milliers de fois, on risque d'avoir des ralentissements. +
- +
-On va s'efforcer de ne pas accéder inutilement au système de fichier. Quand un fichier image a été chargé, on garde le contenu dans une mémoire pour ne pas avoir à refaire le chargement la prochaine fois que l'on aura besoin de cette image. +
- +
-C'est le rôle du **Loader**. +
- +
-<code python> +
-# loader.py +
-# créer un sous-dossier images +
-# placer une image defaut.png dans ce sous-dossier +
- +
-import pygame +
- +
-IMAGES = { +
-    "rouge":'la_gemme_rouge.png', +
-    "vert":'la_gemme_verte.png', +
-    "bleu":'la_gemme_bleue.png', +
-}+
  
-FOLDER "./images/"+==== Le loader ====
  
-loaded = {}+Je vous propose un module tout fait pour le chargement d'image dans pygame : [[.:loader]]
  
 +==== Module pour un item ====
  
-def load(name): +Dans pygame, chaque type de sprite doit correspondre à un objet défini dans un module.
-    """ +
-    accède à l'image d'identifiant name. +
-    si l'image n'est pas déjà dans loaded, l'ajoute. +
-    renvoie l'image. +
-    """ +
-    if name not in loaded: +
-        filename = IMAGES.get(name, "defaut.png"+
-        image = pygame.image.load(FOLDER + filename) +
-        image = image.convert_alpha() +
-        loaded[name] = image +
-    return loaded[name] +
-</code>+
  
-Quelques mots d'explications : +**Attention :** dans notre jeu il y aura des items de types différents (bananeceriseorange...) Ces différents items peuvent avoir des caractéristiques différentes (pas la même apparencene donnent pas le même nombre de points...) mais ils ont un fonctionnement globalement similaire.
-  On créera un sous-dossier ''images'' pour contenir les fichier image. +
-  Pour les cas d'erreur, on place une image par défaut dans ce dossier. On l'appelera ''defaut.png'' +
-  * ''IMAGES'' permet d'associer une clé, par exemple ''%%"vert"%%'' à un nom de fichier ''%%"la_gemme_verte.png"%%''. Dans le programme on aura donc plus besoin de se soucier des noms de fichieron pourra se contenter d'indiquer la clé. **Naturellementil faut créer ces fichiers !** +
-  * ''loaded'' gardera en mémoire toutes les images précédemment chargées. +
-  * Lorsque l'on charge une image, on précise le nom de la cléSi l'image correspondante n'est pas déjà chargéeon récupère le nom de fichier, on charge l'image et on la stocke dans ''loaded''.+
  
-Utilisation dans un autre module : Si j'ai besoin de charger l'image ''name'' dans un autre module du projet, il faudra indiquer en début de module :+Dans ce cas on définit un seul module pour tous les items en prévoyant des paramètres pour ajuster les caractéristiques individuelles.
  
-<code python> +[[fruit|Module pour un item]]
-import loader +
-</code>+
  
-Puis au moment de charger :+==== Principal ====
  
-<code python> +Pour achever ce fonctionnement de base, j'ajoute le fichier principal qui contient beaucoup de choses difficiles quand on débute. C'est plus facile quand on a une base à comprendre et compléter.
-image = loader.load(name) +
-</code>+
  
 +[[.:main|Fichier principal]]
  
 +===== Ingrédients supplémentaires =====
  
-====== Module pour une gemme ======+On pourra avoir besoin, selon les choix faits, de certaines fonctionnalités :
  
 +  * Détecter la position du curseur de souris: ''x, y = pygame.mouse.get_pos()''
 +  * Détecter un événement de click : ''pygame.MOUSEBUTTONDOWN'' pour click pressé et ''pygame.MOUSEBUTTONUP'' pour click relâché.
  
nsi/tds/pygame/candycrush/start.1699346568.txt.gz · Dernière modification : de goupillwiki