Advertisement
jackolanda

bnavale

May 20th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.78 KB | None | 0 0
  1. /*
  2.   \file
  3.   \authors informatica (CDS Fisica) 2018/19
  4.   \brief A2: file di include
  5.  */
  6.  
  7. /** tipo di ogni cella in sui e' suddiviso il mare (area di gioco)
  8.   -- EMPTY, cella vuota,
  9.   -- ONE contenente una nave lunga uno,
  10.   -- TWO, THREE parte di una nave lunga 2 o parte di una nave lunga 3 */
  11.  
  12. #define EMPTY  '.'
  13. #define ONE    '1'
  14. #define TWO    '2'
  15. #define THREE  '3'
  16. #define EMPTY_COLPITA  'X'
  17. #define ONE_COLPITA    'a'
  18. #define TWO_COLPITA    'b'
  19. #define THREE_COLPITA  'c'
  20.  
  21.  
  22.  
  23. typedef struct area {
  24.   /* matrice che rappresenta l'area di gioco */
  25.   char ** a;
  26.   /* numero di righe */
  27.   unsigned N;
  28.   /* numero di colonne */
  29.   unsigned M;
  30.   /* numero di navi presenti */
  31.   unsigned n_navi;
  32. } area_t;
  33.  
  34. int main(){
  35.  
  36. }
  37.  
  38. /** alloca l'area di gioco  nXm suddivisa in celle di uguali dimensioni vuote
  39.     con condizioni periodiche di bordo
  40.     (n-1 adiacente a 0 in tutte le dimensioni)
  41.     \param n numero delle righe
  42.     \param m numero delle colonne
  43.  
  44.     \retval p puntatore alla nuova area (Se tutto e' andato bene)
  45.     \retval NULL se si e' verificato un errore
  46. */
  47. area_t * crea_area (unsigned n, unsigned m){ /* mancano le condizioni periodiche di bordo */
  48.     area_t * sea; // struttura su cui lavoro
  49.     int i, j;
  50.    
  51.     sea=malloc(sizeof(area_t)); // inizializzazione struttura
  52.     if (sea==NULL) return(NULL); // controllo malloc
  53.    
  54.     sea->N=n; // n righe
  55.     sea->M=m; // m colonne
  56.     sea->n_navi=0; // # navi
  57.     sea->a=malloc(n*sizeof(char*));  if (sea->a[i]==NULL) return(NULL); // allocazione n righe 
  58.     for (i=0;i<n;i++){ 
  59.         sea->a[i]=malloc(m*sizeof(char)); if (sea->a[i]==NULL) return(NULL);    // allocazione m colonne
  60.     }
  61.     return(sea);
  62. }
  63.  
  64. /** dealloca l'area di gioco in tutte le sue parti
  65.     \param sea area da deallocare
  66. */
  67. void distruggi_area (area_t * sea){
  68.     free(sea);
  69.     /* non so se devo deallocare anche singolarmente la
  70.     matrice sea->a. In questo caso però non ho in input
  71.     il numero di righe/colonne da deallocare
  72.     - slide Pelagatti allocazione dinamica pag 54 - */
  73. }
  74.  
  75. /**
  76.    inizializza l'area di gioco tutta a EMPTY
  77.    \param sea l'area di gioco da inizializzare
  78. */
  79. void init (area_t * sea){
  80.     // riempimento matrice a EMPTY
  81.     for(i=0; i<n;i++){
  82.         for(j=0; j<m; j++)
  83.             (sea->a)[i][j]=EMPTY;
  84.     }
  85. }
  86.  
  87.  
  88. /**
  89.    inserisce nell'area di gioco una nuova nave lunga 1 (posizionamento casuale)
  90.    \param sea l'area di gioco
  91.  
  92.    \retval 0 se l'inserimento è andato a buon fine
  93.    \retval -1 se si è verificato un errore (es. non c'e' posto)
  94. */
  95. int put_one (area_t* sea);
  96.  
  97. /**
  98.    inserisce nell'area di gioco una nuova nave lunga 2 (posizionamento casuale e orientamento casuale della nave)
  99.    \param sea area di gioco
  100.  
  101.    \retval 0 se l'inserimento è andato a buon fine
  102.    \retval -1 se si è verificato un errore (es. non c'e' posto)
  103. */
  104. int put_two (area_t * sea);
  105.  
  106. /**
  107.    inserisce nell'area di gioco una nuova nave lunga 3 (posizionamento casuale e orientamento casuale della nave)
  108.    \param sea area di gioco
  109.  
  110.    \retval 0 se l'inserimento è andato a buon fine
  111.    \retval -1 se si è verificato un errore (es. non c'e' posto)
  112. */
  113. int put_three (area_t* sea);
  114.  
  115. /**
  116.    stampa fomattata del mare su stdout (FORNITO DAI DOCENTI NON MODIFICARE -- file bnavale_docenti.c)
  117.    \param sea area da stampare
  118. */
  119. void print_area (area_t* sea);
  120.  
  121. /**
  122.   conta le navi di tipo k in sea, incluse navi colpite o affondate (FORNITO DAI DOCENTI NON MODIFICARE -- file bnavale_docenti.c)
  123.   \param k tipo di navi da contare ONE, TWO o THREE
  124.  
  125.   \retval n numero delle navi di tipo k, o -1 se k non è ONE, TWO o THREE
  126. */
  127. int conta_navi (area_t* sea, char k);
  128.  
  129. /** esiti possibili della funzione esegui_mossa */
  130. #define ERRORE          130
  131. #define ACQUA            131
  132. #define AFFONDATA_ONE    132
  133. #define AFFONDATA_TWO   133
  134. #define AFFONDATA_THREE 134
  135. #define COLPITA_TWO  135
  136. #define COLPITA_THREE  136
  137.  
  138. /**
  139.    Controlla l'esito del colpo di coordinate (x,y) nell'area di gioco
  140.    \param sea area di gioco
  141.    \param x,y coordinate del colpo
  142.  
  143.    \retval e uno dei valori di esito definiti sopra
  144.  
  145.  */
  146. int esegui_mossa (area_t * sea, int x, int y);
  147.  
  148. /**
  149.    stampa un messaggio di errore in base all'esito (fornita dai docenti nel file bnavale_docenti.c NON MODIFICARE  -- file bnavale_docenti.c)
  150.    \param e uno dei valori di esito definiti sopra */
  151.    void stampa_esito (int e);
  152.  
  153. /** funzione crea le due aree di gioco e gestisce una partita con il computer. Si puo' assumere che l'umano giochi per primo.
  154.     \param nXm ampiezza area di gioco
  155.     \param n_navi1 numero navi da 1 inserite casulamente nelle due aree
  156.     \param n_navi2 numero navi da 2 inserite casulamente nelle due aree
  157.     \param n_navi3 numero navi da 3 inserite casulamente nelle due aree */
  158. void gioca(unsigned n, unsigned m, unsigned n_navi1, unsigned n_navi2, unsigned n_navi3);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement