Newsgroup: it.comp.os.linux.development
Titolo: [Lungo] Processi in C, mi serve un consiglio

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.

 funzioni e fare tutti i controlli.
Ciao,
 direi che ti serve la select.
 Ciao
 Federico