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

Langage C++ Discussion :

inclure dynamiquement un fichier


Sujet :

Langage C++

  1. #1
    Inactif  
    Homme Profil pro
    Collégien
    Inscrit en
    Octobre 2012
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Octobre 2012
    Messages : 78
    Points : 0
    Points
    0
    Par défaut inclure dynamiquement un fichier
    Bonjour, est-ce qu'on peut faire ce code-ci? :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <string>
    #include <iostream>
    using namespace std;
    int main()
    {
    cout << "Quel fichier voulez-vous inclure?" << endl;
    string input;
    cin >> input
    #include input
    }
    En gros, je crée un jeu et les différentes maps sont sous forme de code source .cpp, qui fournit différentes variables, fonctions et classes au jeu, mais pour que le jeu soit facilement moddable, je devrait inclure un système qui inclurait dynamiquement différents maps au jeu.

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 438
    Points
    2 438
    Par défaut
    Bonjour.

    La réponse est non.
    Les directives précédées d'un # sont interprétées par le préprocesseur, avant l'étape de compilation du code et du linkage.
    À l’exécution du code, ces directives n'existent même plus.

    Avant le préprocesseur, le compilateur verra ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include <iostream>
    int main() {
        return 0;
    }
    Après l'étape du préprocesseur, le compilateur verra ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    -- Le contenu du fichier iostream --
    int main() {
        return 0;
    }
    Et à l’exécution, il ne reste plus que du code machine.

    Pour faire un système de niveaux, tu devras lire des maps dans des fichiers avec les fonctions/classes qui vont bien (std::getline(), std::ifstream), définir le format de données et vérifier que lesdits fichiers aient le bon format.
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  3. #3
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Cela dit, c'est un problème intéressant. Si un développeur souhaite que les ressources (dans le sens des données) de son appli soient inclues dans le binaire (l'exécutable), comment faire. Je vois plusieurs bonne raisons de vouloir faire cela, d'ailleurs certains studios, comme Blizzard pour ne citer qu'eux, font ça.
    Mais quelle que soit la technique choisie, il y a une contrainte évidente: il faut savoir, à la compilation, quelles sont les données qu'on veut "cacher" dans le binaire compilé.

    La question de l'ouverture du jeu (faire un jeu "moddable") est aussi une question très intéressante. Mais il faut savoir que le c++ n'est pas un langage très dynamique (c'est la rançon de sa rapidité au runtime), et donc ce problème n'est pas simple en c++. Deux solutions principales:
    1- Le moddeur modifie directement le code du jeu lui-même. L'idée est qu'il rajoutera des classes qui dériveront d'interfaces et qui utiliseront des APIs publiques, mais il devra tout recompiler.
    Cette méthode a de nombreux inconvénients, mais elle peut parfois (rarement certes) suffire et elle a l'énorme avantage d'être la plus simple.
    2- Le moddeur génère une bibliothèque dynamique (dll sous windows, .a sous *nux). C'est la méthode de loin la plus répandue, mais elle nécessite une organisation qui peut être complexe selon ce qu'on veut faire exactement.
    Le fonctionnement "standard' d'un mod dans un binaire indépendant c'est l'enregistrement: au chargement de la bibliothèque, celle-ci appelle une fonction Register() qui va fournir au programme principal tout ce dont ce dernier à besoin pour gérer cette dépendance dynamique supplémentaire.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    3- le jeu propose une interface de scripting et permet de charger des scripts (les add-ons de WoW, Skyrim, ..)
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Inactif  
    Homme Profil pro
    Collégien
    Inscrit en
    Octobre 2012
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Octobre 2012
    Messages : 78
    Points : 0
    Points
    0
    Par défaut
    Ou alors, je fais quelquechose de ce genre :
    1. Chaque fichier du code sera double : un qui sera compilé et un autre qui ne sera PAS compilé
    2. Quand un joueur me dit "Utilise le mod machintruc", le programme va recompiler tout le code, mais avec le #include "machintruc.cpp"
    3. Puis le jeu moddé s'éxécute

    Autre technique : Comment on fait pour inclure tout un dossier d'un coup?

    Sinon comment on fait pour les .a?

  6. #6
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Oublie cette idée de recompiler le code.

    (D'ailleurs on inclus des .h et pas de .cpp )

    Les méthodes 2 et 3 proposées (dll et scripting, genre Lua ou python) sont les meilleures.

    Il sera plus difficile de permettre un mod qui change complètement le gameplay en Lua, mais c'est aussi plus simple à mettre en place et de petites modifications peuvent se faire plus facilement. (l'UI et l'IA sont des domaines où le Lua est par exemple souvent utilisé).

    Pour les DLL, il faut voir ça comme un plug-in qui vient s'ajouter au jeu, plus lourd à mettre en place, mais si c'est bien fait il n'y à quasiment aucune limite à ce qui peut être moddé.

  7. #7
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    En ce qui concerne les scripts, j'entends beaucoup parler de angelscript en ce moment. Mais je n'y connais rien dans ces choses-là alors je ne sais pas en dire plus.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  8. #8
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    Salut,

    Je connais pas angelscript, mais lua et squirrel sont des valeurs sûres...

    EDIT:

    Quand je m'étais intéressé à la question «lua vs squirrel», j'avais lu un article très intéressant, mais je ne suis pas sûre du lien que je viens juste de parcourir -> lua and squirrel .

Discussions similaires

  1. [VS2005]Inclure seulement certains fichiers dans une .lib
    Par NicolasJolet dans le forum Visual C++
    Réponses: 2
    Dernier message: 28/07/2006, 09h14
  2. [Servlet] Lire dynamiquement un fichier de propriétés
    Par n@n¤u dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 04/05/2006, 15h52
  3. allocation dynamique et fichier binaire
    Par issou dans le forum C
    Réponses: 9
    Dernier message: 16/10/2005, 00h46
  4. Créer dynamiquement un fichier XML
    Par sigap dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 26/07/2005, 12h53
  5. [SQL*Plus] génération dynamique du fichier de spool
    Par lalystar dans le forum Oracle
    Réponses: 3
    Dernier message: 06/12/2004, 10h44

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