Oppure

Loading
11/01/10 15:14
Messy
Salve a tutti sono nuovo del forum e vorrei un aiutino da voi per un programma mooolto semplice.
Per domani devo fare un programma che simuli la battaglia navale in C,la nave da inserire è una sola ed è lunga due caselle,la matrice è 5 x 5,il programma funziona con due giocatori reali e inoltre mi deve chiedere dove voglio posizionare la suddetta nave e se la voglio in orizzontale e verticale.

Lo so che vi sto chiedendo di farmi praticamente il programma,ma il prof ha solo accennato l'argomento e non so come farlo..

Grazie a tutti ^^
aaa
11/01/10 16:33
nessuno
Beh ... riferisci al tuo prof. che non sei in grado di farlo perchè lui non ha spiegato bene ...

E comunque, mi sa che ci dovevi pensare un po' prima ... se è per domani ...
Ultima modifica effettuata da nessuno 11/01/10 16:33
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
11/01/10 17:02
Lawliet
Se lo dice così al professore è praticamente come subire una fucilata!
Ne so per esperienza personale, io sui professori ormai non ci conto più (salvo alcuni che sono davvero in gamba).
Chiedi troppo..
Roma non è stata costruita in un giorno :pat:
aaa
11/01/10 21:29
Zonzo
Io ho provato a farlo, però non ho avuto tempo di provarlo.
Spero che funzioni.
#include <stdio.h>
#include <stdlib.h>

#define DIMENSIONE_CAMPO 5
#define LUNGHEZZA_NAVE 2
#define GIOCATORI 2

struct STR_NAVE{
       int Posizione[LUNGHEZZA_NAVE][2];
       char Nome[80];
       int PosColpite;
};

void DisegnaCampo(struct STR_NAVE struttura);
int TrovaPosizione(int Ind1,int Ind2,struct STR_NAVE struttura);
int VerificaPosizione(int Index,struct STR_NAVE struttura);

int main()
{
int i,k,appo1,appo2;
struct STR_NAVE nave[GIOCATORI];

for(k=0;k<GIOCATORI;k++)
{                        
 system("cls");                       
 nave[k].PosColpite=0;
 printf("Nome Giocatore %d: ",k+1);
 scanf("%s",nave[k].Nome);                       
 for(i=0;i<LUNGHEZZA_NAVE;i++)
 {
  DisegnaCampo(nave[k]);                            
  do{
   printf("%s\nScegli la %d^ coppia di coordinate dove sara inserita la nave(es. riga,colonna).\n",nave[k].Nome,i+1);
   scanf("%d,%d",&nave[k].Posizione[i][0],&nave[k].Posizione[i][1]);
  }while(VerificaPosizione(i,nave[k])==0);
  DisegnaCampo(nave[k]);
  if (i == (LUNGHEZZA_NAVE - 1))
  {
    printf("Nave inserita correttamente!\n");
    system("pause");       
  }
 }
}

 system("cls");
 printf("\t\tCOMINCIA LA BATTAGLIA!");
 
 k=0;
 while(1)
 {
  printf("\nE' il turno di %s.\n",nave[k].Nome);
  printf("Scegli una coppia di coordinate(es. riga,colonna).\n");
  scanf("%d,%d",&appo1,&appo2);
  if(TrovaPosizione(appo1,appo2,nave[k])==0)
  {
    printf("Hai colpito una zona della nave!\n");
    nave[k].PosColpite++;
  }
  else
  {
    printf("Niente da fare.\n");
  }
  if (nave[k].PosColpite == LUNGHEZZA_NAVE)
  { 
   printf("%s ha vinto!!!\n\n",nave[k].Nome);
   break;  
  }
  if(k==0)
    k=1;
  else
    k=0;  
 }

system("pause");
return 0;
}

void DisegnaCampo(struct STR_NAVE struttura){
 int i,j;
 
 system("cls");
 
 for(i=0;i<DIMENSIONE_CAMPO;i++)
    printf("%5d",i);
     
 printf("\n\n");

 for(i=0;i<DIMENSIONE_CAMPO;i++)
 {
    printf("%d  ",i);
    for(j=0;j<DIMENSIONE_CAMPO;j++)
    {  
       if(TrovaPosizione(i,j,struttura)!=0)
        printf("|__| ");             
       else
        printf("|||| ");
    }
    printf("\n\n");
 }                        
}

int TrovaPosizione(int Ind1,int Ind2,struct STR_NAVE struttura){
 int i;
 
 for(i=0;i<LUNGHEZZA_NAVE;i++)
   if (Ind1 == struttura.Posizione[i][0] && Ind2 == struttura.Posizione[i][1])
      return 0;      
}

int VerificaPosizione(int Index,struct STR_NAVE struttura){
 int i;
 
 if ( (struttura.Posizione[Index][0] < 0 ) || ( struttura.Posizione[Index][0] >= DIMENSIONE_CAMPO ) ) return 0;
 else if ( (struttura.Posizione[Index][1] < 0 ) || ( struttura.Posizione[Index][1] >= DIMENSIONE_CAMPO ) ) return 0;
 else if ( Index==0 ) return 1; 
 else if ( ( (struttura.Posizione[Index][0] - struttura.Posizione[Index-1][0]) == 1) && ( ( struttura.Posizione[Index][1] - struttura.Posizione[Index-1][1] ) == 0 ) ) return 1;
 else if ( ( (struttura.Posizione[Index][0] - struttura.Posizione[Index-1][0]) == -1) && ( ( struttura.Posizione[Index][1] - struttura.Posizione[Index-1][1] ) == 0 ) ) return 1;
 else if ( ( (struttura.Posizione[Index][0] - struttura.Posizione[Index-1][0]) == 0) && ( ( struttura.Posizione[Index][1] - struttura.Posizione[Index-1][1] ) == 1 ) ) return 1;
 else if ( ( (struttura.Posizione[Index][0] - struttura.Posizione[Index-1][0]) == 0) && ( ( struttura.Posizione[Index][1] - struttura.Posizione[Index-1][1] ) == -1 ) ) return 1;
 else return 0;
 
}

Ultima modifica effettuata da Zonzo 11/01/10 22:26
aaa
11/01/10 22:14
Lawliet
Ma scusa, permettimi.. almeno commenta o spiega come l'hai fatto.
Non lo trovo corretto che dai un codice che non sai nemmeno se funziona perchè non l'hai provato, e tantomeno fare un codice pronto.
aaa
11/01/10 22:28
Zonzo
Postato originariamente da Lawliet:

Ma scusa, permettimi.. almeno commenta o spiega come l'hai fatto.
Non lo trovo corretto che dai un codice che non sai nemmeno se funziona perchè non l'hai provato, e tantomeno fare un codice pronto.


Si scusami davvero, ma andavo di fretta e ho potuto solamente scrivere due righe. Quando sarò più libero spiegherò il mio programma.
Ultima modifica effettuata da Zonzo 11/01/10 22:28
aaa