Hey ragazzi,
Sto realizzando un mini gioco utilizzando processi e ncurses.
Nella finestra di gioco devo avere: a sinistra la navicella da me controllata, a destra le navicelle nemiche. Ogni nave nemica deve essere controllata da un processo diverso.
Ho fatto praticamente di tutto, l'unico problema che ho è che quando provo a generare le navi nemiche,non so perché, le genero sovrapposte. Con il codice che ho scritto sotto vorrei generare la prima astronave in alto a destra, attendere un ritardo (dove la prima astronave si sposta in basso) e generare la seconda astronave (sempre in alto a destra) e così via.
Penso che il problema sia in "GeneratoreNemici", ma non capisco dove.
Se vi serve dare un occhiata al codice completo lo trovate qui: https://pastebin.com/59zYdsxh
Sto realizzando un mini gioco utilizzando processi e ncurses.
Nella finestra di gioco devo avere: a sinistra la navicella da me controllata, a destra le navicelle nemiche. Ogni nave nemica deve essere controllata da un processo diverso.
Ho fatto praticamente di tutto, l'unico problema che ho è che quando provo a generare le navi nemiche,non so perché, le genero sovrapposte. Con il codice che ho scritto sotto vorrei generare la prima astronave in alto a destra, attendere un ritardo (dove la prima astronave si sposta in basso) e generare la seconda astronave (sempre in alto a destra) e così via.
Penso che il problema sia in "GeneratoreNemici", ma non capisco dove.
Se vi serve dare un occhiata al codice completo lo trovate qui: https://pastebin.com/59zYdsxh
C:
void Nemico(int pipeout, int y)
{
struct position nemico;
//int deltax; /* Spostamento orizzontale */
int deltay=1; /* Spostamento verticale */
int pidM;
nemico.x = MAXX; /* Coordinata X iniziale */
nemico.y = y; /* Coordinata Y iniziale */
nemico.c ='$'; /* Carattere identificativo */
int secondi = 0;
int pidN = getpid(); /*Ottengo il pid del processo*/
/*chiudo la pipe in lettura*
/* Comunico le coordinate iniziali al processo padre */
write(pipeout,&nemico,sizeof(nemico));
while(1){
if(secondi == 5){
pidM = fork();
if(pidM==0) {
//flash();
/* Visualizzo il Proiettile nella posizione iniziale */
//mvprintw(MAXX/2,MAXY/2,"@");
//write(pipeout,&prova,sizeof(prova));
refresh();
/* ed eseguo quindi la relativa funzione di gestione */
//close(pipeout); /* chiusura del descrittore di lettura */
Missile(pipeout,nemico.x,nemico.y); /* invocazione funzione proiettile */
}
secondi = 0;
}
//if(random() < RAND_MAX/2) deltax= 1; else deltax=-1;
/* Se supero area X schermo inverte il movimento */
//if(nemico.x + deltax < 1 || nemico.x + deltax > MAXX){
// deltax = -deltax;
//}
/* Movimento X */
//nemico.x += deltax;
//if(random() < RAND_MAX/2) deltay= 1; else deltay=-1;
refresh();
/* Se supero area Y schermo inverto il movimento */
if(nemico.y + deltay < 1 || nemico.y + deltay > MAXY){
deltay = -deltay;
nemico.x--;
}
/* Movimento Y */
nemico.y += deltay;
if(nemico.x<0){
kill(pidN,1);
}
usleep(pidM);
/* Comunico le coordinate correnti al processo padre */
write(pipeout,&nemico,sizeof(nemico));
/* Inserisco una pausa per rallentare il movimento */
usleep(DELAY);
secondi++;
}
}
void GeneratoreNemici(int pipeout, int m){
pid_t pids[m];
int i;
//int y;
/* creo i figli */
for (i = 0; i < m; ++i) {
pids[i]=fork();
if (pids[i] < 0) {
perror("fork");
abort();
} else if (pids[i] == 0) {
//y = y + m;
Nemico(pipeout, MAXY);
exit(0);
}
}
/* aspetta che i figli finiscano */
int status;
pid_t pid;
while (m > 0) {
pid = wait(&status);
--m; // TODO(pts): Remove pid from the pids array.
}
}