Labirinto aiuto

di il
6 risposte

Labirinto aiuto

Salve dovrei creare un programma in c++ , un labirinto dove vi sono due fasi, il master che si occupa di creare delle stanze, dotate di 3 porte e collegarle tra di esse, come posso fare ciò? Uso struct per creare l'id della stanza e la chiave (bool) e la porta centrale sinistra e destra tramite puntatori ma non ho idea su come collegare le porte o una porta ad un'altra porta di un'altra stanza. Aiuti?

6 Risposte

  • Re: Labirinto aiuto

    La struct non ti basta, ti serve ragionare in termini di "grafi"

    una stanza e' un "nodo" del grafo, il passaggio da una stanza all'altra un "arco".

    NON CHIDERE che cosa e' un grafo !

    SCOPRILO!

    Note: e dire che il tuo nick e' "SuperLink"!!!!!
  • Re: Labirinto aiuto

    Devo obbligatoriamente farlo con alberi e puntatori... io ho già fatto una parte del programma e penso sia giusta ma non so come collegare le varie porte con le altre stanze... posso postare il codice che ho fatto fino ad ora
  • Re: Labirinto aiuto

    L'albero e' un particolare tipo di grafo, il puntatore e' un modo di rappresentare l'arco di un grafo.

    Come ti sarai reso conto, scrivere codice NON E' PROGRAMMARE.
    Il codice NON E' IMPORTANTE, se non sai come risolvere il problema.
    PRIMA devi capire come risolverlo
    POI devi implementare la soluzione in forma di codice.
  • Re: Labirinto aiuto

    Il c++ non è il mio linguaggio di programmazione preferito purtroppo. Posso postare qui qualche codice per aiutarmi?
  • Re: Labirinto aiuto

    Certo che puoi!

    Il fatto che il C++ non sia il tuo linguaggio NON E' UNA SCUSANTE.
    Sapresti risolvere il problema CON IL TUO LINGUAGGIO PREFERITO?

    Se SI, la soluzione e' banale: basta che fai la stessa cosa in C++, e se non c'e' una particolare funzionalita', scopri quale sia l'equivalente in C++ di quello che hai nel tuo linguaggio preferito.

    A meno di non scrivere usando un linguaggio di programmazione esoterico (malbolge? https://en.wikipedia.org/wiki/Esoteric_programming_language), i linguaggi che hai usato fino ad ora seguono tutto lo stesso paradigma: procedurale/ad oggetti/procedurale+ad oggetti.

    QUINDI sono fondamentalment UGUALI!

    Ma, ripeto, il problema, NON E' LEGATO AL LINGUAGGIO DI PROGRAMMAZIONE, ma all'APPROCCIO, a COME RISOLVERE IL PROBLEMA INDIPENDENTEMENTE dal linguaggio di programmazione usato.

    Come lo faresti con CARTA E MATITA?
  • Re: Labirinto aiuto

    Con carta e matita è molto semplice ma trasformarlo in codice è un problema... Basterebbe associare ad una porta l 'id della stanza e accedendo a quella stanza da un'altra porta uscire ma non è semplice poi... ecco il mio codice:
    Tutto è contenuto nel main per adesso:
    int max_stanze;
    char inputchiave;
    struct stanza_labirinto
    {
    int id;
    bool chiave; // se vero, indica che è presenta una chiave
    stanza_labirinto *porta_sinistra;
    stanza_labirinto *porta_centrale;
    stanza_labirinto *porta_destra;
    };
    stanza_labirinto **elenco_stanze;
    cout << "Benvenuto \n";
    cout << "Quante stanze vogliamo inserire al massimo?";
    cin >> max_stanze;
    //inizializzo il vettore che elenca i puntatori alle stanze
    elenco_stanze = (stanza_labirinto**)malloc(max_stanze * sizeof(stanza_labirinto*));
    for (int i = 0; i < max_stanze; i++) {
    //(CREO UN VETTORE DI INDIRIZZI)
    elenco_stanze = (stanza_labirinto*)malloc(sizeof(stanza_labirinto));
    cout << "Inserisci l'id della stanza n." << i + 1 << " ";
    cin >> elenco_stanze->id;
    cout << "Vuoi inserire la chiave nella stanza n." << i + 1 << " ";
    cin >> inputchiave;
    if (inputchiave == 'y') elenco_stanze->chiave = true;
    else elenco_stanze->chiave = false;
    }
    cout << "\nHai inserito:\n";
    for (int i = 0; i < max_stanze; i++) {
    cout << elenco_stanze->id;
    cout << elenco_stanze->chiave << "\n";;
    }
    Adesso come collego una porta di una stanza ad un'altra stanza? cioè collegare *porta_sinistra alla stanza con id=3
Devi accedere o registrarti per scrivere nel forum
6 risposte