Ciao e grazie per la risposta, si visualizzo bene il tuo codice, e sulla funzione box() non sapevo si potessero inserire interi, io mettevo sempre un carattere, e ho già imparato una cosa nuova.
sistema operativo ho una debian,
la versione delle lib dovrebbe essere la 5,
font e terminale sono quelli standard.
Ho scoperto inoltre che il mio problema era dato dal fatto che inserivo newwin() dentro il ciclo infinito che legge i dati degli altri processi, quindi, suppongo andasse a ridisegnare sopra i caratteri.
se posso, vorrei farti un altra domanda:
ho bisogno di creare un effetto simile ad una esplosione e, apparte la scelta dei caratteri, non riesco a far visualizzare, con una piccola pausa, i caratteri a monitor. I caratteri vengono disegnati ma troppo velocemente. Usando la funzione usleep() mette in pausa tutto il programma e i caratteri vengono comunque disegnati tutti all'istante.
questa è la parte di codice dove disegno:
void destroy(struct solid alien)
{
if(alien.health<=-3)
{
mvwaddstr(wBattlefield,alien.y-1,alien.x-1," ");//wnoutrefresh(wBattlefield); //-1
mvwaddstr(wBattlefield,alien.y,alien.x-1, " ._. ");//wnoutrefresh(wBattlefield); //0
mvwaddstr(wBattlefield,alien.y+1,alien.x-1," \\O/ ");//wnoutrefresh(wBattlefield); //1
mvwaddstr(wBattlefield,alien.y+2,alien.x-1," *** ");//wnoutrefresh(wBattlefield); //2
mvwaddstr(wBattlefield,alien.y+3,alien.x-1," ");wnoutrefresh(wBattlefield); //3
alien.health--;
}
if(alien.health<=-2)
{
mvwaddstr(wBattlefield,alien.y-1,alien.x-1," ");//wnoutrefresh(wBattlefield); //-1
mvwaddstr(wBattlefield,alien.y,alien.x-1, " ._. ");//wnoutrefresh(wBattlefield); //0
mvwaddstr(wBattlefield,alien.y+1,alien.x-1," *** ");//wnoutrefresh(wBattlefield); //1
mvwaddstr(wBattlefield,alien.y+2,alien.x-1," ");//wnoutrefresh(wBattlefield); //2
mvwaddstr(wBattlefield,alien.y+3,alien.x-1," ");wnoutrefresh(wBattlefield); //3
alien.health--;
}
if(alien.health<=-1)
{
mvwaddstr(wBattlefield,alien.y-1,alien.x-1," ");//wnoutrefresh(wBattlefield); //-1
mvwaddstr(wBattlefield,alien.y,alien.x-1, " *** ");//wnoutrefresh(wBattlefield); //0
mvwaddstr(wBattlefield,alien.y+1,alien.x-1," ");//wnoutrefresh(wBattlefield); //1
mvwaddstr(wBattlefield,alien.y+2,alien.x-1," ");//wnoutrefresh(wBattlefield); //2
mvwaddstr(wBattlefield,alien.y+3,alien.x-1," ");wnoutrefresh(wBattlefield); //3
alien.health--;
}
if(alien.health<=0)
{
mvwaddstr(wBattlefield,alien.y-1,alien.x-1," ");//wnoutrefresh(wBattlefield); //-1
mvwaddstr(wBattlefield,alien.y,alien.x-1, " ");//wnoutrefresh(wBattlefield); //0
mvwaddstr(wBattlefield,alien.y+1,alien.x-1," ");//wnoutrefresh(wBattlefield); //1
mvwaddstr(wBattlefield,alien.y+2,alien.x-1," ");//wnoutrefresh(wBattlefield); //2
mvwaddstr(wBattlefield,alien.y+3,alien.x-1," ");wnoutrefresh(wBattlefield); //3
alien.health--;
}
if(alien.health<=-4) kill(alien.pid,1);
}
Ho usato gli if pensando che scrivesse ad ogni ciclo con la condizione corrispondente, ma non funziona così.