Il problema dovrebbe essere nella funzione attacca(). I turni li ho organizzati in modo che se la variabile "turno" è pari o dispari viene invocata la funzione attacca() con due argomenti, il giocatore 1 e il giocatore 2 alternativamente.

La "vita" è un campo della struct pl e gli ho dato un valore di prova nel main().

Il problema è che quando viene invocata attacca(&giocatore1, &giocatore2); o attacca(&giocatore2, &giocatore1); sembra che quella funzione non vada a modificare il campo vita del giocatore, anche se glielo passo per indirizzo.

Spero di aver reso l'idea, comunque si vede benissimo facendolo partire, si scrive 1 per selezionare la modalità 1vs1 e si preme invio per attaccare.