Giuro che sto uscendo pazzo.. Allora ho fatto questo programma che in pratica simula gli autoscontri.. Le hanno delle percentuali di spostamento. Il programma termina quando due auto si scontrano:
Questo funziona
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main ()
{
char pista[][7]={{' ',' ',' ','B',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' '},
{'A',' ',' ',' ',' ',' ','C'},
{' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ','D',' ',' ',' '}};
int i,j,x1=3,x2=0,x3=3,x4=6,y1=0,y2=3,y3=6,y4=3,A=1,B=100,nc,z=0;
srand((unsigned int)time(0));
for(i=0;i<7;i++) //visualizzo la pista con le auto
{
for(j=0;j<7;j++)
{
printf(" %c",pista[i][j]);
}
printf("\n");
}
printf("\n------------------------------\n\nPremi Invio per iniziare a giocare\n");
getchar();
do
{
//giocatore1 (A)
nc=A+rand()%(B+1-A); //genero un numero casuale per vedere in quale posizione si deve spostare
if(nc<=20 && y1!=6) //va a destra
{
pista[x1][y1]=' ';
y1++;
if (pista[x1][y1]=='B' || pista[x1][y1]=='C' || pista[x1][y1]=='D')
z++;
else
pista[x1][y1]='A';
}
if(nc>=21 && nc<=40 && y1!=0) //per andare a sinistra
{
pista[x1][y1]=' '; //svuoto la posizione precedente
y1--;
if (pista[x1][y1]=='B' || pista[x1][y1]=='C' || pista[x1][y1]=='D') //se la prossima posizione è gia occupata...
z++; //...incremento z di 1
else
pista[x1][y1]='A'; //altrimenti vado a sinistra normalmente
}
if(nc>=41 && nc<=70 && x1!=0) //per andare sopra
{
pista[x1][y1]=' ';
x1--;
if (pista[x1][y1]=='B' || pista[x1][y1]=='C' || pista[x1][y1]=='D')
z++;
else
pista[x1][y1]='A';
}
if(nc>=71 && nc<=100 && x1!=6) //per andare sotto
{
pista[x1][y1]=' ';
x1++;
if (pista[x1][y1]=='B' || pista[x1][y1]=='C' || pista[x1][y1]=='D')
z++;
else
pista[x1][y1]='A';
}
//giocatore2 (B)
nc=A+rand()%(B+1-A);
if(nc<=40 && y2!=6) //per andare a destra
{
pista[x2][y2]=' ';
y2++;
if (pista[x2][y2]=='A' || pista[x2][y2]=='C' || pista[x2][y2]=='D')
z++;
else
pista[x2][y2]='B';
}
if(nc>=41 && nc<=50 && y2!=0) //per andare a sinistra
{
pista[x2][y2]=' ';
y2--;
if (pista[x2][y2]=='A' || pista[x2][y2]=='C' || pista[x2][y2]=='D')
z++;
else
pista[x2][y2]='B';
}
if(nc>=51 && nc<=65 && x2!=0) //per andare sopra
{
pista[x2][y2]=' ';
x2--;
if (pista[x2][y2]=='A' || pista[x2][y2]=='C' || pista[x2][y2]=='D')
z++;
else
pista[x2][y2]='B';
}
if(nc>=66 && nc<=100 && x2!=6) //per andare sotto
{
pista[x2][y2]=' ';
x2++;
if (pista[x2][y2]=='A' || pista[x2][y2]=='C' || pista[x2][y2]=='D')
z++;
else
pista[x2][y2]='B';
}
//giocatore3 (C)
nc=A+rand()%(B+1-A);
if(nc<=30 && y3!=6) //per andare a destra
{
pista[x3][y3]=' ';
y3++;
if (pista[x3][y3]=='A' || pista[x3][y3]=='B' || pista[x3][y3]=='D')
z++;
else
pista[x3][y3]='C';
}
if(nc>=31 && nc<=50 && y3!=0) //per andare a sinistra
{
pista[x3][y3]=' ';
y3--;
if (pista[x3][y3]=='A' || pista[x3][y3]=='B' || pista[x3][y3]=='D')
z++;
else
pista[x3][y3]='C';
}
if(nc>=51 && nc<=55 && x3!=0) //per andare sopra
{
pista[x3][y3]=' ';
x3--;
if (pista[x3][y3]=='A' || pista[x3][y3]=='B' || pista[x3][y3]=='D')
z++;
else
pista[x3][y3]='C';
}
if(nc>=56 && nc<=100 && x3!=6) //per andare sotto
{
pista[x3][y3]=' ';
x3++;
if (pista[x3][y3]=='A' || pista[x3][y3]=='B' || pista[x3][y3]=='D')
z++;
else
pista[x3][y3]='C';
}
//giocatore4 (D)
nc=A+rand()%(B+1-A);
if(nc<=20 && y4!=6) //per andare a destra
{
pista[x4][y4]=' ';
y4++;
if (pista[x4][y4]=='A' || pista[x4][y4]=='B' || pista[x4][y4]=='C')
z++;
else
pista[x4][y4]='D';
}
if(nc>=21 && nc<=50 && y4!=0) //per andare a sinistra
{
pista[x4][y4]=' ';
y4--;
if (pista[x4][y4]=='A' || pista[x4][y4]=='B' || pista[x4][y4]=='C')
z++;
else
pista[x4][y4]='D';
}
if(nc>=51 && nc<=75 && x4!=0) //per andare sopra
{
pista[x4][y4]=' ';
x4--;
if (pista[x4][y4]=='A' || pista[x4][y4]=='B' || pista[x4][y4]=='C')
z++;
else
pista[x4][y4]='D';
}
if(nc>=76 && nc<=100 && x4!=6) //per andare sotto
{
pista[x4][y4]=' ';
x4++;
if (pista[x4][y4]=='A' || pista[x4][y4]=='B' || pista[x4][y4]=='C')
z++;
else
pista[x4][y4]='D';
}
printf("\n-----------------------------\n\n");
for(i=0;i<7;i++)
{
for(j=0;j<7;j++)
{
printf(" %c",pista[i][j]);
}
printf("\n");
}
getchar();
if (z>0) //se z è maggiore di uno vuol dire che c'è stato uno o più scontri quindi il programma termina
{ printf("SCONTRO! FINE PARTITA\n\n"); }
} while (z==0);
printf("Alla prossima!!\n\n");
getch();
}
Quando cerco di creare delle funzioni per gli spostamenti non funziona piu bene.. E pure i procedimenti sono gli stessi..
Ecco il codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void destra (char pista[][7],int x1,int y1,int z1);
void sinistra (char pista[][7],int x2,int y2,int z2);
void sopra (char pista[][7],int x3,int y3,int z3);
void sotto (char pista[][7],int x4,int y4,int z4);
void main ()
{
char pista[][7]={{' ',' ',' ','X',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' '},
{'X',' ',' ',' ',' ',' ','X'},
{' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ','X',' ',' ',' '}};
int i,j,x1=3,x2=0,x3=3,x4=6,y1=0,y2=3,y3=6,y4=3,A=1,B=100,nc=0,z=0;
srand((unsigned int)time(0));
for(i=0;i<7;i++) //visualizzo la pista con le auto
{
for(j=0;j<7;j++)
{
printf(" %c",pista[i][j]);
}
printf("\n");
}
printf("\n------------------------------\n\nPremi Invio per iniziare a giocare\n");
getchar();
do
{
//giocatore1 (A)
nc=A+rand()%(B+1-A); //genero un numero casuale per vedere in quale posizione si deve spostare
if(nc<=20 && y1!=6) //va a destra
{
destra (pista,x1,y1,z);
}
if(nc>=21 && nc<=40 && y1!=0) //per andare a sinistra
{
sinistra (pista,x1,y1,z);
}
if(nc>=41 && nc<=70 && x1!=0) //per andare sopra
{
sopra (pista,x1,y1,z);
}
if(nc>=71 && nc<=100 && x1!=6) //per andare sotto
{
sotto (pista,x1,y1,z);
}
//giocatore2 (B)
nc=A+rand()%(B+1-A);
if(nc<=40 && y2!=6) //per andare a destra
{
destra (pista,x2,y2,z);
}
if(nc>=41 && nc<=50 && y2!=0) //per andare a sinistra
{
sinistra (pista,x2,y2,z);
}
if(nc>=51 && nc<=65 && x2!=0) //per andare sopra
{
sopra (pista,x2,y2,z);
}
if(nc>=66 && nc<=100 && x2!=6) //per andare sotto
{
sotto (pista,x2,y2,z);
}
//giocatore3 (C)
nc=A+rand()%(B+1-A);
if(nc<=30 && y3!=6) //per andare a destra
{
destra (pista,x3,y3,z);
}
if(nc>=31 && nc<=50 && y3!=0) //per andare a sinistra
{
sinistra (pista,x3,y3,z);
}
if(nc>=51 && nc<=55 && x3!=0) //per andare sopra
{
sopra (pista,x3,y3,z);
}
if(nc>=56 && nc<=100 && x3!=6) //per andare sotto
{
sotto (pista,x3,y3,z);
}
//giocatore4 (D)
nc=A+rand()%(B+1-A);
if(nc<=20 && y4!=6) //per andare a destra
{
destra (pista,x4,y4,z);
}
if(nc>=21 && nc<=50 && y4!=0) //per andare a sinistra
{
sinistra (pista,x4,y4,z);
}
if(nc>=51 && nc<=75 && x4!=0) //per andare sopra
{
sopra (pista,x4,y4,z);
}
if(nc>=76 && nc<=100 && x4!=6) //per andare sotto
{
sotto (pista,x4,y4,z);
}
printf("\n-----------------------------\n\n");
for(i=0;i<7;i++)
{
for(j=0;j<7;j++)
{
printf(" %c",pista[i][j]);
}
printf("\n");
}
getchar();
if (z>0) //se z è maggiore di uno vuol dire che c'è stato uno o più scontri quindi il programma termina
{ printf("SCONTRO! FINE PARTITA\n\n"); }
} while (z==0);
printf("Alla prossima!!\n\n");
getch();
}
void destra (char pista[][7],int x1,int y1,int z1)
{
pista[x1][y1]=' ';
y1++;
if (pista[x1][y1]=='X' || pista[x1][y1]=='X' || pista[x1][y1]=='X')
z1++;
else
pista[x1][y1]='X';
}
void sinistra (char pista[][7],int x2,int y2,int z2)
{
pista[x2][y2]=' ';
y2--;
if (pista[x2][y2]=='X' || pista[x2][y2]=='X' || pista[x2][y2]=='X')
z2++;
else
pista[x2][y2]='X';
}
void sopra (char pista[][7],int x3,int y3,int z3)
{
pista[x3][y3]=' ';
x3--;
if (pista[x3][y3]=='X' || pista[x3][y3]=='X' || pista[x3][y3]=='X')
z3++;
else
pista[x3][y3]='X';
}
void sotto (char pista[][7],int x4,int y4,int z4)
{
pista[x4][y4]=' ';
x4++;
if (pista[x4][y4]=='X' || pista[x4][y4]=='X' || pista[x4][y4]=='X')
z4++;
else
pista[x4][y4]='X';
}
Sarà che ho 39 di febbre ma io non riesco a capire.. io vedo tutto uguale e pure il secondo non funziona..
Grazie per eventuali risposte.