Newsgroup: it.comp.lang.c
Titolo: [LUNGO] processi fork ed esame... aiutatemi!!!

Mi è stato dato da fare un esame e devo fare un programma in C, con
interfaccia grafica (ncurses) ed è richiesto l'utilizzo di processi e
pipes.
Il tutto si rifà ad un vecchissimo gioco tipo battaglia di astronavi.
Ci
sono delle astronavi in alto allo schermo che si muovono in formazone e
a tempo casuale devono rilasciare una bomba che cade lungo l'asse Y
verso il basso.
In basso c'è un astronave che si muove a destra e a sinistra e può
sparere alle navicelle nemiche.
Il gioco finisce se viene distrutta l'astronave degli eroi o se vengono
distrutte tutte le navicelle nemiche.
Mi sono già fatto tutte le funzioni grafiche e ho provato anche a
farle
girare versione stand-alone, senza collegarle tra di loro. Ho creato
una
funzione che mi crea le navicelle sullo schermo e che le fà muovere in
formazione. Ho creato la navicella degli eroi e la faccio muovere con i
tasti feccetta come richiesto dall'esame.
Sarei capace a collegare il tutto, ma forse in un modo non consono.
Potrei fare un ciclo while mettendo tutto dentro, ma mi servirebbe un
comando diverso da getch: getch aspetta che si prema un tasto, mentre a
me servirebbe poter leggere la tastiera e se viene premuto un tasto.
Nel
caso che non venga premuto devo andare avanti e lanciare le atre
funzioni e fare tutti i controlli.
Spero di essere stato chiaro, ma non credo molto...
Ora cercavo di fare la stessa cosa con i processi ma è la prima volta
che affronto questo argomento. Ho creato un albero semplice semplice di
come dovrebbero andare le cose.
Io vi posto il codice che ho scritto:
// Primo processo da lanciare: la creazione su schermo dei nemici.
        pid_t pid_nemici;       // Numero processo del figlio
        pid_t wpid_nemici;
        int status_nemici;
        pid_nemici = fork();    // Creo il processo figlio
        if( pid_nemici == -1 )
        {
                printf( "Non e' stato possibile creare un processo
figlio.\n->%s\n\n",
strerror( errno ) );
                exit( 13 );
        } else if
        {
                // Il processo e' partito
                // Qui dentro indico cosa deve fare il processo...
                // Per prima prova creerei un numero X da 1 a 10 di
astronavi nemiche
                // sullo schermo e si muovono in formazione verso il
basso...
                // Esco da questo figlio solo se si verifica che almeno
un astronave
arrivi
                // alla fine dello schermo in basso oppure se non ci
sono più
astronavi nemiche...
        } else
        {
                // Qui sono di nuovo nel main del padre...
                // Qui creerei un altro processo figlio per l'astronave
amica
                pid_t pid_eroi; // Numero processo del figlio
                pid_t wpid_eroi;
                int status_eroi;
                pid_eroi = fork();      // Creo il processo figlio
                if( pid_eroi == -1 )
                {
                        printf( "Non e' stato possibile creare un
processo
figlio.\n->%s\n\n", strerror( errno ) );
                        exit( 13 );
                } else if
                {
                        // Il processo e' partito
                        // Qui dentro indico cosa deve fare il
processo...
                        // Ora visualizzo l'astronave degli eroi e poi
la gestisco
                        // direttamente da qui con un swich su getch();
                        // Quando l'astrovave spara, genero ancora un
nuovo figlio
                        // che è il proiettile. Devo però passare al
proiettile le
                        // coordinate X e Y di partenza, ovvero dove è
stato premuto barra
sapazio.
                        // Il sotto processo proiettile deve "girare"
fino a che non incontra
                        // nel suo percorso un atronave o l'inizo dello
schermo cioè ScreenY
= 0...
                        // Nel primo caso devo distruggere un
astronave, nel secondo il
proiettile
                        // Poi devo aggiornare i punteggi...
                        // Esco da qui solo quando ho finito i
proiettili o quando ho ucciso
tutte le
                        // navicelle nemiche...
                }
                // Qui devo indicare cosa devo fare per uscire da
questo ciclo
                // Io direi di aspettare la fine del processo nemico,
almeno per ora...
                // Oppure i controlli mi conviene farli tutti quà???
        }
Chi ha qualche consiglio da darmi??? A questo punto non sò più cosa
fare... Se non ne vengo a capo entro questa sera sono costretto a
perdere un probabile lavoro... 
Ciao a tutti, Keres.

 distrutte tutte le navicelle nemiche.
space invaders ?


in...@kerescontorni.com
 ha scritto:

Se sei uno studente dell'uni di cagliari, contattami via email. Anche
io sto preparando lo stesso esame e potremmo scambiarci qualche
informazione utile.
Saluti.