Article     Discussion     Modifier     Historique     Forums     Salon IRC

Réaliser un RPG en C avec SDL et FMOD

Un article de Games Creators Network.


Sommaire



[modifier] Avant-propos

Schéma de gestion des sprites

Le but de cette page est d'arriver, étape par étape, à réaliser toutes les tâches de programmation menant à la conception d'un RPG en 2D.

Le jeu sera écrit en C et utilisera deux librairies:

  • SDL pour l'affichage
  • FMOD pour l'audio (musique et son)

Le rendu final du jeu sera proche des jeux Final Fantasy sur SNES. Tous les méchanismes de base seront implémentés, cependant l'accent ne sera pas mis sur la création d'un gameplay permettant au jeu d'être intéressant. Par exemple, le système de magie pourra gérer plusieurs dizaines de magies mais seulement deux ou trois seront fournies avec les démos. Libre à vous de développer la jouabilité de ce noyau de jeu afin d'arriver à vos fins.


De plus, le code source fourni tente de rester le plus simple possible. Les solutions les plus complexes et les plus optimisées seront implémentées à la fin de la série dans des étapes spéciales. Le but est de ne pas exclure dès le départ des lecteurs potentiels par la difficulté du code.


Bonne lecture!


[modifier] Avertissement

Attention!

Toutes les connaissances nécessaires à la conception d'un jeu ne peuvent être acquises en une seule fois. Une connaissance du C est requise pour la bonne compréhension de cet article. Les liens vers d'autres articles du wiki qui sont insérés dans ces pages peuvent vous aider à combler vos lacunes, n'hésitez pas à les consulter.


[modifier] L'évolution du jeu en images


[modifier] Les étapes de la création d'un RPG

[modifier] Etape n°1: Préparation

Dev-C++ sera notre environnement de développement et GCC notre compilateur.
Dev-C++ sera notre environnement de développement et GCC notre compilateur.

Dans cette étape, nous installons Dev-Cpp et installons les bibliothèques que nous allons utiliser pour le jeu.

 

[modifier] Etape n°2: Commençons!

SDL est la bibliothèque vidéo de notre projet
SDL est la bibliothèque vidéo de notre projet

Il faut désormais poser les bases du jeu: écrire la fonction Main(), initialiser les bibliothèques, lier les fichiers nécessaires au projet.


 

[modifier] Etape n°3: Les cartes

Démo 1: Génération et affichage d'une carte
Démo 1: Génération et affichage d'une carte

La réalisation des décors est un point important du développement du jeu afin d'obtenir un rendu visuel intéressant au final.


 

[modifier] Etape n°4: L'éditeur de carte

Démo 2: L'éditeur de carte de notre jeu
Démo 2: L'éditeur de carte de notre jeu

L'éditeur de carte va nous permettre de créer des cartes complexes à utiliser dans notre jeu.


 

[modifier] Etape n°5: Les sprites et les collisions

Exemple de planche de sprite
Exemple de planche de sprite

La gestion des sprites permet à notre héros d'apparaître. On peut d'ores et déjà le déplacer à l'aide des touches directionnelles et il ne traverse pas les obstables (murs, caisses, etc.).


 

[modifier] Etape n°6: Les événements et les PNJ

Démo 4: gestion des événements et des pnj
Démo 4: gestion des événements et des pnj

L'ajout d'un PNJ à notre carte est relativement aisé grâce au système que nous avons conçu durant l'étape 5, mais créer de toute pièce un système gérant toute l'interactivité du jeu est un vrai défi!


 

[modifier] Etape n°7: Interface, inventaire et boutiques

Démo 5: gestion des menus, de l'inventaire et des boutiques
Démo 5: gestion des menus, de l'inventaire et des boutiques

Les fondations de notre jeu sont posées: il est temps de compléter notre jeu avec des fonctionnalités totalement inédites tel que: un menu permettant de gérer notre inventaire et les armes et armues équipées, une boutique et même une auberge.



 

[modifier] Etape n°8: Combats, fondus enchaînés et coffre

Démo 6: des combats, des fondus enchaînés et un coffre
Démo 6: des combats, des fondus enchaînés et un coffre

Dans cet article, nous allons ajouter un système très important pour notre jeu: le système de combat. La gestion des fondus enchaînés est également au rendez-vous. Enfin, nous ferons encore un petit peu évoluer notre système d'événement avec l'implémentation d'un nouveau type d'événement permettant de gérer (entre autre) les coffres.



 

[modifier] Ressources


[modifier] Table des matières

  1. Préparation
    1. Installation de Dev-C++
    2. Installation des bibliothèques
    3. Téléchargement des DLL
    4. Structure du programme
    5. Installation des médias et des DLL
  2. Commençons!
    1. Création d'un projet
    2. Le fichier main.c
    3. Initialisation et libération des bibliothèques
    4. Configurer le projet
  3. Les cartes
    1. Création du fichier map.c et map.h
    2. Le type struct s_map
    3. Initialisation et libération de la structure
    4. Génération d'une carte aléatoire
    5. Affichage d'une carte
    6. Sauvegarde d'une carte
    7. Chargement d'une carte
    8. Vers un programme utilisable... la boucle de messages
    9. Démo 1: gestion de la carte avec scrolling
  4. L'éditeur de carte
    1. Scission du projet
    2. Changements dans le type struct t_map
    3. Changements dans InitMap()
    4. Changements dans RandomizeMap()
    5. Changements dans HandleMap()
    6. Changements dans HandleEvent()
    7. Changements dans Main()
    8. Ce que sait faire et ne sait pas faire notre éditeur de carte
    9. Démo 2: l'éditeur de cartes
  5. Les sprites et les collisions
    1. Les sprites
    2. Gestion des collisions
    3. Création des fichiers sprite.c et sprite.h
    4. Implémentation des types
    5. Initialisation et libération des sprites
    6. Chargement statique de données
    7. Sauvegarde des sprites
    8. Chargement des sprites
    9. Affichage des sprites
    10. Changer l'animation d'un sprite
    11. Déplacement d'un sprite et gestion des collisions
    12. Gestion des événements
    13. Modification de la fonction Main()
    14. Démo 3: Sprites et collision
  6. Les événements et les PNJ
    1. Ajouter un PNJ
    2. Gestion du déplacement des PNJ
    3. Le sytème de gestion des événements
    4. Création des fichiers events.c et events.h
    5. Implémentation des types de donnée nécessaires
    6. Initialisation et libération de la structure
    7. Chargement des données statiques
    8. Gestion des événements
      1. Programmation de chaque événement
      2. Gestion des déclenchements
    9. Sauvegarde des événements
    10. Chargement des événements
    11. Création de nouveaux événements
    12. Modifications de la fonction main()
    13. Démo 4: PNJ et événements
  7. Interface, inventaire et boutiques
    1. Rpg2d Generator: un générateur de fichiers .map, .sprite et .event
      1. Conception de l'outil
      2. Comment utiliser cet outil?
    2. La gestion des joueurs
      1. Ajout des fichiers player.c et player.h
      2. Gestion des statistiques des joueurs et de l'inventaire
      3. Initialisation et libération des joueurs
      4. Action associée à chaque objet
    3. L'interface graphique
      1. Installation de SDL_TTF
      2. Ajout des fichiers gui.c et gui.h
      3. La structure s_gui
      4. Afficher un dialogue
      5. Afficher un choix
    4. Le menu
      1. Ecran principal
      2. Affichage de l'inventaire
      3. L'équipement
    5. Modification des événements
      1. Ajout de nos nouveaux événements
      2. L'événement dialog
      3. L'événement shop
      4. L'événement inn
    6. Modification de la fonction main.c
    7. De la différence entre les événements SDL_KEYUP et SDL_KEYDOWN
    8. Démo 5: Menus, inventaire et boutiques
  8. Combats, fondus enchaînés et coffre
    1. Fondus enchaînés
    2. Coffre
      1. Ajout d'un nouvel événement
      2. Conception du coffre (carte et événement)
    3. Game Over
    4. Système de combat tour par tour
    5. Principe général
      1. Ajout des fichiers fight.c et fight.h
      2. Gestion des attaques
      3. Gestion des monstres
      4. Affichage des animations
      5. Affichage des dégâts
      6. Affichage des joueurs et des monstres
      7. Réaliser la fonction gérant le combat
      8. Gestion de l'événement associé
    6. Modification de la fonction principale
    7. Note concernant la portabilité
    8. Démo n°6: combats tour par tour, fondus enchaînés et coffre

[modifier] Aller plus loin

[modifier] Travaux dérivés de ce projet

 

Rechercher
Installer l'extension de recherche Plus d'informations

 

Comprendre
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin

 

Partager
La connaissance est la seule chose qui s'accroit lorsqu'on la partage. - Sacha Boudjema

 

Créer
L'imagination est plus importante que la connaissance. - Albert Einstein

 

 

Le wiki en images Le wiki en images Image du mois: «Snowball: un prototype de jeu développé avec NeL.