Ciao ragazzi ho risolto da solo il problem, ora però qui sono proprio imbambolato perchè non so come risolvere la situazione, allora siccome il testo del problema recita:
L’oggetto ( la navicella penso ) si muove di una o due posizioni casuali. Ad ogni turno l’auto viene spostata automaticamente a destra o a sinistra nel caso un ostacolo si trovi nel suo intorno vi propongo come sto cercando di risolvere questa parte
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define LATOMIN 20
#define MAX_PASSI 10
#define MAX_SPAZIO 50
void creazione_campo(int,int,int);
void credits();
void rules();
char S='*';
char E=' ';
char spazio[MAX_SPAZIO][MAX_SPAZIO];
int main()
{
int riga,colonna,vite=1,na_1,na_2,passi=0,logical=1,i,j;
register char direzione;
int dim1,dim2;
// definisco la matrice di gioco
do
{
printf("Inserisci la lunghezza del campo di gioco (min %d):\t",LATOMIN);
scanf("%d",&dim1);
printf("Inserisci la larghezza del campo da gioco ( min %d):\t",LATOMIN);
scanf("%d",&dim2);
}
while(dim1 < LATOMIN && dim2 < LATOMIN);
for(i=0; i <dim1; i++)
{
for(j=0; j<dim2; j++)
{
if(i==0 || i==dim1-1)
{
spazio[i][j]=S;
}
else
{
spazio[i][j]=E;
}
if(j==0 || j==dim2-1)
{
spazio[i][j]=S;
}
else
{
spazio[i][j]=E;
}
}
printf("\n");
}
system("cls");
credits();
system("pause");
system("cls");
rules();
printf("\n");
system("pause");
system("cls");
Start:
srand(time(NULL));
riga=dim1-2;
do
{
colonna=2+rand()%dim2-2;
}
while (spazio[riga][colonna]=='V');
spazio[riga][colonna]='V';
na_1=1+rand()%8;
na_2=1+rand()%colonna-10;
spazio[na_1][na_2]='X';
while (logical==1)
{
if((passi == MAX_PASSI)&&(vite == 1)) // Controllo se i passi sono ugalu a quelli programmati da fare prima di superare il gioco tenedo conto dello stato della vita
{
printf("\a\n\t----------------------------------------------------\n");
printf(" !!! PLAYER WIN THE GAME !!! \n");
printf("\n\t----------------------------------------------------\n");
logical = 0;
system("PAUSE");
}
//Controllo sul numero delle vite e dei passi. Se pari a zero e i passi sono minori di quelli programmati la partita termina
if((passi <= MAX_PASSI)&&(vite==0))
{
printf("La tua auto e' distrutta!\n\n");
logical=0;
}//Controllo sul numero delle vite. Se pari a zero la partita termina
system("cls");
j=1+rand()%dim2;
spazio[1][j]='O';
int decisione=0+rand()%1;
creazione_campo(dim1,dim2,vite); //richiamo la funzione crea_spazio
if(spazio[riga-4][colonna]=='O' && spazio[riga][colonna]=='V') // riga-4 è la posizione con cui vado a confrontare la posizione dell' ostacolo
{
if(decisione==0) // sinistra
{
passi+=1;
spazio[riga][colonna]=E;
colonna--;
if (spazio[riga][colonna]==S)
{
colonna++;
}
spazio[riga][colonna]='V';
}
if(decisione==1) // destra
{
passi+=1;
spazio[riga][colonna]=E;
colonna++;
if (spazio[riga][colonna]==S)
{
colonna--;
}
spazio[riga][colonna]='V';
}
}
else
{
passi+=1;
spazio[riga][colonna]='V';
}
system("PAUSE");
}
// direzione=getchar();
// //Switch-case che determina il movimento della navicella nel campo dei meteoriti. All'interno di ogni case ci sono dei controlli
// fflush(stdin);
//
// switch (direzione)
// {
// case 'a':
// case 'A':
//
// passi+=1;
// spazio[riga][colonna]=E;
// colonna--;
// if (spazio[riga][colonna]==S)
// {
// printf("Non puoi spostarti in questa direzione!\n");
// system("pause");
// colonna++;
// spazio[riga][colonna]='V';
// }
//
// break;
// case 'd':
// case 'D':
//
// passi+=1;
// spazio[riga][colonna]=E;
// colonna++;
// if (spazio[riga][colonna]==S)
// {
// printf("Non puoi spostarti in questa direzione!\n");
// colonna--;
// system("pause");
// }
// spazio[riga][colonna]='V';
// break;
//
// default: // qualsiasi altro tasto ASCII viene considerato come un passo
// passi+=1;
//
// }
//Questa porzione di codice ha il compito di generare degli ostacoli che si sposteranno lungo il percorso ad ogni iterazione
for(i=dim1-2; i>=0; i--)
{
for(j=dim2-2; j>=0; j--)
{
if(spazio[i][j]=='O')
{
if(i!=dim1-2 && spazio[i+1][j]!='X')
{
spazio[i][j]=E;
if (spazio[i+1][j]=='V' && vite!=0)
{
printf("BOOM!! Hai colpito un ostacolo che ha danneggiato l'auto! Hai perso!\n");
printf("--------------------------------------------------------------------\n\n\n");
vite--;
system("pause");
}
else
{
spazio[i+1][j]='O';
}
}
else
{
spazio[i][j]=E;
}
}
}
}
system("cls");
}
void creazione_campo(int dim1, int dim2,int vite) // stampa della posizione attuale degli elementi nella matrice
{
register int i,j;
printf("\n");
for (i=0; i<dim1; i++)
{
for (j=0; j<dim2; j++)
{
if (spazio[i][j]==S || spazio[i][j]=='O' || spazio[i][j]=='X' || spazio[i][j]=='V')
{
printf("%c ",spazio[i][j]);
}
else
{
printf(" ");
}
}
printf("\n");
}
}
ora come potrete vedere dal codice ce una parte tutta commentata, la quale funziona a dovere,
// direzione=getchar();
// //Switch-case che determina il movimento della navicella nel campo dei meteoriti. All'interno di ogni case ci sono dei controlli
// fflush(stdin);
//
// switch (direzione)
// {
// case 'a':
// case 'A':
//
// passi+=1;
// spazio[riga][colonna]=E;
// colonna--;
// if (spazio[riga][colonna]==S)
// {
// printf("Non puoi spostarti in questa direzione!\n");
// system("pause");
// colonna++;
// spazio[riga][colonna]='V';
// }
//
// break;
// case 'd':
// case 'D':
//
// passi+=1;
// spazio[riga][colonna]=E;
// colonna++;
// if (spazio[riga][colonna]==S)
// {
// printf("Non puoi spostarti in questa direzione!\n");
// colonna--;
// system("pause");
// }
// spazio[riga][colonna]='V';
// break;
//
// default: // qualsiasi altro tasto ASCII viene considerato come un passo
// passi+=1;
//
// }
ma per attenermi al testo specificato ho fatto:
int decisione=0+rand()%1;
creazione_campo(dim1,dim2,vite); //richiamo la funzione crea_spazio
if(spazio[riga-4][colonna]=='O' && spazio[riga][colonna]=='V') // riga-4 è la posizione con cui vado a confrontare la posizione dell' ostacolo
{
if(decisione==0) // sinistra
{
passi+=1;
spazio[riga][colonna]=E;
colonna--;
if (spazio[riga][colonna]==S)
{
colonna++;
}
spazio[riga][colonna]='V';
}
if(decisione==1) // destra
{
passi+=1;
spazio[riga][colonna]=E;
colonna++;
if (spazio[riga][colonna]==S)
{
colonna--;
}
spazio[riga][colonna]='V';
}
}
else
{
passi+=1;
spazio[riga][colonna]='V';
}
system("PAUSE");
}
ma mi crea gli oggeti ed eccetera, ma gli ostacoli non scendono verso il basso ovvero rimangono fissi sulla prima riga, mi aiutereste cortesemente anche con idee??