Ciao ragazzi sono alla resa finale di questo gioco, ora date un occhiata al codice e ditemi cortesemente se è per colpa di un passaggio di parametri errato o altro che sia quando richiamo la funzione manuale o automatico , l' auto in creazione_campo non subisce un cambiamento di locazione! datemi un ultimo suggerimento
MAIN
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define LATOMIN 20
#define MAX_PASSI 100
#define MAX_SPAZIO 50
void creazione_campo(int,int);
void credits();
void rules();
int manuale(int ,int, int, register char);
int automatico(int, int, int);
int scelta();
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) e (max %d):\t",LATOMIN,MAX_SPAZIO);
scanf("%d",&dim1);
printf("Inserisci la larghezza del campo da gioco ( min %d) e (max %d):\t",LATOMIN,MAX_SPAZIO);
scanf("%d",&dim2);
}
while(dim1 < LATOMIN && dim1 > MAX_SPAZIO && dim2 < LATOMIN && dim2 > MAX_SPAZIO );
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'); // posizione casuale della macchina
spazio[riga][colonna]='V';
na_1=1+rand()%8;
na_2=1+rand()%colonna-10;
spazio[na_1][na_2]='X';
int flag=scelta();
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';
creazione_campo(dim1,dim2); //richiamo la funzione crea_spazio
if(flag==1)
{
passi=manuale(riga,colonna,passi,direzione); // richiamo la funzione manuale
}
else
{
passi=automatico(riga,colonna,passi); // richiamo la funzione demo
}
//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");
}
}
Creazione campo
void creazione_campo(int dim1, int dim2) // 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");
}
}
Manuale
int manuale(int riga,int colonna,int passi, register char direzione)
{
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':
return 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':
return 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
return passi+=1;
}
}
Automatico e Scelta
int automatico(int riga, int colonna, int passi)
{
int decisione=rand()%1; // destra o sinistra
int decisione2=1+rand()%2; // uno o due posizioni casuali
if(spazio[riga-4][colonna]=='O' || spazio[riga-3][colonna]=='O' && spazio[riga][colonna]=='V') // riga-4 e riga -3 è la posizione con cui vado a confrontare la posizione dell' ostacolo
{
if(decisione==0 && decisione2==1) // sinistra 1 posizione
{
return passi+=1;
spazio[riga][colonna]=E;
colonna--;
if (spazio[riga][colonna]==S)
{
colonna+2;
}
spazio[riga][colonna]='V';
}
if(decisione==0 && decisione2==2) // sinistra due posizioni
{
return passi+=1;
spazio[riga][colonna]=E;
colonna-2;
if (spazio[riga][colonna]==S)
{
colonna+2;
}
spazio[riga][colonna]='V';
}
if(decisione==1 && decisione2==1) // destra 1 posizione
{
return passi+=1;
spazio[riga][colonna]=E;
colonna++;
if (spazio[riga][colonna]==S)
{
colonna-2;
}
spazio[riga][colonna]='V';
}
if(decisione==1 && decisione2==2) // destra due posizioni
{
return passi+=1;
spazio[riga][colonna]=E;
colonna+2;
if (spazio[riga][colonna]==S)
{
colonna-2;
}
spazio[riga][colonna]='V';
}
}
else
{
if(decisione==0 && decisione2==1) // sinistra 1 posizione
{
return passi+=1;
spazio[riga][colonna]=E;
colonna--;
if (spazio[riga][colonna]==S)
{
colonna+2;
}
spazio[riga][colonna]='V';
}
if(decisione==0 && decisione2==1) // sinistra due posizioni
{
return passi+=2;
spazio[riga][colonna]=E;
colonna-2;
if (spazio[riga][colonna]==S)
{
colonna+2;
}
spazio[riga][colonna]='V';
}
if(decisione==1 && decisione2==1) // destra 1 posizione
{
return passi+=1;
spazio[riga][colonna]=E;
colonna++;
if (spazio[riga][colonna]==S)
{
colonna-2;
}
spazio[riga][colonna]='V';
}
if(decisione==1 && decisione2==1) // destra due posizioni
{
return passi+=2;
spazio[riga][colonna]=E;
colonna+2;
if (spazio[riga][colonna]==S)
{
colonna-2;
}
spazio[riga][colonna]='V';
}
system("PAUSE");
}
}
int scelta()
{
int flag;
do
{
printf("CIAO UTENTE PREMI 1 PER GIOCARE MANUALMENTE\n\t PREMI 2 PER AVVIARE LA DEMO:\t");
scanf("%d",&flag);
if(flag==1)
{
return 1; // Manuale
}
if(flag == 2)
{
return 2; // Demo
}
}
while(flag!=1 || flag != 2);
}
credits e rules
// Le funzioni che seguono sono delle semplici void per la stampa di informazioni sul gioco e su come si gioca