Navigazione Testuale In C
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Pag 1 di 2 12 UltimoUltimo
Visualizzazione risultati da 1 a 15 di 19

Discussione: Navigazione Testuale In C

Cambio titolo
  1. #1
    Utente L'avatar di complicated
    Registrato il
    08-03
    Località
    villaggio dei puffi
    Messaggi
    364

    Navigazione Testuale In C

    vorrei inserire nel mio RPG testuale una navigazione testuale..
    cioè:
    adesso è strutturato osì:
    - narrazione degli eventi
    - scelte

    PRATICAMENTE il gioco si riduce ad utilizzaretutti i num ui in quellasezione è assegnata unafunzione e andare avanti...

    io vorrei nn mettere quello che si può fare ma lasiare interpretare al giocatore...

    cioè

    COSA FAI?

    se si scrive parlo con TIZIO parte il dialogo
    se si scrive raccolgo OGGETTO si raccogliel'oggetto...

    come sifa?

    Una donna per domarli, Una donna per trovarli,
    Una donna per ghermirli e nel buio incantenarli.
    (motto del partito "Donne al Potere")


    non so cos'altro scrivere nella firma...

  2. #2
    Utente L'avatar di Phoenix
    Registrato il
    10-02
    Località
    Midwich Street
    Messaggi
    6.699
    Non che tu sia chiaro come il sole
    intendi che ora è così:

    Cosa vuoi fare?
    1) parlare
    2) suicidarti
    3) attaccare

    E invece tu lo vorresti senza opzioni, interpretando qualunque stringa l'utente invii?

    in questo caso credo proprio sia qualcosa di eccessivamente complesso...)
    Ultima modifica di Phoenix; 9-10-2003 alle 22:15:45


    He who is not bold enough to be stared at from across the abyss
    is not bold enough to stare into it himself.

  3. #3
    Utente L'avatar di complicated
    Registrato il
    08-03
    Località
    villaggio dei puffi
    Messaggi
    364
    si, vorrei ke fosse il giocatore a decidere cosa fare, lasciandogli interpretare il testo...

    so ke è difficile ma mi sembra anke + interessante invce di mettersi a seklezionare tutti i numeri vin ogni ambiente e vedere (leggere) quello ke succede...

    Una donna per domarli, Una donna per trovarli,
    Una donna per ghermirli e nel buio incantenarli.
    (motto del partito "Donne al Potere")


    non so cos'altro scrivere nella firma...

  4. #4
    Utente L'avatar di devilheart
    Registrato il
    01-03
    Messaggi
    28.310
    devi acquisire la scelta con una funzione del tipo getch() e poi utilizzare uno switch.

  5. #5
    Utente L'avatar di complicated
    Registrato il
    08-03
    Località
    villaggio dei puffi
    Messaggi
    364
    Inviato da devilheart
    devi acquisire la scelta con una funzione del tipo getch() e poi utilizzare uno switch.

    getch() ?

    mi spieghi come?

    Una donna per domarli, Una donna per trovarli,
    Una donna per ghermirli e nel buio incantenarli.
    (motto del partito "Donne al Potere")


    non so cos'altro scrivere nella firma...

  6. #6
    Utente L'avatar di devilheart
    Registrato il
    01-03
    Messaggi
    28.310
    la funzione getch() restituise un carattere premuto es:
    char scelta=getch();
    switch(scelta)
    case '0':{ codice da eseguire se viene premuto lo '0'};break;
    case '1':{ codice da eseguire se viene premuto lo '1'};break;
    };

  7. #7
    Utente L'avatar di complicated
    Registrato il
    08-03
    Località
    villaggio dei puffi
    Messaggi
    364
    Inviato da devilheart
    la funzione getch() restituise un carattere premuto es:
    char scelta=getch();
    switch(scelta)
    case '0':{ codice da eseguire se viene premuto lo '0'};break;
    case '1':{ codice da eseguire se viene premuto lo '1'};break;
    };

    ma io voglio ke una certa cosa enttri in funzione quando viene inserito 1 cxeerta parola......

    Una donna per domarli, Una donna per trovarli,
    Una donna per ghermirli e nel buio incantenarli.
    (motto del partito "Donne al Potere")


    non so cos'altro scrivere nella firma...

  8. #8
    Utente L'avatar di devilheart
    Registrato il
    01-03
    Messaggi
    28.310
    allora devi creare un set di parole chiavi che ti permettono di identificare in maniere univoca ciò che vuole fare il giocatore. devi acquisire la stringa, controllare la prima parola e vedere il tipo d'azione. la funzione è strcmp(char*,char*) che restituisce 0 se le due stringhe sono uguali.

  9. #9
    Utente L'avatar di complicated
    Registrato il
    08-03
    Località
    villaggio dei puffi
    Messaggi
    364
    Inviato da devilheart
    allora devi creare un set di parole chiavi che ti permettono di identificare in maniere univoca ciò che vuole fare il giocatore. devi acquisire la stringa, controllare la prima parola e vedere il tipo d'azione. la funzione è strcmp(char*,char*) che restituisce 0 se le due stringhe sono uguali.
    scusa se sono cretino ma mi faresti un esempio?

    ty

    Una donna per domarli, Una donna per trovarli,
    Una donna per ghermirli e nel buio incantenarli.
    (motto del partito "Donne al Potere")


    non so cos'altro scrivere nella firma...

  10. #10
    Utente
    Registrato il
    12-02
    Località
    Venezia
    Messaggi
    110

    Freccia

    Se ho ben capito vorresti fare un semplice parser...mica banale.
    Posto un esempio molto limitato e senz'altro migliorabile, giusto per dare una vaga idea.
    Codice:
    #include <iostream>
    #include <vector>
    #include <string>
    #include <sstream>
    
    using namespace std;
    
    typedef vector<string>::iterator index;
    
    bool parserizza(string &comandi)
    {
    	static bool inizializzato = false;
    	static vector<string> eliminare;
    	static vector<string> azioni;
    	bool esci = false;
    
    	if (!inizializzato) {
    		eliminare.push_back(" il ");
    		eliminare.push_back(" lo ");
    		eliminare.push_back(" la ");
    		azioni.push_back("leggi");
    		azioni.push_back("guarda");
    		azioni.push_back("fine");
    		azioni.push_back("salva");
    		azioni.push_back("attacca");
    		inizializzato = true;
    	}
    	index inizio = eliminare.begin(), fine = eliminare.end();
    	string::size_type corrente = 0;
    	for (index i = inizio; i < fine; ++i)
    		if ((corrente = comandi.find(*i, corrente)) != string::npos)
    			comandi.replace(corrente, i->length(), " ");
    	istringstream s(comandi);
    	string verbo, oggetto;
    	s >> verbo;
    	bool trovata_azione = false;
    	inizio = azioni.begin(); fine = azioni.end();
    	for (index i = inizio; i < fine; ++i) {
    		if ((corrente = comandi.find(*i, corrente)) != string::npos) {
    			trovata_azione = true;
    			cout << "trovata azione: \'" << (*i) << "\' ";
    			s >> oggetto;
    			if (oggetto.size())
    				cout << "con oggetto: \'" << oggetto << "\'.";
    			else
    				cout << "senza oggetto.";
    			cout << endl;
    			if ((*i) == "fine") {
    				esci = true;
    				break;
    			}
    		}
    	}
    	if (! trovata_azione)
    		cout << "Verbo non presente nel vocabolario" << endl;
    	return esci;
    }
    
    int main(void)
    {
    	string comandi;
    
    	cout << "Sei di fronte ad una casetta bianca. Davanti a te\n"
    	     << "un cane di media taglia ti guarda dubbioso. Alla\n"
    	     << "tua destra c'e' un cartello bianco.\n" << endl;
    	do {
    		getline(cin, comandi);
    	} while (!parserizza(comandi));
    }
    Il risultato e' qualcosa del genere:
    Codice:
    $ ./parser.exe 
    Sei di fronte ad una casetta bianca. Davanti a te
    un cane di media taglia ti guarda dubbioso. Alla
    tua destra c'e' un cartello bianco.
    
    leggi il cartello
    trovata azione: 'leggi' con oggetto: 'cartello'.
    guarda il cane
    trovata azione: 'guarda' con oggetto: 'cane'.
    guarda la casetta
    trovata azione: 'guarda' con oggetto: 'casetta'.
    attacca il cane
    trovata azione: 'attacca' con oggetto: 'cane'.
    salva
    trovata azione: 'salva' senza oggetto.
    fine
    trovata azione: 'fine' senza oggetto.
    man is your friend

  11. #11
    Utente L'avatar di complicated
    Registrato il
    08-03
    Località
    villaggio dei puffi
    Messaggi
    364
    Inviato da 3y34|v|31337
    Se ho ben capito vorresti fare un semplice parser...mica banale.
    Posto un esempio molto limitato e senz'altro migliorabile, giusto per dare una vaga idea.
    Codice:
    #include <iostream>
    #include <vector>
    #include <string>
    #include <sstream>
    
    using namespace std;
    
    typedef vector<string>::iterator index;
    
    bool parserizza(string &comandi)
    {
    	static bool inizializzato = false;
    	static vector<string> eliminare;
    	static vector<string> azioni;
    	bool esci = false;
    
    	if (!inizializzato) {
    		eliminare.push_back(" il ");
    		eliminare.push_back(" lo ");
    		eliminare.push_back(" la ");
    		azioni.push_back("leggi");
    		azioni.push_back("guarda");
    		azioni.push_back("fine");
    		azioni.push_back("salva");
    		azioni.push_back("attacca");
    		inizializzato = true;
    	}
    	index inizio = eliminare.begin(), fine = eliminare.end();
    	string::size_type corrente = 0;
    	for (index i = inizio; i < fine; ++i)
    		if ((corrente = comandi.find(*i, corrente)) != string::npos)
    			comandi.replace(corrente, i->length(), " ");
    	istringstream s(comandi);
    	string verbo, oggetto;
    	s >> verbo;
    	bool trovata_azione = false;
    	inizio = azioni.begin(); fine = azioni.end();
    	for (index i = inizio; i < fine; ++i) {
    		if ((corrente = comandi.find(*i, corrente)) != string::npos) {
    			trovata_azione = true;
    			cout << "trovata azione: \'" << (*i) << "\' ";
    			s >> oggetto;
    			if (oggetto.size())
    				cout << "con oggetto: \'" << oggetto << "\'.";
    			else
    				cout << "senza oggetto.";
    			cout << endl;
    			if ((*i) == "fine") {
    				esci = true;
    				break;
    			}
    		}
    	}
    	if (! trovata_azione)
    		cout << "Verbo non presente nel vocabolario" << endl;
    	return esci;
    }
    
    int main(void)
    {
    	string comandi;
    
    	cout << "Sei di fronte ad una casetta bianca. Davanti a te\n"
    	     << "un cane di media taglia ti guarda dubbioso. Alla\n"
    	     << "tua destra c'e' un cartello bianco.\n" << endl;
    	do {
    		getline(cin, comandi);
    	} while (!parserizza(comandi));
    }
    Il risultato e' qualcosa del genere:
    Codice:
    $ ./parser.exe 
    Sei di fronte ad una casetta bianca. Davanti a te
    un cane di media taglia ti guarda dubbioso. Alla
    tua destra c'e' un cartello bianco.
    
    leggi il cartello
    trovata azione: 'leggi' con oggetto: 'cartello'.
    guarda il cane
    trovata azione: 'guarda' con oggetto: 'cane'.
    guarda la casetta
    trovata azione: 'guarda' con oggetto: 'casetta'.
    attacca il cane
    trovata azione: 'attacca' con oggetto: 'cane'.
    salva
    trovata azione: 'salva' senza oggetto.
    fine
    trovata azione: 'fine' senza oggetto.


    a me servirebbe in C..


    funziona lo stesso?

    Una donna per domarli, Una donna per trovarli,
    Una donna per ghermirli e nel buio incantenarli.
    (motto del partito "Donne al Potere")


    non so cos'altro scrivere nella firma...

  12. #12
    Utente L'avatar di devilheart
    Registrato il
    01-03
    Messaggi
    28.310
    Inviato da complicated
    a me servirebbe in C..


    funziona lo stesso?
    guarda che quello è c

  13. #13
    Ex admin L'avatar di Lex
    Registrato il
    10-02
    Località
    Udine
    Messaggi
    36.676
    Più precisamente è C++, è comunque possibile modificalo in C standard senza troppi fastidi.
    You will die, mortal


    Gli interventi di moderazione sono in rosso e grassetto. Chiarimenti a riguardo in privato.
    A causa di limiti di tempo, non risponderò a questioni relative al forum su MSN salvo in casi di reale emergenza. Se avete bisogno di contattarmi, mandatemi un mp.

  14. #14
    Utente
    Registrato il
    10-02
    Messaggi
    2.367
    iO ne ho fatto uno, tempo fa.
    Prende una stringa inserita, memorizza in un vettore di stringhe, le parole inserite( cancellando gli spazi.

    Poi con le stringhe contenute in questo vettore le interpreti come vuoi.........

    void tokening(void){
    char mword[LMWORD]={"\0"}; //STRINGA CHE CONTIENE LE PAROLE INSERITE DALL'UTENTE
    fgets(mword,LMWORD,stdin); //ACQUISISCO MWORD IN MODO DA TROCARE LE LETTERE ECCEDENTI LMWORD
    char arg[NARG][LARG]={"\0"}; //VETTORE DI STRINGHE CHE MEMORIZZA LE PAROLE INSERITE DALL'UTENTE
    narg=0;

    /*TOKENING
    PARTE DELLA FUNZIONE IN CUI IL FLUSSO DI CARATTERI INSERITI DALL'UTENTE VIENE
    ANALIZZATO, SEPARANDO LE PAROLE DAGLI SPAZI BIANCHI.
    LE PAROLE POI VERRANNO ANALIZZATE*/


    int i,j,k; //INDICI VARI
    bool init=0; //VARIABILE CHE MI INDICA SE HO APPENA ANALIZZATO UNA LETTERA

    for (i=0,j=0,k=0;i<strlen(mword);i++){
    if (32<mword[i]){
    init=1;
    arg[k][j]=mword[i];
    j++;
    }else {
    if(init){
    j=0;
    k++;
    }
    init=0;
    }
    }
    narg=k+1;

    //--------------------------------------------//
    /*NEL CASO PARTICOLARE IN CUI L'UTENTE PREMA SOLAMENTE 'INVIO' SENZA
    ALTRI CARATTERI (QUINDI LA STRINGA E' VUOTA) SI ESCE DIRETTAMENTE*/

    if(!strcmp(arg[0],"\0"))
    goto esci;
    //--------------------------------------------//


    /*DOPO QUESTA SERIE DI ISTRUZIONI IL VETTORE DI STRINGHE ARG[][] CONTINE I COMANDI "PURI"
    INSERITI DALL'UTENTE CHE ORA VERRANNO CONFRONTATI CON I COMANDI ESEGUIBILI DA PROGRAMMA */

    for (i=0;i<NCOM;i++)
    if(!strcmp(arg[0],comlist[i].nomecomando)) goto esegui;
    _NON_ESISTE(arg[0])
    goto esci;
    esegui:
    comlist[i].pfunzione();
    esci:
    return;
    }

  15. #15
    Utente
    Registrato il
    10-02
    Messaggi
    2.367
    Questa è in c, puro...

    L'ho fatto in mezzo pomeriggio tempo fa, quindi non èp che sia il massimo della pulizia e stabilità.
    I comani sono memorizzati in un vettore di strutture chiamate COMANDO.
    Questa struttura contiene il nome del comando e il puntattore di funzione associata.

    Questo che ti ho postato io era stato fatto per un altro tipo di programma, ma stagliuzzando un po di cose riesci tranquillamente ad portarlo dove vuoi.......

Pag 1 di 2 12 UltimoUltimo

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •