/*******************************Inizio Programma********************************/
/*
Librerie incluse per l'utilizzo di vare function all'interno del programma.
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
/*
Prototipi delle funzioni.
*/
void StampaScacchiera(char [][8]);
void gattoSu(char [][8],char [], int, int);
void gattoGiu(char [][8],char [], int, int);
void gattoDx(char [][8],char [], int, int);
void gattoSx(char [][8],char [], int, int);
int main()
{
/*
Dichiarazione delle variabili.
*/
int i; /* Contatore per i cicli while.*/
int posRiga, posCol; /* Variabili utilizzate per riempire la scacchiera in modo pseudo-random*/
srand(time(NULL)); /* Funzione che inizializza lo pseudo-random. Se non ci fosse, ad ogni avvio del programma
la posizione dei pedoni e della regina, sarebbe sempre la stessa.*/
char colonne[8] = {'a','b','c','d','e','f','g','h'}; /*Dichiarazione e inizializzazione della stringa utilizzata
per definire le colonne della scacchiera.*/
char scacchiera[][8] =
{{'b','n','b','n','b','n','b','n'},
{'n','b','n','b','n','b','n','b'},
{'b','n','b','n','b','n','b','n'},
{'n','b','n','b','n','b','n','b'},
{'b','n','b','n','b','n','b','n'},
{'n','b','n','b','n','b','n','b'},
{'b','n','b','n','b','n','b','n'},
{'n','b','n','b','n','b','n','b'}}; /* Dichiarazione e inizializzazione della scacchiera.*/
char s;
i = 0; /* Inizializzazione del contatore.*/
while(i<2)
{
posRiga = rand()%8;
posCol = rand()%8;
if(scacchiera[posRiga][posCol] == 'b' || scacchiera[posRiga][posCol] == 'n')
{
scacchiera[posRiga][posCol] = 'G';
i++;
}
} /* Ciclo while: ripete il clclo finchè la condizione resta soddisfatta.
Posiziona in modo casuale i pedoni nella scacchiera, facendo in modo da non sovrascrivere
eventuali altri pedoni. Alla fine, il contatore viene autoincrementato.*/
i = 0; /* Il contatore viene nuovamente azzerato in modo da poterlo riutilizzare.*/
while(i<1)
{
posRiga = rand()%8;
posCol = rand()%8;
if(scacchiera[posRiga][posCol] == 'b' || scacchiera[posRiga][posCol] == 'n')
{
scacchiera[posRiga][posCol] = 'C';
i++;
}
} /* Altro ciclo while: Posiziona in modo casuale il primo cane*/
printf("Cane in %c%d puo' catturare i seguenti gatti: \n\n",colonne[posCol],8-posRiga); /* Stampiamo la posizione della
regina.*/
gattoSu(scacchiera,colonne,posRiga,posCol);/* Richiamo della funzione PedoneSu.*/
gattoGiu(scacchiera,colonne,posRiga,posCol);/* Richiamo della funzione PedoneGiu.*/
gattoDx(scacchiera,colonne,posRiga,posCol);/* Richiamo della funzione PedoneDx.*/
gattoSx(scacchiera,colonne,posRiga,posCol);/* Richiamo della funzione PedoneSx.*/
i = 0; /* Il contatore viene nuovamente azzerato in modo da poterlo riutilizzare.*/
while(i<1)
{
posRiga = rand()%8;
posCol = rand()%8;
if(scacchiera[posRiga][posCol] == 'b' || scacchiera[posRiga][posCol] == 'n')
{
scacchiera[posRiga][posCol] = 'C';
i++;
}
} /* Altro ciclo while: Posiziona in modo casuale il secondo cane.*/
printf("Cane in %c%d puo' catturare i seguenti gatti: \n\n",colonne[posCol],8-posRiga); /* Stampiamo la posizione del cane.*/
gattoSu(scacchiera,colonne,posRiga,posCol);/* Richiamo della funzione gattoSu.*/
gattoGiu(scacchiera,colonne,posRiga,posCol);/* Richiamo della funzione gattoGiu.*/
gattoDx(scacchiera,colonne,posRiga,posCol);/* Richiamo della funzione gattoDx.*/
gattoSx(scacchiera,colonne,posRiga,posCol);/* Richiamo della funzione gattoeSx.*/
StampaScacchiera(scacchiera);/* Richiamo della funzione StampaScacchiera*/
system("pause"); /* Dato che sto utilizzando un ambiente di sviluppo Dev, mi è
opportuno inserire questo comando in quanto, senza di esso, la finestra di MS-DOS
che si apre all'avvio del programma, si chiuderebbe.*/
}
/*Inizio funzione*/
void StampaScacchiera(char scacchiera[][8]) /* Funzione StampaScacchiera, a cui passiamo la matrice "scacchiera" di tipo char.*/
{
int i,j; /* Dichiarazione di due variabili interne alla funzione, quindi locali ad essa.*/
printf("\n"); /*"Stampa" un rigo vuoto*/
printf(" a b c d e f g h\n\n"); /*Stampa ciò che viene scritto tra le parentesi, e va a capo due volte.*/
for(i=0;i<8;i++) /*Ciclo for: inizializza la variabile i, la incrementa ad ogni ciclo fatto, e si ferma quando
l'indice raggiunge il valore "8".*/
{
printf("%d ",8-i);
for(j=0;j<8;j++) /*Ciclo for innestato.*/
{
printf(" %c", scacchiera[i][j]);
}
printf("\n");
}
} /*La funzione, stampa la scacchiera completa.*/
/*Fine funzione.*/
void gattoSu(char scacchiera[][8], char colonne[], int posRiga, int posCol){
int i = posRiga;
int gattoTrovato = 0;
while(i >= 0 && gattoTrovato == 0){
if(scacchiera[i][posCol] == 'G'){
printf("Gatto in %c%d\n", colonne[posCol], 8 - i);
gattoTrovato = 1;
}
else
i--;
}
}
void gattoGiu(char scacchiera[][8], char colonne[], int posRiga, int posCol){
int i = posRiga;
int gattoTrovato = 0;
while(i < 8 && gattoTrovato == 0){
if(scacchiera[i][posCol] == 'G'){
printf("Gatto in %c%d\n", colonne[posCol], 8 - i);
gattoTrovato = 1;
}
else
i++;
}
}
void gattoDx(char scacchiera[][8], char colonne[], int posRiga, int posCol){
int i = posCol;
int gattoTrovato = 0;
while(i < 8 && gattoTrovato == 0){
if(scacchiera[posRiga][i] == 'G'){
printf("Gatto in %c%d\n\n", colonne[i], 8 - posRiga);
gattoTrovato = 1;
}
else
i++;
}
}
void gattoSx(char scacchiera[][8], char colonne[], int posRiga, int posCol){
int i = posCol;
int gattoTrovato = 0;
while(i >= 0 && gattoTrovato == 0){
if(scacchiera[posRiga][i] == 'G'){
printf("Gatto in %c%d\n\n", colonne[i], 8 - posRiga);
gattoTrovato = 1;
}
else
i--;
}
}