Buona giornata,
avrei bisogno di chiedervi delle informazioni riguardo un esercizio in C che mi assilla la mente da qualche giorno
La traccia dell'esercizio presa dal mio manuale che vorrei risolvere e' la seguente:
Si vuole sviluppare un programma per la simulazione di un gioco che prevede
un’auto su un percorso che deve evitare degli oggetti.
Supponiamo di aver un percorso dove sul fondo è presente un’auto
che può andare a destra o sinistra a scelta dell’utente.
L’auto deve evitare gli oggetti (3) che incontra durante il percorso.
Gli oggetti vengono creati uno ad ogni passo in una posizione casuale sulla prima riga.
L’oggetto si muove di una singola posizione casuale in base alla posizione dell’auto.
La partita finisce o quando l’auto si scontra con un oggetto o quando sono passati 100 passi.
Il mio problema riguarda la generazione e il movimento degli ostacoli, in quanto anche generandone uno solo e in una posizione fissa, si genera una "O" anche nella posizione dell'ultima riga e prima colonna, non so per quale motivo.
Inoltre vorrei sapere come muovermi per generare questi ostacoli casualmente sulla prima riga e farli muovere tutti insieme verso l'auto.
Allego sotto cosa intendo con il problema dellla "O" in basso.
Questa e' la mia attuale realizzazione per ora:
Main.c:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_PASSI 100
#define RAND_MAX 30
int main()
{
int riga, colonna, vite=1, passi=0, stato=1,i,j;
register char direzione;
char percorso[30][30]={{'*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'}};
//Introduzione
info();
system("PAUSE");
system("cls");
regole();
system("PAUSE");
system("cls");
comandi();
system("PAUSE");
system("cls");
//Inizializzo il generatore di numeri pseudocasuali
srand(time(NULL));
//Genero l'auto in una colonna casuale sulla riga 29.
riga=29;
colonna=1+rand()%29;
percorso[riga][colonna]='V';
crea_campo(percorso);
//Movimento dell'auto sul percorso
do
{
fflush(stdin);
genera_ostacoli(percorso);
direzione=getchar();
switch(direzione)
{
case 'a':
case 'A':
passi+=1;
percorso[riga][colonna]=' ';
colonna--;
if (percorso[riga][colonna]=='*')
{
printf("Non puoi andare qui!\n");
colonna++;
system("PAUSE");
}
percorso[riga][colonna]='V';
break;
case 'd':
case 'D':
passi+=1;
percorso[riga][colonna]=' ';
colonna++;
if (percorso[riga][colonna]=='*')
{
printf("Non puoi andare qui!\n");
colonna--;
system("PAUSE");
}
percorso[riga][colonna]='V';
break;
}
system("cls");
crea_campo(percorso);
}
while (vite!=0);
Functions.c:
#include <stdio.h>
#define RIG 30
#define COL 30
//Stampa del campo di gioco
void crea_campo(char percorso[30][30])
{
register int i,j;
for (i=0; i < RIG; i++)
{
for (j=0; j < COL; j++)
{
printf("%c ", percorso[i][j]);
fflush(stdout);
}
printf("\n");
fflush(stdout);
}
}
//Generatore ostacoli [ATTUALMENTE NON FUNZIONANTE, RISULTA SBAGLIATO ANCHE DANDO UNA POSIZIONE FISSA ALL'OSTACOLO]
void genera_ostacoli(char percorso[30][30])
{
register int rigaost,colonnaost, conta=0;
rigaost=3;
colonnaost=10;
percorso[rigaost][colonnaost]='O';
printf("%c ", percorso[rigaost][colonnaost]);
}
//Informazioni sul gioco
void info()
{
printf("---------------\n");
printf("| GIOCO 'AUTO' |\n");
printf("---------------\n");
}
void regole()
{
printf("----------------\n");
printf("| REGOLE |\n");
printf("----------------\n\n");
printf("* Il gioco consiste nel far muovere la vettura ('A') \n");
printf("* per 100 passi, evitando gli ostacoli presenti a schermo!\n");
printf("* Se la vettura colpische un ostacolo, la partita termina. \n");
}
void comandi()
{
printf("---------------\n");
printf("| COMANDI |\n");
printf("---------------\n");
printf("E' possibile muovere la vettura a destra e sinistra, rispettivamente\n");
printf("con i tasti D e A.\n");
}
Grazie per l'attenzione!
Allegati: