IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Codes sources à télécharger Delphi Discussion :

[FMX] Jeu de plateforme en 2D


Sujet :

Codes sources à télécharger Delphi

  1. #1
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 661
    Points : 3 630
    Points
    3 630
    Billets dans le blog
    2
    Par défaut [FMX] Jeu de plateforme en 2D
    Bonjour,

    Dans ce nouveau projet, je vous propose un petit jeu de plateforme à l'ancienne (en 2D) réalisé avec Delphi et Firemonkey.
    Le zip joint contient l'exécutable (pour Windows), les graphismes (ne sont pas de moi, vous trouverez les informations dans le fichier readme.txt présent dans le zip), un niveau (fichier json) et les sources du projet.

    Je n'ai utilisé que les composants fournis en standard avec Delphi (réalisé sous Delphi Sydney) et aucun moteur de jeu. Ce projet permet de voir plusieurs choses :
    - lecture d'un fichier JSON (qui contient toutes les informations du niveau);
    - scrolling parallax (défilement sur plusieurs plans);
    - gestion des plateformes (fixes ou animées);
    - gestion des ennemis;
    - gestion des animations;
    - le joueur incarne un petit renard qui peut se déplacer vers la droite ou la gauche (avec les flèches du clavier), se baisser (flèches du bas) et sauter (touche espace).

    L'objectif est d'arriver à la fin du niveau en ayant récupéré les 5 rubis présents dans le niveau. Il vous faudra éviter des ennemis. Attention si vous les touchez, vous perdrez une vie et vous recommencerez au début du niveau. Vous pourrez trouver des cerises. Si vous avez au moins une cerise, vous pouvez vous faire toucher une fois par un ennemi : vous perdrez alors vos cerises mais pas de vie et vous ne recommencerez pas au début du niveau.

    Les graphismes que j'ai pris sont basés sur des tiles de 16x16 pixels. La fiche est donc dimensionnée arbitrairement à 400x224 pixels (soit 25 tiles par ligne et 14 lignes) et sa taille n'est pas modifiable à l'exécution. Par défaut dans le code, j'ai positionné une variable scale à 2. Cela va multiplier par 2 l'affichage. Vous pouvez modifier cette valeur mais plus vous allez grossir, plus les graphismes seront grossis et donc moins beau (avis personnel).

    Voici une capture d'écran du jeu :
    Nom : FMXPlateformer.png
Affichages : 401
Taille : 125,7 Ko

    Et voici le ZIP : FMXPlateformer.zip

    Enjoy
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    excellent, ça me rappelle mon GameKit pour Turbo Pascal

    http://tothpaul.free.fr/sources.php?bp7.gamekit
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Excellent ! Merci pour le partage.

    Il manque l'unité uGBEImageUtils dans les sources, mais je suppose que ça correspond à https://github.com/gbegreg/GBE3D/blo...ImageUtils.pas ?

    Je me suis plongé dans tes sources pour voir comment tu avais fait et j'ai des questions sur les raisons de tes choix de composants, comment tu as dessiné le niveau pour en faire un JSON, pourquoi être passé par une animation (idée géniale) plutôt qu'un thread ou timer...

    S'il y a de la demande par ici, te sentirais tu de faire un live sur Twitch en Zoom avec partage d'écran pour montrer le jeu, expliquer le code et en discuter ?

  4. #4
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 661
    Points : 3 630
    Points
    3 630
    Billets dans le blog
    2
    Par défaut
    Bonjour Patrick,

    Je viens de corriger le zip : j'ai rajouté l'unité manquante. Effectivement cette unité est fournie avec mes composants GBE3D mais je viens de la rajouter quand même dans le zip pour celles et ceux qui ne voudraient pas installer GBE3D.

    Ce projet est un exemple qui demande à être amélioré. J'ai utilisé uniquement des composants standards pour montrer qu'il était possible de réaliser de petits jeux sans avoir recours à un moteur particulier (certes bien plus puissant mais aussi plus lourd). En tant que développeur, c'est ce qui est sous le capot qui m'intéresse
    De plus, en montrant que la création de jeux peut être facile avec Delphi, je me dis que ça peut attirer de nouvelles personnes...

    Ce projet est donc une ébauche qui pourrait me servir de base pour faire des jeux en 2D (plateformes, shoot them up... à scrolling horizontal ou vertical) lors de futures gamejams par exemple
    Le fait d'externaliser entièrement la configuration d'un niveau dans un fichier à part permettrait par exemple de fournir un jeu gratuitement puis de facilement proposer de nouveaux niveaux via une option d'achat "in-app" (tant qu'à faire, on ne sait jamais )

    Le fichier json a été fait manuellement, mais l'objectif est de faire un logiciel qui génère ce fichier pour constituer les niveaux facilement. D'ailleurs la constitution du fichier json doit respecter quelques règles et le générer via un outil permettrait d'être certain que le fichier json produit respecte bien ces règles.

    En gros, le fichier json contient :
    - les propriétés du niveau;

    - la position du joueur au départ (en X et Y);

    - la gravité à appliquer (cela influence les sauts);

    - les différents scrollings à afficher (l'image qui sera associée au plan, sa vitesse de déplacement par rapport à la vitesse de déplacement du joueur, sa position, son échelle, et le zorder). Pour le zorder, il y a une règle : il faut déclarer dans le fichier json les plans dans l'ordre suivant : de celui le plus au fond à celui le plus proche de l'écran. Le zorder 0 correspond au plan du niveau où seront placer le joueur, les décors, les bonus, les ennemis et les plateformes. Un zorder positif indique que le plan sera en arrière plan par rapport au plan du niveau et un zorder négatif indique que le plan sera devant le plan du niveau.

    - les plateformes possibles (plateformElement). Pour chaque plateforme, on indique dans "image" les indices des tiles constituant la plateforme. Les tiles étant des blocs de 16x16 pixels de l'image définie dans "tileImage". Dans cette version, une plateforme ne peut faire qu'une hauteur de 1 tile... On peut également préciser le style de la plateforme (seul le paramètre 2 est pris en compte dans cette version). J'ai été optimiste j'ai prévu que les tiles pouvaient avoir de nombreux styles (voir l'enum TTileStyle) mais je n'ai géré pour le moment que le style TTileStyle.blocHaut (l'indice 2)). Ce style sert pour la détection des collisions et le TTileStyle.blocHaut signifie que seul le haut du tile est à prendre en compte lors de la détection de collision. Enfin, pour les plateformes, on peut définir une animation. Dans ce cas, une syntaxe particulière est nécessaire : les paramètres de l'animation sont séparés par des ":". Le premier paramètre correspond la propriété de l'animation (x l'animation se fera sur la propriété position.X de la plateforme, y l'animation se fera sur la propriété position.Y de la plateforme, o l'animation se fera sur la propriété opacity de la plateforme etc...), le second paramètre est la durée de l'animation, le troisième correspond à la valeur de fin de l'animation,le 4ème est l’interpolation à utiliser, le 5ème le type d'animation, le 6ème est un flag "loop" ou "noloop" et indique si l'animation boucle indéfiniment ou non et le 7ème est aussi un flag "autoreverse" ou "noautoreverse" indiquant si l'animation s'inverse ou non à la fin.

    - les éléments de décors (decorElement). Il s'agit d'image qui ne sont pas dans l'image "tileImage" mais qui seront affichées sur le plan du niveau;

    - les bonus (bonusElement) il s'agit d'image et plus particulièrement d'une animation TBitmapListAnimation. Il faut indiquer le fichier d'image, le nombre d'image constituant l'animation et la durée de l'animation souhaités;

    - les ennemis (ennemiElement) il s'agit là aussi de TBitmapListAnimation auquel on peut ajouter une autre animation (deplacement : même syntaxe que les animations d'une plateforme). Il peut y avoir 2 fichiers images à renseigner par exemple dans le cas ou l'ennemi devra faire demi tour;

    - la définition du niveau (niveau) qui contient 4 sous éléments :
    * "decor" où chaque élément du décor est séparé par un ";" et est constitué de 3 valeurs séparées par des ":" : la première est l'indice de "decorElement", la seconde est l'indice de la ligne où il sera placé (par défaut, il y a 14 lignes chaque ligne faisant une hauteur de 16 pixels), la troisième est l'indice en X (sachant que lpar défaut aussi il s'agit de bloc de 16 pixels de large). Il y a une petite astuce concernant la première valeur : si on met T25 par exemple, alors on n'ira pas chercher l'image dans "decorElement" mais ça sera dans la "tileImage" qu'on ira chercher la 25 ème tile.
    * "plateformes" même principe que pour le décor sauf que là on va indiquer où placer les plateformes. Pour chaque plateforme on va indiquer son indice dans "plateformeElement" puis sa position en Y et X (toujours en multiple de tileSize soit 16 pixels dans l'exemple);
    * "bonus" vous l'aurez deviné, c'est la même chose mais pour placer les bonus;
    * "ennemis" vous l'aurez deviné, c'est la même chose pour placer les ennemis;

    Cela n'est pas très évident à expliquer comme ça et ça fait un gros pavé à lire...

    L'utilisation des animations est très pratique et elles sont déjà "threadées".

    Pas de souci si ça intéresse du monde pour un live sur Twitch

    J'ai mis une petite vidéo du jeu sur ma chaine Youtube :
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  5. #5
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 661
    Points : 3 630
    Points
    3 630
    Billets dans le blog
    2
    Par défaut
    Et pour info, mon meilleurs temps pour finir le niveau est de 45 secondes
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

Discussions similaires

  1. Pouki, un jeu de plateformes
    Par moejul dans le forum Projets
    Réponses: 11
    Dernier message: 17/01/2008, 17h50
  2. Delphi appliqué pour un jeu de plateforme
    Par Tsukaasa dans le forum Delphi
    Réponses: 2
    Dernier message: 30/01/2007, 22h00
  3. réalisation d'un chat-jeu de plateforme 2d
    Par Dr Gang dans le forum Flash
    Réponses: 3
    Dernier message: 13/09/2006, 17h21
  4. Réponses: 4
    Dernier message: 02/08/2006, 19h02
  5. [FLASH MX2004] Correctif jeu de plateforme
    Par sourivore dans le forum Flash
    Réponses: 6
    Dernier message: 18/05/2006, 16h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo