GrnGame est un moteur de jeu 2D performant pour Python, conçu spécifiquement pour le pixel art.
Project description
GrnGame est un moteur de jeu 2D performant pour Python, conçu spécifiquement pour le pixel art.
PYTHON SUPPORTE : 3.11 ,3.12,3.13
Avec une gestion optimisée des sprites (batch rendering) et une API intuitive inspirée de pyxel et pygame, vous pouvez créer des jeux fluides et légers facilement.
Spécifications
- Fonctionne sur Windows et Linux
- Programmation en Python 3.8+
- Rendu optimisé avec Batch Rendering
- Audio multicanal (32 canaux simultanés)
- Entrées complètes (Clavier, Souris, Manettes)
- Support des polices personnalisées (Bitmap fonts)
- Physique 2D intégrée (Platformer)
- Compilation facile en exécutable
Installation
Via PyPI
pip install GrnGame
Depuis les sources
Si votre système nécessite une compilation native (ex: Linux spécifique), GrnGame utilisera automatiquement xmake.
# 1. Installe xmake si nécessaire
GrnGame_xmake
# 2. Relancez votre terminal, puis lancez votre script
python main.py
Utilisation Rapide
Dans votre script Python, importez GrnGame, définissez une fonction update, et initialisez le moteur.
import GrnGame
def update():
# Dessiner un sprite
GrnGame.image.dessiner("./assets/player.png", 10, 10, 32, 32)
# Entrées clavier (Noms des touches anglaises: 'space', 'enter', etc.)
if GrnGame.clavier.juste_presse("space"):
GrnGame.son.jouer("./assets/jump.wav")
# Quitter
if GrnGame.clavier.juste_presse("escape"):
GrnGame.utils.stopper_jeu()
# Initialiser le jeu
GrnGame.utils.init(
largeur=160, # Résolution virtuelle
hauteur=90, # Résolution virtuelle
fps=60, # Images par seconde cible
coeff=4, # Échelle de la fenêtre
chemin_image="./assets", # Dossier racine des images
chemin_son="./assets", # Dossier racine des sons
update_func=update, # Fonction de boucle
nom_fenetre="Mon Jeu",
chemin_erreur="erreurs/err.log" # Chemin vers les logs d'erreurs
)
Modules Disponibles
GrnGame expose les modules suivants :
GrnGame.utils- Utilitaires systèmeGrnGame.const- Constantes du jeuGrnGame.image- Rendu graphiqueGrnGame.clavierouGrnGame.keyboard- Entrées clavierGrnGame.manetteouGrnGame.controller- Entrées manetteGrnGame.sonouGrnGame.song- Gestion audioGrnGame.platformer_2d- Physique 2D pour plateformes
Référence API
Système & Constantes (GrnGame.const, GrnGame.utils)
Constantes
-
largeur,hauteur
La largeur et la hauteur de la résolution virtuelle. -
dt
Le temps écoulé entre deux frames (Delta Time). -
fps
Le nombre d'images par seconde actuel. -
time
Le nombre total de frames écoulées depuis le démarrage. -
souris_x,souris_y
Position de la souris relative à l'écran virtuel. -
mouse_presse
RenvoieTruesi le bouton gauche de la souris est enfoncé. -
mouse_juste_presse
RenvoieTruesi le bouton gauche de la souris vient d'être pressé ce frame. -
mouse_droit_presse
RenvoieTruesi le bouton droit de la souris est enfoncé. -
mouse_droit_juste_presse
RenvoieTruesi le bouton droit de la souris vient d'être pressé ce frame. -
decalage_x,decalage_y
Le décalage actuel de la caméra (coordonnées du coin supérieur gauche). -
en_marche
RenvoieTruesi le jeu est en cours d'exécution.
Utilitaires
-
init(largeur, hauteur, fps, coeff, chemin_image, chemin_son, bande_noir, update_func, nom_fenetre, chemin_erreur)
Initialise la fenêtre et le moteur. -
stopper_jeu()
Ferme proprement le moteur et la fenêtre. -
redimensionner_fenetre()
Bascule entre le mode fenêtré et le plein écran. -
colorier(r, g, b)
Applique une teinte de couleur RGB à tous les rendus suivants. -
ecrire_log(type_erreur, message)
Écrit un message dans les fichiers de logs. Types disponibles :"info","debug","avertissement","erreur". -
changer_log(niveau)
Change le niveau de journalisation. Niveaux disponibles :"info","debug","avertissement","erreur". -
platformer_2d(dt, pos_x, pos_y, vitesse_y, en_air, larg_joueur, haut_joueur, blocs, [gravite], [force_saut], [vitesse_max_chute], [correction_mur], [activer_saut])
Physique 2D intégrée pour les jeux de plateforme. Gère la gravité, les sauts, et les collisions avec les blocs. Renvoie un tuple(nouvelle_pos_x, nouvelle_pos_y, nouvelle_vitesse_y, nouveau_en_air).dt: Delta time (utiliserGrnGame.const.dt)pos_x,pos_y: Position actuelle du joueurvitesse_y: Vitesse verticale actuelleen_air:Truesi le joueur est en l'airlarg_joueur,haut_joueur: Dimensions du joueurblocs: Liste de rectangles[(x, y, w, h), ...]représentant les collisionsgravite: Force de gravité (défaut: 400.0)force_saut: Force du saut, valeur négative (défaut: -200.0)vitesse_max_chute: Vitesse maximale de chute (défaut: 500.0)correction_mur: Distance de correction lors d'une collision murale (défaut: 100.0)activer_saut:Truepour effectuer un saut ce frame
Graphismes (GrnGame.image)
-
dessiner(lien, x, y, w, h, [sens], [rotation], [transparence])
Dessine une image à la position donnée.senspermet d'inverser l'image (0=normal, 1=miroir horizontal). -
dessiner_batch(ids, xs, ys, ws, hs, [sens], [rotations], [transparence])
Dessine une liste d'images en un seul appel GPU pour des performances maximales. -
dessiner_forme(x, y, w, h, [sens], [rotation], [transparence], [r], [g], [b])
Dessine un rectangle coloré (uni ou avec transparence). -
dessiner_forme_batch(xs, ys, ws, hs, [sens], [rotations], [transparences], [rs], [gs], [bs])
Dessine une liste de rectangles colorés en un seul appel GPU. -
dessiner_mot(lien_police, mot, x, y, coeff, ecart, [sens], [rotation], [alpha])
Affiche du texte en utilisant une police bitmap (dossier d'images PNG).lien_police: Chemin vers le dossier contenant les caractères (ex:"./fonts/ma_police/")mot: Texte à afficherx,y: Position du textecoeff: Échelle du texteecart: Espacement entre les caractèressens: Inversion horizontale (0=normal, 1=miroir)rotation: Rotation en degrésalpha: Transparence (0-255)
-
charger_toutes_les_textures(dossier)
Précharge toutes les images d'un dossier en mémoire pour de meilleures performances. -
charger_tous_les_sons(dossier)
Précharge tous les sons d'un dossier en mémoire. -
liberer_gestionnaire_image()
Libère toutes les textures chargées de la mémoire. -
liberer_gestionnaire_son()
Libère tous les sons chargés de la mémoire.
Créer une Police Bitmap Personnalisée
Pour créer votre propre police bitmap :
-
Créez un dossier pour votre police (ex:
fonts/ma_police/) -
Ajoutez vos images de caractères :
- Un fichier PNG par caractère
- Nommez chaque fichier avec son code ASCII (ex:
65.pngpour 'A',97.pngpour 'a') - Toutes les images doivent avoir la même taille pour un rendu optimal
-
Structure d'exemple :
fonts/ └── ma_police/ ├── 32.png (espace) ├── 33.png (!) ├── 65.png (A) ├── 97.png (a) └── ... -
Utilisation :
# Le chemin est simplement le nom du dossier GrnGame.image.dessiner_mot("fonts/ma_police", "Hello!", 10, 10, 2, 1)
Codes ASCII utiles :
32: Espace33-47: Ponctuation (!, ", #, $, %, etc.)48-57: Chiffres (0-9)65-90: Lettres majuscules (A-Z)97-122: Lettres minuscules (a-z)
Audio (GrnGame.son ou GrnGame.song)
-
jouer(lien, [boucle], [canal], [volume])
Joue un son.wav.boucle: Nombre de répétitions (-1 pour infini, 0 pour une seule lecture)canal: Canal audio (0-31, ou -1 pour choix automatique)volume: Volume de lecture (0-128, défaut: 64)
-
arreter(lien)
Arrête la lecture d'un son spécifique. -
arreter_canal(canal)
Stoppe tous les sons sur un canal spécifique (0-31). -
pause(lien)
Met en pause un son spécifique. -
pause_canal(canal)
Met en pause tous les sons sur un canal spécifique. -
reprendre(lien)
Reprend la lecture d'un son mis en pause. -
reprendre_canal(canal)
Reprend la lecture de tous les sons mis en pause sur un canal spécifique.
Entrées (GrnGame.clavier / GrnGame.keyboard, GrnGame.manette / GrnGame.controller)
Clavier
-
juste_presse(touche)
RenvoieTruesi la touche vient d'être pressée ce frame. (Ex: "space", "a", "up") -
enfoncee(touche)
RenvoieTruetant que la touche est maintenue.
Liste complète des touches supportées
Lettres : a à z
Chiffres : 0 à 9
Navigation :
- Flèches :
up,down(oudn),left(oult),right(ourt) - Page :
home,end,pageup(oupgup),pagedown(oupgdn)
Système :
space,enter(oureturn),tab,backspaceescape(ouesc),delete,insert
Modificateurs :
- Shift :
shift,lshift,rshift - Ctrl :
ctrl(oucontrol),lctrl,rctrl - Alt :
alt,lalt,ralt - Caps :
caps,capslock numlock,scrolllock
Touches fonction : f1 à f12
Spéciales :
pause,break,print(ouprtscr,printscreen)sysreq,menu,application
GUI/Système :
- Windows :
lwin,rwin,lgui,rgui - Super :
lsuper,rsuper - Mac :
lcmd,rcmd
Pavé numérique :
- Chiffres :
kp0àkp9 - Opérateurs :
kp+(oukpplus),kp-(oukpminus),kp*(oukpmultiply),kp/(oukpdivide) - Autres :
kp=(oukpequals),kp.(oukpperiod),kpenter(oukpe)
Média :
- Volume :
mute(ouaudiomute),volumeup(ouvolup,audioup),volumedown(ouvoldown,audiodown) - Contrôle :
play(ouaudioplay,mediaplay,playpause),stop(ouaudiostop,mediastop) - Navigation :
next(ouaudionext,medianext),previous(ouprev,audioprev,mediaprev)
Navigateur :
browserback,browserfwd,browserstopbrowserhome,browserrefresh,browsersearch
Énergie : power, sleep
Caractères spéciaux : -, =, [, ], ;, ', ,, ., /, `, \
Manette
-
init([index])
Initialise la manette.indexspécifie quelle manette utiliser (0 pour la première, défaut: 0). -
enfoncee(bouton)
RenvoieTruesi le bouton de la manette est maintenu. (Ex: "a", "b", "start") -
juste_presse(bouton)
RenvoieTruesi le bouton de la manette vient d'être pressé ce frame. -
renvoie_joysticks([dead_zone])
Renvoie les axes des sticks et gâchettes sous forme de liste[lx, ly, rx, ry, lt, rt].- Valeurs entre -1.0 et 1.0 pour les sticks
- Valeurs entre 0.0 et 1.0 pour les gâchettes
dead_zone: Seuil pour ignorer les petites déviations (défaut: 0.1)
-
fermer()
Ferme la connexion avec la manette.
Boutons de manette supportés
Boutons faciaux : a, b, x, y
Système : start, back, select, guide, home, share
Bumpers : lb, rb, l1, r1
Sticks cliquables : l3, r3
D-Pad : up, down, left, right
Additionnels : paddle1, paddle2, paddle3, paddle4, touchpad
Valeurs des axes :
- Retourne 6 valeurs flottantes entre -1.0 et 1.0
dead_zone: seuil pour ignorer les petites déviations (défaut: 0.1)- Ordre : stick gauche X/Y, stick droit X/Y, gâchette gauche, gâchette droite
Compilation
Pour créer un exécutable autonome de votre jeu :
# Créer un exécutable (Windows .exe ou Linux binaire)
GrnGame_app mon_jeu.py --noconsole --icon mon_icone.ico
L'exécutable sera généré dans le dossier courant.
Licence
GrnGame est sous licence MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file grngame-2.0.0.post3.tar.gz.
File metadata
- Download URL: grngame-2.0.0.post3.tar.gz
- Upload date:
- Size: 12.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
612357e4725de7bc99f63bdbb9ec2b06d61235e312052fb88cebfb1a1ccc040a
|
|
| MD5 |
cb1e829a4d45b283ec9988b884f4f067
|
|
| BLAKE2b-256 |
81e79f7127dc4aa4e3ac6435d9af728c32941730bba32bc5964d8a88cd3b4af3
|
File details
Details for the file grngame-2.0.0.post3-py3-none-any.whl.
File metadata
- Download URL: grngame-2.0.0.post3-py3-none-any.whl
- Upload date:
- Size: 13.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2ef6d22fbc33cb2b4d0a3ef945730a069dd5c019df02833b8da933598f930df8
|
|
| MD5 |
71e3ad48b8214b3463e52e3dacd40004
|
|
| BLAKE2b-256 |
954213725c6fd5e9e712ec0cc3406ed942b9bbbefd081b700edbff288f4298d1
|