Dopo svariati tentativi con la function battere
sono riuscito ad impostare tramite il rand() una casistica di 2/10 che la palla esce fuori
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "battere.h"
void battere (int num, int* nx, int* ny)
{
if (num == 1)
{
*nx = rand() % 6;
*ny = 3+rand() % 7; /*allargo il range di 2, in modo che la palla va oltre il campo ed esce fuori*/
}
else if (num == 2)
{
*nx = rand() % 6;
*ny = rand() % 7; /*allargo il range di 2, in modo che la palla va oltre il campo ed esce fuori*/
}
}
mentre nel main ho messo un controllo if se nel campo[nx][ny]!= 'x''o''.''I'
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "battere.h"
int main (void)
{
int numero_squadra, vittoria = 0; /*dichiaro e posiziono le due squadra*/
int punteggio[] = {0, 0}; /*inizializzo il punteggio*/
int j, i, nx, ny, ribattuta=0;
char nome_squadra[2][20], stop;
char giocator1 = 'x'; /*giocatori maglia x*/
char giocator2 = 'o'; /*giocatori maglia o*/
char campo [][7]= {{'.','.','.','.','.','.','.'}, /*i giocatori1 'x' si trovano sul lato sinistro del campo*/
{'.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.'}, /*i giocatori2 'o' si trovano sul lato destro del campo*/
{'.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.'}};
printf("Inserisci il nome della squadra1 'x': ");
scanf("%s", nome_squadra[0]);
printf("Inserisci il nome della squadra2 'o': ");
scanf("%s", nome_squadra[1]);
srand (time(NULL));
char rete = 'I'; /*dichiaro la rete e la posiziono in mezzo al campo*/
for (i = 0; i < 6; i++)
campo
[3]=rete;
i=1;
while (i <= 4)
{ /*posiziono 4 giocatori casulamente sul campo*/
nx = rand() % 6;
ny = rand() % 3; /*lì sposto sulle prime 3 celle*/
if(campo[nx][ny] != 'x') /*controllo che i giocatori non siano ripetuti sulla stessa cella*/
{
i++;
campo[nx][ny]=giocator1;
}
}
j=1;
while(j <= 4) /*posiziono 4 giocatori casulamente sul campo*/
{
nx = rand() % 6;
ny = 4+rand() % 3; /*lì sposto sulle ultime 3 celle*/
if(campo[nx][ny] != 'o') /*controllo che i giocatori non siano ripetuti sulla stessa cella*/
{
j++;
campo[nx][ny]=giocator2;
}
}
printf ("\n\nCampo:\n"); /*visualizzo il campo e le formazioni rand delle squadre posizionate su di esso*/
for (i = 0; i < 6; i++)
{
for (j = 0; j < 7; j++)
printf ("%c ", campo[j]);
printf ("\n");
}
numero_squadra = 1 + rand() % 2; /*scelgo casualmente la squadra 1 o la 2*/
while (punteggio[0] < 20 && punteggio[1] < 20) /*per far terminare la partita*/
{
vittoria = 0;
while (!vittoria) /*per l'assegnazione di un solo punto*/
{
if(ribattuta==0)
printf("\n\nEd ecco che si appresta alla battuta la squadra numero %d, forza %s!!!\n\n\n", numero_squadra, nome_squadra[numero_squadra-1]);
else
printf("Ora tocca a %s cercare di fare punto..\n\n", nome_squadra[2-numero_squadra]);
battere (numero_squadra, &nx, &ny);
if (campo[nx][ny] == 'x' || campo[nx][ny] == 'o') /*controllo se ricevono la palla i giocatori della squadra 1 o 2*/
{
printf("\n\nGrande ribattuta di %s\tla palla attraversa l'altra parte del campo!!\n", nome_squadra[2-numero_squadra]);
numero_squadra = ((numero_squadra == 1) ? 1 : 2); /*in modo che se avevo la squadra 1 diventa la squadra 2 e viceversa*/
ribattuta=1;
}
if(campo [nx][ny]!='x' && campo[nx][ny]!='o' && campo[nx][ny]!='.' && campo[nx][ny]!='I') /*se la palla esce fuori il punto va all'altra squadra */
{
printf("\n Oh no la palla esce fuori!!\n\nIl punto va a %s", nome_squadra[2-numero_squadra]);
if (numero_squadra == 1)
{
punteggio[1]++;
numero_squadra=2;
vittoria=1;
ribattuta=0;
}
else if(numero_squadra==2)
{
punteggio[0]++;
numero_squadra=1;
vittoria=1;
ribattuta=0;
}
}
else if (campo [nx][ny] == 'I') /* se la palla finisce sulla rete il punto va all'altra squadra */
{
printf("\n Oh no la palla prende la rete!!\n\nIl punto va a %s", nome_squadra[2-numero_squadra]);
if (numero_squadra == 1)
{
punteggio[1]++;
numero_squadra=2;
vittoria=1;
ribattuta=0;
}
else if(numero_squadra==2)
{
punteggio[0]++;
numero_squadra=1;
vittoria=1;
ribattuta=0;
}
}
else
{
vittoria = 1; /*assegna il punto*/
punteggio[numero_squadra-1]++; /*alla squadra avversaria*/
printf("Grande punto per %s!!\n\n", nome_squadra[numero_squadra-1]);
if(ribattuta==1)
printf("Con una schiacciata!!\n"); /*controllo che dopo che hanno battuto, possono anche fare punto con una schiacciata*/
}
}
printf ("\n %s: %d\t\t%s: %d\n\n", nome_squadra[0], punteggio[0], nome_squadra[1], punteggio[1]); /*contatore punti*/
system("PAUSE");
system("CLS");
}
printf ("\n\nHa vinto la partita la squadra %d!\n", ((punteggio[0] == 20) ? 1 : 2)); /*stampa il vincitore*/
system("PAUSE");
printf ("\n\n\n");
system("PAUSE");
return 0;
}
Come potrei rendere la simulazione della partita ancora più realistica?