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.