C: Controllo input ripetuti

di il
7 risposte

C: Controllo input ripetuti

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

  • Re: C: Controllo input ripetuti

    C'è un else senza if, hai copiato bene il codice?
  • Re: C: Controllo input ripetuti

    Alexv ha scritto:


    C'è un else senza if, hai copiato bene il codice?
    Quale?
  • Re: C: Controllo input ripetuti

    Ma come quale? Dopo il secondo scanf
  • Re: C: Controllo input ripetuti

    Si, avevo riportato male il codice.. modificato
  • Re: C: Controllo input ripetuti

    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)
  • Re: C: Controllo input ripetuti

    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
  • Re: C: Controllo input ripetuti

    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