Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- Autore: Mirco Springhetti
- Consegna: Progetto.
- **/
- #include <stdlib.h>
- #include <stdio.h>
- #include <math.h>
- #include <time.h>
- #include <string.h>
- #define N 10
- int tabellauser [N][N];
- int tabellacpu [N][N];
- int c;
- void initialize ()
- {
- int i,j;
- for (i=0;i<N;i++)
- {
- for (j=0;j<N;j++)
- {
- tabellauser[i][j]=0;
- tabellacpu[i][j]=0;
- }
- }
- }
- void debugprint()
- {
- int i,j,s=1;
- system("clear");
- printf("\t\t\t 1 2 3 4 5 6 7 8 9 10\n ╔════════════════════╗\n");
- for (i=0;i<N;i++)
- {
- printf("\t\t %d ║",s);
- for (j=0;j<N;j++)
- {
- if(tabellacpu[i][j]==1) printf ("■ ");
- else printf ("□ ");
- }
- s++;
- printf ("║\n");
- }
- printf (" ╚════════════════════╝");
- }
- void insertcoords()
- {
- int x,g,n,y,i;
- char dir;
- n=4;
- g=2;
- for(c=0;c<n;c++)
- {
- start:
- //coordinata X
- printf ("\n\nInserire la coordinata X della nave da dimensione %d numero %d: ",g,c+1);
- scanf("%d",&y);
- if (y>N||y<1)
- {
- do
- {
- printf("Valore non valido(Valore dev'essere maggiore di 0 e minore di 10)");
- scanf("%d",&y);
- }
- while (y>N||y<1);
- }
- //coordinata Y
- printf ("\n\nInserire la coordinata Y della nave di dimensione %d numero %d: ",g,c+1);
- scanf("%d",&x);
- getchar();
- //Guarda se il carattere inserito è una direzione cardinale
- if (x>N||x<1)
- {
- do
- {
- printf("Valore non valido(Valore dev'essere maggiore di 0 e minore di 10)");
- scanf("%d",&x);
- }
- while (x>N||x<1);
- }
- //Direzione della barca
- printf ("\n\nInserire la direzione in cui si espanderà la barca [N(ord),S(ud),E(st),O(vest)] ");
- scanf ("%c",&dir);
- getchar();
- if (dir!='n'&& dir!='N'&&dir!='s'&& dir!='S'&&dir!='e'&& dir!='E'&&dir!='o'&& dir!='O')
- {
- do
- {
- printf("\nValore invalido(Valore dev'essere la prima lettera di una direzione cardinale\n");
- scanf("%c",&dir);
- }
- while (dir!='n'&& dir!='N'&&dir!='s'&& dir!='S'&&dir!='e'&& dir!='E'&&dir!='o'&& dir!='O');
- }
- //Evitare che le barche si sovrappongono.
- if (tabellauser[x-1][y-1]==1)
- {
- printf ("\nErrore: Le barche si sovrappongono.\n");
- goto start;
- }
- for (i=1;i<g;i++)
- {
- if(dir=='n'||dir=='N')
- {
- if(tabellauser[x-1-i][y-1]==1)
- {
- printf ("\nErrore: Le barche si sovrappongono.\n");
- goto start;
- }
- }
- if(dir=='s'||dir=='S')
- {
- if(tabellauser[x-1+i][y-1]==1)
- {
- printf ("\nErrore: Le barche si sovrappongono.\n");
- goto start;
- }
- }
- if(dir=='e'||dir=='E')
- {
- if(tabellauser[x-1][y-1+i]==1)
- {
- printf ("\nErrore: Le barche si sovrappongono.\n");
- goto start;
- }
- }
- if(dir=='o'||dir=='O')
- {
- if(tabellauser[x-1][y-1-i]==1)
- {
- printf ("\nErrore: Le barche si sovrappongono.\n");
- goto start;
- }
- }
- }
- //Evitare che le barche siano fuori dalle coordinate.
- for (i=1;i<g;i++)
- {
- if(dir=='n'||dir=='N')
- {
- if(x-g<0)
- {
- printf ("\nErrore: La barca è fuori dalle coordinate.\n");
- goto start;
- }
- }
- if(dir=='s'||dir=='S')
- {
- if(x-1+g>10)
- {
- printf ("\nErrore: La barca è fuori dalle coordinate.\n");
- goto start;
- }
- }
- if(dir=='e'||dir=='E')
- {
- if(y-1+g>10)
- {
- printf ("\nErrore: La barca è fuori dalle coordinate.\n");
- goto start;
- }
- }
- if(dir=='o'||dir=='O')
- {
- if(y-g<0)
- {
- printf ("\nErrore: La barca è fuori dalle coordinate.\n");
- goto start;
- }
- }
- }
- //Se tutto è andato a buon fine,Inserimento nella matrice.
- tabellauser[x-1][y-1]=1;
- switch (dir) {
- case 'n':
- for (i=1;i<g;i++)
- {
- tabellauser[x-1-i][y-1]=1;
- }
- break;
- case 'N':
- for (i=1;i<g;i++)
- {
- tabellauser[x-1-i][y-1]=1;
- }
- break;
- case 's':
- for (i=1;i<g;i++)
- {
- tabellauser[x-1+i][y-1]=1;
- }
- break;
- case 'S':
- for (i=1;i<g;i++)
- {
- tabellauser[x-1+i][y-1]=1;
- }
- break;
- case 'e':
- for (i=1;i<g;i++)
- {
- tabellauser[x-1][y-1+i]=1;
- }
- break;
- case 'E':
- for (i=1;i<g;i++)
- {
- tabellauser[x-1][y-1+i]=1;
- }
- break;
- case 'o':
- for (i=1;i<g;i++)
- {
- tabellauser[x-1][y-1-i]=1;
- }
- break;
- case 'O':
- for (i=1;i<g;i++)
- {
- tabellauser[x-1][y-1-i]=1;
- }
- break;
- }
- debugprint(); //Stampa della matrice.
- }
- //Aumento grandezza barca, diminuzione numero barche da inserire
- g++;
- n--;
- c=0;
- if (n==0) return 0; //Guarda se il numero di barche da inserire è 0 (L'ultima barca da 5 è stata inserita). Se sì, termina la funzione.
- else goto start; //Se no, ritorna a start, ovvero l'inserimento delle nuove coordinate.
- }
- void insertcoordscpu()
- {
- int x,g,n,y,i,dir;
- n=4;
- g=2;
- srand(time(NULL));
- for(c=0;c<n;c++)
- {
- start:
- //coordinata X
- y=rand()%9+1;
- //coordinata Y
- x=rand()%9+1;
- //direzione della barca
- dir=rand()%3+1;
- //Evitare che le barche si sovrappongono.
- if (tabellacpu[x-1][y-1]==1)
- {
- goto start;
- }
- for (i=1;i<g;i++)
- {
- if(dir==1)
- {
- if(tabellacpu[x-1-i][y-1]==1)
- {
- goto start;
- }
- }
- if(dir==3)
- {
- if(tabellacpu[x-1+i][y-1]==1)
- {
- goto start;
- }
- }
- if(dir==2)
- {
- if(tabellacpu[x-1][y-1+i]==1)
- {
- goto start;
- }
- }
- if(dir==4)
- {
- if(tabellacpu[x-1][y-1-i]==1)
- {
- goto start;
- }
- }
- }
- //Evitare che le barche siano fuori dalle coordinate.
- for (i=1;i<g;i++)
- {
- if(dir==1)
- {
- if(x-g<0)
- {
- goto start;
- }
- }
- if(dir==3)
- {
- if(x-1+g>10)
- {
- goto start;
- }
- }
- if(dir==2)
- {
- if(y-1+g>10)
- {
- goto start;
- }
- }
- if(dir==4)
- {
- if(y-g<0)
- {
- goto start;
- }
- }
- }
- //Se tutto è andato a buon fine,Inserimento nella matrice.
- tabellacpu[x-1][y-1]=1;
- switch (dir) {
- case 1:
- for (i=1;i<g;i++)
- {
- tabellacpu[x-1-i][y-1]=1;
- }
- break;
- case 3:
- for (i=1;i<g;i++)
- {
- tabellacpu[x-1+i][y-1]=1;
- }
- break;
- case 2:
- for (i=1;i<g;i++)
- {
- tabellacpu[x-1][y-1+i]=1;
- }
- break;
- case 4:
- for (i=1;i<g;i++)
- {
- tabellacpu[x-1][y-1-i]=1;
- }
- break;
- }
- }
- //Aumento grandezza barca, diminuzione numero barche da inserire
- g++;
- n--;
- c=0;
- system("clear");
- if (n==0)
- {
- debugprint(); //Stampa della matrice.
- return 0; //Guarda se il numero di barche da inserire è 0 (L'ultima barca da 5 è stata inserita). Se sì, termina la funzione.
- }
- else goto start; //Se no, ritorna a start, ovvero l'inserimento delle nuove coordinate.
- }
- int main (){
- initialize(); //rende tutte le variabili della matrice 0.
- debugprint(); //stampa la matrice per la prima volta.
- insertcoordscpu();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement