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

C++ Discussion :

Editeur de jeu en txt


Sujet :

C++

  1. #1
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut Editeur de jeu en txt
    bonjour,

    voila depuis quelques jours je suis en train d essayer de faire un editeur pour un jeu (RPG).
    Sur l'editeur l'utilisateur pourrait ecrire sous forme de text les scripts
    par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    PNJ &nom&:
    OnInitialize:
    Dire: Bonjour! &targetplayer.name&, ça va? 
    Choix &I&: Oui, Non
    if(&I& == Oui) Dire: Cool :)
    else Dire: Qu'est-ce qui va pas?
    ...
    Le problème c'est que je ne voi pa trop comment filtré tt ca qd pour que le jeu decrypte tout correctement
    Pourriez-vous me donner des idées?
    Merci

  2. #2
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Il te faut un analyseur syntaxique, grammatical et sémantique.

    Pour l'analyseur syntaxique et grammatical, tu peux utiliser flex et bison. Ca permet de faire ça relativement vite. Pour l'analyseur sémantique, c'est propre à chaque langage, donc c'est à toi de le faire.

    Il me semble que maintenant, on utilise des "parseurs" qui font ce genre de chose, mais je ne connais pas.

  3. #3
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    Merci de cette reponse

    par contre, qu'est-ce que flex/bison?
    une classe? lib?
    un lien ptet? ca serait super

    merci d'avance

  4. #4
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    C'est du Linux, et ce sont des outils de programmation:

    http://langevin.univ-tln.fr/CDE/LEXYACC/Lex-Yacc1.html

    Tu dois quand même créer ta propre grammaire. J'ai pas mal de fichier .txt en français à ce sujet, que j'ai trouvé sur le net. Si ça t'intéresse, donnes-moi ton email. Il y a un exemple pour faire une calculatrice, ça peut aider à comprendre le principe.

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu as aussi boost::spirit qui a l'air pas mal (je suis allergique à Flex / Bison), mais il faut un compilateur récent.

    Mais surtout pourquoi ne pas utiliser un langage de script ? Parce que là tu ne devras pas seulement "parser" tes fichiers, mais aussi mettre en place un mecanisme de machine virtuelle pour gerer les variables et fonctions. Bref c'est loin d'être simple.

    Il existe pas mal de langages de scripts, perso j'avais essayé Lua qui est très répandu et bien foutu.

  6. #6
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    Merci aussi je regarde

  7. #7
    Membre chevronné Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Par défaut
    Salut,

    innocemment, , ne pourrait-on pas le faire sous forme de xml, chaque noeud représentant une biffurcation du script.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <PNJ name="nom_utilisateur">
         <OnInitialize display="Bonjour &targetplayer.name&, ça va" >
              <oui display="Cool :)" />
              <non display="Qu'est ce qui va pas ?" >
                     etc ... 
              </non>
          </OnInitialize>
    </PNJ>
    Bon, compte-tenu que je ne sais pas exactement ce que JulienDuSud veut faire, ça ressemble un peu à n'importe quoi.... mais bon peut-être le xml serait-il un bon descripteur... Et dans ce cas tu pourrais utiliser un librairie de parsing de xml comme libxml, ou d'autres.

    Flo.

    A+

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Si c'est purement descriptif alors oui, le XML est un bon choix. Par contre si le script doit s'executer (ie. s'il y a des fonctions et variables à faire tourner sur une machine virtuelle), mieux vaut un bon langage de script.

  9. #9
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    ui mais en fait les variables seront gere cote moteur du jeu

    par exemple, si le scripteur met &player.name& ça sera directement remplacer par le nom du joueur quand le pnj lui parlera
    ce qu'il me faut en fait c es pas le language, mais comment filtrer le script pour ne rien zapper

    PS: Le xml je sais pas du tout comment ca marche mais ca a l air tres interressant
    les balises sont elle dynamique ou faut dire ce quela balise B fait dans le moteur du jeu qui va le lire?

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    ui mais en fait les variables seront gere cote moteur du jeu

    par exemple, si le scripteur met &player.name& ça sera directement remplacer par le nom du joueur quand le pnj lui parlera
    ce qu'il me faut en fait c es pas le language, mais comment filtrer le script pour ne rien zapper
    Dans ce cas il te faut bien un analyseur lexical/syntaxique, voir les réponses précédentes.
    Mais bon je continue à penser qu'un langage de script serait mieux, tu vas t'embêter pour rien là

    PS: Le xml je sais pas du tout comment ca marche mais ca a l air tres interressant Smile
    les balises sont elle dynamique ou faut dire ce quela balise B fait dans le moteur du jeu qui va le lire?
    Tu as des bibloithèques qui parsent ton fichier XML et te renvoient sa structure, mais après à toi d'interpréter les différentes balises et leurs attributs. C'est un langage purement descriptif.

  11. #11
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    +1 à la réponse de loulou. Le XML, franchement non. Vous imaginez si il fallait XMLisé le code C++ que l'on tape dans nos éditeurs ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  12. #12
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    alors j'ai un peu avance mais la je tourne toujour en rond
    en fait c est pas tres complique ce que je cherche mais pour moi ca l 'est

    voila comment je procede:

    un fichier bots.txt qui contient:
    dans mon code, je dis le fichier principale a analyser, soit bots.txt
    pour chaque ligne, il va chercher dans le fichier respectif les donnee du bot (ou pnj comme vous voulez)

    et voici ce que contient par exemple bot1.txt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    	ID = 1
    	NOM = MonNOM
    	VEND = {
    		HERBE VERTE , 1 EURO
    		HERBE ROUGE , 2 EURO
    		HERBE BLEUE , 3 EURO
    	}
     
    	ACHETE = {
    		HERBE VERTE , 50 CENTS
    		HERBGE ROUGE , 1 EURO
    		HERBE BLEUE , 150 CENTS
    	}
     
    	PARLE = {
    		INIT = {
    			DIRE = "Bonjour ! Que puis-je faire pour vous aujourd'hui?"
    		}
     
    		ACHETER = {
    			DIRE = "Voici ce que je vous propose"
    			MONTRER_LISTE_ACHAT
    		}
     
    		VENDRE = {
    			IF( JOUEUR->A_DE_QUOI_VENDRE ) {
    				DIRE = "Voyons voir ce que vous avez"
    				MONTRER_LISTE_VENTE
    			} ELSE {
    				DIRE = "Je ne vois rien d'intérressant chez vous, malheureusement"
    			}
    		}
    	}
    Voici comment je procède :

    Je transforme tout le text en un vector<string> ou chaque entree est une ligne

    ensuite, pour chaque entree j'analyse le texte

    j'arrive a recupere l'id et le nom, mais a partir de la je bloque completement

    pour chaque achat et vente, je veux ajouter les entrees dans un vector<string> mais j'y arrive pas

    merci d'avance

    PS: je poste mon code aussi, on sait jamais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
    #include "StdAfx.h"
    #include ".\npc.h"
    #include "Utils.h"
     
    CNPC::CNPC(void)
    {
    }
     
    CNPC::~CNPC(void)
    {
    }
     
    #define BEGIN_READ( a ) \
    	for(vector<string>::iterator i = a.begin(); i != a.end(); i++) {
     
    #define FUNC \
    	gUtils.Explode( (*i), "=" ).at( 0 )
     
    #define PARAM_0 \
    	gUtils.Explode( (*i), "=" ).at( 1 )
     
    #define END_READ }
     
    CNPC *CNPC::GetInstance( void )
    {
    	static CNPC m_pInstance;
    	return &m_pInstance;
    }
     
    bool CNPC::InterceptMessages( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
    {
    	return false;
    }
     
    void ReadInstructions( vector<string>vIns, NPC *npc )
    {
    	if( npc == NULL || vIns.size() < 1 )
    		return;
     
    	// BEGIN READING SCRIPT HERE
    	BEGIN_READ( vIns )
     
    	if ( FUNC == "ID" ) { 
    		npc->sID = PARAM_0; 
    	} else if ( FUNC == "NOM" ) {
    		npc->sName = PARAM_0;
    	} 
     
    	[color=red]// ICI je dois fair en sorte de lire vendre et acheter et parler pour ajouter chaque entree dans un vecteur separe[/color]
     
    	END_READ
    }
     
    NPC CNPC::LoadNPCData( string & sFile )
    {
    	NPC newNPC;
     
    	ifstream baseFile( sFile.c_str() );
    	vector<string>vInstructions = gUtils.FileToVector( baseFile );
     
    	ReadInstructions( vInstructions, &newNPC );
    	return newNPC;
    }
     
    void CNPC::LoadNPCs( const string &sFile )
    {
    	vector<NPC>vNPCs;
    	string npcFile;
     
    	ifstream baseFile( sFile.c_str() );
    	while( getline(baseFile, npcFile) )
    	{
    		NPC newNPC = LoadNPCData( npcFile );
    		vNPCs.push_back(newNPC);
    	}
     
    	m_vNPC = vNPCs;
    }
     
    void CNPC::NewNPC( void )
    {
    	NPC newNPC;
    	newNPC.sCreature = "Un Monstre";
    	newNPC.sName = "New NPC";
    	newNPC.vScript.clear();
    	newNPC.vBuy.clear();
    	newNPC.vLearn.clear();
    	newNPC.vSell.clear();
    	newNPC.vTrain.clear();
     
    	m_vNPC.push_back(newNPC);
    	// TODO: Show new NPC dialog & update the list of npcs
    }
     
    bool CNPC::DeleteNPC( NPC *npc )
    {
    	bool bDone = false;
    	for( vector<NPC>::iterator i = m_vNPC.begin(); i != m_vNPC.end(); ++i )
    	{
    		if((*i).sName == npc->sName)
    		{
    			m_vNPC.erase(i);
    			bDone = true;
    		}
    	}
    	return bDone;
    }
    Edit: voila ca devrai etre bon la (j edite pour que ca virer des trucs intuiles :p)

  13. #13
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu ne veux absolument pas utiliser un vrai analyseur lexical/syntaxique ou un vrai langage de script ?

    Parce que là t'es parti pour une belle aventure, si tu fais tout à la main.

    Autre conseil : l'abus de macros nuit gravement à la santé du programme(ur). Par exemple ici ça masque très bien le fait que tu vas splitter tes chaînes inutilement ouate-mille fois (si j'ai bien deviné ce que font tes fonctions).

    Dernier conseil : arrête d'éditer ton message toutes les 2 minutes, sinon je vais finir par vraiment répondre à côté de la plaque

  14. #14
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    ben en fait je voudrai bien mais ca devient relativement complique et la complexite c est pas ce que je cherche, vu que l editeur sera utilise par des game designers qui ne doivent pas necessairement apprendre un language pour pouvoir cree des trucks :/

    PS: le probleme n'est pas (loin de la) les fonctions qui vont gere par exemple DIRE ou MONTRER_LIST, il faut juste que j'arrive a formater tout convenablement et c est galere

  15. #15
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    L'ecriture d'un analyseur syntaxique peut se révéler très simple, surtout avec des bibliothèques récentes comme boost::spirit. Je te conseille de regarder sa documentation, et notamment le début pour voir quelques exemples de programmes. Tu verras que ça vaut le coup

    Le langage de script n'est pas non plus à proscrire, en effet les game designers auront quoiqu'il arrive à apprendre un langage (le tien ici). Et en général les langages de script sont justement étudiés pour que les non-programmeurs puissent les utiliser très facilement ; ce ne sera jamais beaucoup plus compliqué que ce que tu nous montre. En plus cela te faciliterait beaucoup la tâche, tu n'aurais pas à réinventer la roue.

  16. #16
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    je vais me penche de ce cote alors :/

    par contre, t'aurai pas un site avec qqe tutos sur boost ?
    car j ai jms utilise boost :/

    je vais voir pour spirit, y a des samples j'espere?

  17. #17
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    par contre, t'aurai pas un site avec qqe tutos sur boost ?
    car j ai jms utilise boost :/

    je vais voir pour spirit, y a des samples j'espere?
    Y a tout ce qu'il faut dans la doc (le lien que je t'ai mis). Les documentations de boost sont toujours très bien faites

    Il y a également un exemple sur CodeProject.

    A noter que boost::spirit n'est pas le seul pour faire ça, mais à mon avis c'est le mieux foutu. Par contre il te faudra un compilo récent pour le faire tourner.

  18. #18
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    Citation Envoyé par Loulou24
    A noter que boost::spirit n'est pas le seul pour faire ça, mais à mon avis c'est le mieux foutu. Par contre il te faudra un compilo récent pour le faire tourner.
    Pas de prob j'ai VS7.1 pour ça j'pense que ça ira ^^

    Merci beaucoup j'me jette sur tout ça

Discussions similaires

  1. -Débutant-Prb d'editeur de txt sur Android
    Par Pif_Paf_Pouf dans le forum Android
    Réponses: 0
    Dernier message: 18/05/2014, 12h58
  2. Réponses: 5
    Dernier message: 28/07/2011, 12h42
  3. Editeur de MAP en delphi pour jeux directX
    Par PetitScorpion dans le forum DirectX
    Réponses: 5
    Dernier message: 09/07/2002, 18h47
  4. Editeur en mode console
    Par logramme dans le forum C
    Réponses: 5
    Dernier message: 11/06/2002, 13h23

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