Vorrei postare la mia versione dell'esercizio, non so se sia etico, possa sembrare scortese, o addirittura è fuori dal regolamento del forum, solo stamani, leggendo il problema alle sette del mattino, ho pasticciato col codice per vedere il problema e capire come funzionasse, quindi mi dispiace che si stato tempo perso.
Se la cosa sembra scortese, basta accennarlo e provvederò a eliminare il codice da questo messaggio.
Come ho interpretato io le richieste della traccia, mi soffermo sul punto TENTARE di eseguire una mossa, perché lo preso come essenziale.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
/* Per visuallizzare la scacchiera impostare le dimensione della finestra
del prompt a 200 x 200 e massimizzatela */
int passo_casuale(char [][30],int*,int*,int*,int*);
void stampa_scacchiera(char scacchiera[][30]);
void inizializza_scacchiera(char scacchiera[][30]);
int main()
{
int i,x1=0,y1=0,x2=29,y2=29,cammino_totale=0;
int contatore=0;
srand(time(NULL));
char scacchiera[30][30]=
{{'X','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','Y'}};
/* DA test possono servire 2000 interazioni perchè casualmente le due pedine si trovino sulla stessa casella*/
while( contatore<10){
cammino_totale=passo_casuale(scacchiera,&x1,&y1,&x2,&y2);
printf("Cammino terminato\nNumero di passi eseguiti: %d\n",cammino_totale);
//Stampo i valori delle posizioni, al termine delle mosse, altrimenti sarebbe del tutto inutile
// usare puntatori e passare le varibili per indirizzo, ma si potrebbero usare semplici variabili locali
printf(" posizione pedina uno %d - %d posizione pedina due %d - %d \n",x1,y1,x2,y2);
puts("_______________________________________________________");
contatore++;
x1=0;y1=0;x2=29;y2=29; // riposiziono la scacchiera in condizioni iniziali
inizializza_scacchiera(scacchiera);
}
getchar();
}
int passo_casuale(char scacchiera[][30],int *x1,int *y1,int *x2,int *y2)
{
/* Funzione da modificare radicalmente, non esegue il corretto svolgimento delle richeste della traccia */
int p=0; //numero casuale
int ciclo=1;
int passi=0;
char selettore_pedina=0;
char Tentativo_mossa_finale=1;
while(Tentativo_mossa_finale){// Ripete mosse, fino a condizione inposta dalla traccia
/* Implementata la visualizzazione della scacchiera
non è richiesta nella traccia.
L'esecuzione della stampa scacchiera, rallenta
l'esecuzione del codice, rendendo il tempo di esecuzione
estremamente lungo, si parla di molte ore.
Bello però provare l'effetto grafico per qualche minuto */
//stampa_scacchiera(scacchiera);
ciclo=1;
selettore_pedina=selettore_pedina^1;
if(selettore_pedina){// Se ha valore uno pedina X
while(ciclo){//ripete fino a quanto non si genera una mossa valida
p=rand()%4;
switch(p){
case 0:// spostamento pedina destra
if( (*y1)+1<=29 && scacchiera[*x1][(*y1)+1]!='Y' ){
scacchiera[*x1][(*y1)+1]= 'X';
scacchiera[*x1][*y1]= '-';
(*y1)++;
ciclo=0;
passi++;
}
else{
if(scacchiera[*x1][(*y1)+1]=='Y'){
Tentativo_mossa_finale=0;
ciclo=0;
}
}
break;
case 1:// spostamento pedina sinistra
if( (*y1)-1>=0 && scacchiera[*x1][(*y1)-1]!='Y' ){
scacchiera[*x1][(*y1)-1]= 'X';
scacchiera[*x1][*y1]= '-';
(*y1)--;
ciclo=0;
passi++;
}
else{
if(scacchiera[*x1][(*y1)-1]=='Y'){
Tentativo_mossa_finale=0;
ciclo=0;
}
}
break;
case 2:// spostamento pedina alto
if( (*x1)-1>=0 && scacchiera[(*x1)-1][*y1]!='Y'){
scacchiera[(*x1)-1][*y1]= 'X';
scacchiera[*x1][*y1]= '-';
(*x1)--;
ciclo=0;
passi++;
}
else{
if(scacchiera[(*x1)-1][*y1]=='Y'){
Tentativo_mossa_finale=0;
ciclo=0;
}
}
break;
case 3:// spostamento pedina basso
if( (*x1)+1<=29 && scacchiera[(*x1)+1][*y1]!='Y'){
scacchiera[(*x1)+1][*y1]= 'X';
scacchiera[*x1][*y1]='-';
(*x1)++;
ciclo=0;
passi++;
}
else{
if(scacchiera[(*x1)+1][*y1]=='Y'){
Tentativo_mossa_finale=0;
ciclo=0;
}
}
break;
} //end switch
} //end while
}// end if
else if(selettore_pedina==0){// Se ha valore uno pedina Y
while(ciclo){//ripete fino a quanto non si genera una mossa valida
p=rand()%4;
switch(p){
case 0:// spostamento pedina destra
if( (*y2)+1<=29 && scacchiera[*x2][(*y2)+1]!='X'){
scacchiera[*x2][(*y2)+1]= 'Y';
scacchiera[*x2][*y2]= '-';
(*y2)++;
ciclo=0;
passi++;
}
else{
if(scacchiera[*x2][(*y2)+1]=='X'){
Tentativo_mossa_finale=0;
ciclo=0;
}
}
break;
case 1:// spostamento pedina sinistra
if( (*y2)-1>=0 && scacchiera[*x2][(*y2)-1]!='X'){
scacchiera[*x2][(*y2)-1]= 'Y';
scacchiera[*x2][*y2]= '-';
(*y2)--;
ciclo=0;
passi++;
}
else{
if(scacchiera[*x2][(*y2)-1]=='X'){
Tentativo_mossa_finale=0;
ciclo=0;
}
}
break;
case 2:// spostamento pedina alto
if( (*x2)-1>=0 && scacchiera[(*x2)-1][*y2]!='X'){
scacchiera[(*x2)-1][*y2]= 'Y';
scacchiera[*x2][*y2]= '-';
(*x2)--;
ciclo=0;
passi++;
}
else{
if(scacchiera[(*x2)-1][*y2]=='X'){
Tentativo_mossa_finale=0;
ciclo=0;
}
}
break;
case 3:// spostamento pedina basso
if( (*x2)+1<=29 && scacchiera[(*x2)+1][*y2]!='X'){
scacchiera[(*x2)+1][*y2]= 'Y';
scacchiera[*x2][*y2]='-';
(*x2)++;
ciclo=0;
passi++;
}
else{
if(scacchiera[(*x2)+1][*y2]=='X'){
Tentativo_mossa_finale=0;
ciclo=0;
}
}
break;
} // end switch
} //end while
}// end else if
}// end while
return passi;
}// end function
void stampa_scacchiera(char scacchiera[][30]){
int i=0, j=0;
for(i=0;i<30;i++){
for(j=0;j<30;j++){
printf(" %c ",scacchiera[i][j]);
}
printf("\n");
}
sleep(200);
system("CLS");
}
void inizializza_scacchiera(char scacchiera[][30]){
int i=0, j=0;
for(i=0;i<30;i++){
for(j=0;j<30;j++){
scacchiera[i][j]='-';
}
}
scacchiera[0][0] ='X';
scacchiera[29][29]='Y';
}