C: Controllo input ripetuti

di Anonimizzato29363 il
7 risposte
Ciao,

sto lavorando al progetto battaglia navale, e vorrei che quando un giocatore spara verso una nave già colpita, una condizione while risponda che la nave è già stata colpita e dunque di scegliere un'altra destinazione.

Non riesco a differenziare la nave colpita la prima volta e le successive, posso chiedervi un parere? Leggevo di una variabile temporale che definisce in tempi diversi l'input, ma devo ancora implementarla.

Riporto la porzione di codice:

  printf("P1: inserisci la riga dove fare fuoco: ");
           scanf("%d", &r);
           printf("P1: inserisci la colonna dove fare fuoco: ");
           scanf("%d", &c);

                

             if (&grigliaP2[r][c]==1)
           {
              printf("P1: nave colpita!\n");
              contnum_naviP2++;
              printf("restano da colpire %d navi!\n", P2_num_navi-contnum_naviP2);
              &grigliaP2[r][c]=1;
               }
               else if (&grigliaP2[r][c]==0)
             {
               printf("P1: Mancato!\n");
               printf("restano da colpire %d navi!\n", P2_num_navi-contnum_naviP2);
               }
               
               
               
               // controllo navi già puntate
               if(&grigliaP2[r][c]==1)
                  printf("P1: Hai gia'colpito questa nave,trovane un'altra da affondare! \n");
                  


		 if(contnum_naviP2==P2_num_navi)
		 {
		 	printf("Tutte le navi di P2 sono state affondate. P1 vince la partita!! \n");
		 	
		 }
	}

7 Risposte

  • C'è un else senza if, hai copiato bene il codice?
  • Alexv ha scritto:


    C'è un else senza if, hai copiato bene il codice?
    Quale?
  • Ma come quale? Dopo il secondo scanf
  • Si, avevo riportato male il codice.. modificato
  • Un modo potrebbe essere impostarla a 0 dopo che l'hai colpita.
    Oppure considera di usare una matrice di struct, invece degli int, così puoi memorizzarci tutte le informazioni che ti servono.

    PS puoi anche cavartela direttamente con gli int usando
    0: colpo in mare
    1: la nave è già stata colpita in precedenza
    2: nave colpita (scala a 1)
  • Alexv ha scritto:


    Un modo potrebbe essere impostarla a 0 dopo che l'hai colpita.
    Oppure considera di usare una matrice di struct, invece degli int, così puoi memorizzarci tutte le informazioni che ti servono.

    PS puoi anche cavartela direttamente con gli int usando
    0: colpo in mare
    1: la nave è già stata colpita in precedenza
    2: nave colpita (scala a 1)
    Grazie dell'idea Alexv ora la butta giù che di struct non sono esperto!
    Una cosa, cosa intendi per 2: nave colpita (scala a 1)?

    Grazie 1k
  • Intendevo quando il colpo va a segno, ovvero
    2: la nave c'è ed è pronta per essere affondata.

    La differenza fra 0 e 1 è la mancanza di una nave in quel punto, oppure se c'è (c'era) una nave (1) che però è già stata colpita in precedenza, in modo da dare un messaggio diverso. Sta a te decidere se fare o no questa distinzione. Usando solo i numeri, comunque, puoi anche risparmiarti le struct.
Devi accedere o registrarti per scrivere nel forum
7 risposte