A parte che la logica di gioco non ha senso perché se continui a far tentare un giocatore finché non colpisce una nave è ovvio che vincerà sempre il primo di turno quindi non è nemmeno divertente giocare, inoltre non mostri all'utente i tentativi già fatti. Comunque, un problema fondamentale sta in queste righe ripetute 4 volte:Se l'utente indovina le coordinate alla prima chiamata di colpisci perché richiederglile una seconda volta nella condizione?codice:do{ colpisci(c2,user1); stampa_colpito(c2,user2); }while (colpisci(c2,user1)==5);
Le due chiamate non sono la stessa cosa perché la tua funzione colpisci ha degli effetti collaterali: chiede un input e modifica uno stato.
Il tuo codice presenta un altro grave problema: la duplicazione. Sembra fatto a ctrl-c e ctrl-v. La cosa che fa pesare ancora di più questi problema è che un errore logico è stato sparso in 3 punti diversi del codice.
As an aside, quello non è l'unico pezzo di codice duplicato.