// Esempio di come sia possibile stampare una matrice
// come se fosse una scacchiera
#include <stdio.h>
#include <stdlib.h>

#define NUMERO_RIGHE 10
#define NUMERO_COLONNE 12

void inizializza_matrice(char matrice[NUMERO_RIGHE][NUMERO_COLONNE]);
void stampa_matrice(char matrice[NUMERO_RIGHE][NUMERO_COLONNE]);

int main()
{
    char scacchiera[NUMERO_RIGHE][NUMERO_COLONNE];
    char selezione_utente;
    
    selezione_utente='\n';
    while(selezione_utente=='\n')
    {
		inizializza_matrice(scacchiera);
		
		// Stampa righe vuote solo per allineare verticalmente le varie stampe
		printf("\n\n");

		stampa_matrice(scacchiera);
		
		// Stampa righe vuote solo per allineare verticalmente  le varie stampe
		printf("\n\n");
		
		selezione_utente=getchar();
 	}	
 	exit(0);
}

void inizializza_matrice(char matrice[NUMERO_RIGHE][NUMERO_COLONNE])
{
    int i,j;
    double numero_casuale;
    
    // La scacchiera viene inizializzata ad un carattere casuale
    for(i=0; i<NUMERO_RIGHE; i++)
    	for(j=0; j<NUMERO_COLONNE; j++)
		{
		    numero_casuale=(double)rand()/(double)RAND_MAX;
		    if(numero_casuale<0.33)
		    	matrice[i][j]='@';
  			else if(numero_casuale>0.66)
  				matrice[i][j]='*';
			else 
				matrice[i][j]=' ';
		}    
}

void stampa_matrice(char matrice[NUMERO_RIGHE][NUMERO_COLONNE])
{
    int i,j;
    
  	// Stampa la scacchiera  
	
	// prima una riga in alto
	for(j=0; j<NUMERO_COLONNE; j++)
	{
	    printf("----");
	}
	printf("\n");

	// poi ciascuna riga
    for(i=0; i<NUMERO_RIGHE; i++)
    {
    	for(j=0; j<NUMERO_COLONNE; j++)
		{
		    printf("| %c ",matrice[i][j]);
		}
  		printf("|\n");
  		if(i != NUMERO_RIGHE-1)
  		{
    		for(j=0; j<NUMERO_COLONNE; j++)
			{
		    	printf("|---");
			}
  			printf("|\n");
		}		
	}	
	
	// e infine la base
	for(j=0; j<NUMERO_COLONNE; j++)
	{
	    printf("----");
	}
	printf("\n");
}

