Ciao Ragazzi sto cercando di implementare un gioco in C , ora vorrei poterlo migliorare, in quanto come adesso è impostato solo se inserisco il tasto desto o sinistre e poi inserisco invio il gioco si muove, e vorrei invece che andasse automaticamente, il progetto appunto, vi inserisco nel codice la traccia del vero progetto...
Gioco auto
Si vuole sviluppare un programma per la simulazione di un gioco che prevede
un’auto su un percorso che deve evitare degli ostacoli.
Si suppone di aver un percorso come in figura dove sul fondo è presente un’auto
che può andare a destra o sinistra.
L’auto deve evitare automaticamente gli ostacoli che incontra durante il percorso. Gli
ostacoli vengono creati uno alla volta ad ogni passo in una posizione casuale sulla prima
riga. L’oggetto 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 ,cioè di due righe prima della posizione della macchina.
La partita finisce o quando l’auto si scontra con un oggetto o quando sono passati 100
passi. Effettuare almeno 5 test, variando le condizioni del problema.
questo è Main
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_PASSI 100
#include "Gioco.h"
int main()
{
int riga, colonna,vite=1,na_1,na_2, passi=0,logical=1,i,j;
register char direzione;
char spazio[40][40]={{'*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'}};
system("cls");
credits();
system("pause");
system("cls");
rules();
printf("\n");
system("pause");
system("cls");
Start:
srand(time(NULL));
riga=37;
do
{
colonna=2+rand()%37;
}
while (spazio[riga][colonna]=='B');
spazio[riga][colonna]='V';
na_1=1+rand()%8;
na_2=1+rand()%28;
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()%28;
spazio[1][j]='O';
creazione_campo(spazio,vite);
fflush(stdin);
direzione=getchar();
//Switch-case che determina il movimento della navicella nel campo dei meteoriti. All'interno di ogni case ci sono dei controlli
switch (direzione)
{
case 'a':
case 'A':
passi+=1;
spazio[riga][colonna]=' ';
colonna--;
if (spazio[riga][colonna]=='*')
{
printf("Non puoi spostarti in questa direzione!\n");
system("pause");
colonna++;
}
if (spazio[riga][colonna]=='O')
{
printf("Hai colpito un ostacolo! Hai perso!\n");
vite--;
system("pause");
}
spazio[riga][colonna]='V';
break;
case 'd':
case 'D':
passi+=1;
spazio[riga][colonna]=' ';
colonna++;
if (spazio[riga][colonna]=='*')
{
printf("Non puoi spostarti in questa direzione!\n");
colonna--;
system("pause");
}
if (spazio[riga][colonna]=='O')
{
printf("Hai colpito un ostacolo! Hai perso!\n");
vite--;
system("pause");
}
spazio[riga][colonna]='V';
break;
}
//Questa porzione di codice ha il compito di generare degli ostacoli che si sposteranno lungo il percorso ad ogni iterazione
for(i=38; i>=0; i--)
{
for(j=28; j>=0; j--)
{
if(spazio[i][j]=='O')
{
if(i!=38 && spazio[i+1][j]!='X')
{
spazio[i][j]=' ';
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]=' ';
}
}
}
}
}
system("cls");
}
codice delle funzioni
#include <stdio.h>
#include "Gioco.h"
#define R 40
#define C 30
//Semplice function per la stampa di una matrice che rappresenta "lo spazio" dove l'astronave si muove
void creazione_campo(char spazio[40][40], int vite)
{
register int i,j;
printf("\n");
for (i=0; i<R; i++)
{
for (j=0; j<C; j++)
{
if (spazio[i][j]=='*' || spazio[i][j]=='O' || spazio[i][j]=='X' || spazio[i][j]=='V')
{
printf("%c ",spazio[i][j]);
}
else
{
printf(" ");
}
}
printf("\n");
}
}
// Le funzioni che seguono sono delle semplici void per la stampa di informazioni sul gioco e su come si gioca
void credits()
{
printf(" -------------------------------\n");
printf("| BENVENUTO NEL GIOCO CAR SPEED |\n");
printf(" -------------------------------\n\n");
}
void rules()
{
printf("*******************\n");
printf("* REGOLE DI GIOCO *\n");
printf("*******************\n\n");
printf("* Il gioco consiste nel far muovere l'auto (indentificata da: V )\n");
printf("* e farla arrivare alla fine del percorso (ovvero dopo 100 passi)\n");
printf("* evitanto gli ostacoli presenti! Se invece l'auto colpisce un ostacolo\n");
printf("* finisce la partita!\n\n");
printf(" *************\n");
printf(" * MOVIMENTI *\n");
printf(" *************\n\n");
printf("E' possibile muovere l'auto solo nelle direzioni destra -> e sinistra <-: \n\n");
printf("A per far muovere l'auto a sinistra\n\n");
printf("D per far muovere l'auto a destra!\n\n");
}
libreria gioco.h
void creazione_campo(char spazio[40][40], int vite);
void credits();
void rules();