[c] casistica partita pallavolo

di il
4 risposte

[c] casistica partita pallavolo

#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};
    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]= {{'.','.','.','.','.','.','.'},                                      
                       {'.','.','.','.','.','.','.'},
                       {'.','.','.','.','.','.','.'},
                       {'.','.','.','.','.','.','.'},
                       {'.','.','.','.','.','.','.'},
                       {'.','.','.','.','.','.','.'}};
    printf("Inserisci il nome della prima squadra: ");
    scanf("%s", nome_squadra[0]);
    printf("Inserisci il nome della seconda squadra: ");
    scanf("%s", nome_squadra[1]);
    srand (time(NULL));
    char rete = 'I';
    for (i = 0; i < 6; i++)
        campo[i][3]=rete;
 
    i=1;
    while (i <= 4)
    {
        nx = rand() % 6;
        ny = 4 + rand() % 3;             /*sposto sulle ultime 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)
    {
        nx = rand() % 6;
        ny = rand() % 3;                 /*sposto sulle prime 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");
    for (i = 0; i < 6; i++)
    {
    	for (j = 0; j < 7; j++)
    		printf ("%c  ", campo[i][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\n", nome_squadra[numero_squadra-1]);
     			numero_squadra = ((numero_squadra == 1) ? 1 : 2); /*in modo che se avevo la squadra 1 diventa la squadra 2 e viceversa*/
                ribattuta=1;
            }
           
     	else if (campo [nx][ny] == 'I') /* se la palla finisce sulla rete il punto va all'altra squadra */
     		{
                printf("\n Oh no la palla prendere 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 
     			{
                        punteggio[0]++;
                        numero_squadra=1;
                        vittoria=1;
                        ribattuta=0;
                }
     		}
     		else       
     		{       
     			vittoria = 1;
     			punteggio[numero_squadra - 1]++;
     			printf("Grande punto per %s\n\n", nome_squadra[numero_squadra-1]);
     		}    
     	} 
     	
     	printf ("\n %s: %d\t\t%s: %d\n\n", nome_squadra[0], punteggio[0], nome_squadra[1], punteggio[1]);
     	system("PAUSE");
        	system("CLS");
    } 
    
    printf ("\n\nHa vinto la partita la squadra %d!\n", ((punteggio[0] == 20) ? 1 : 2));       
system("PAUSE");
    
    printf ("\n\n\n");
    system("PAUSE");
    return 0;    
}	
function battere
#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 = rand() % 4;
	}
	
	else if (num == 2)
	{
		*nx = rand() % 6;
		*ny = 3 + rand() % 4;
	}
}
Devo simulare una partita di pallavolo metto in campo le squadre con la varia procedura del gioco come procede :
In modo casuale si sceglie la squadra che batte la palla.
· La palla viene lanciata nel campo avversario e cade in una cella scelta
casualmente
. Se la palla cade in una cella vuota il punteggio viene dato alla
squadra attaccante. La squadra ricevente provvede a battere la palla.
. Se la palla cade in una cella con un giocatore la palla viene lanciata
nel campo avversario
· La palla lanciata ha il 40% di cadere sulla rete e il 20% di andare fuori. In
questo caso il punto va alla squadra avversaria a quella che batte.
Vince la squadra che per prima arriva a 20.
siccome nel codice che ho sviluppato non ho una casistica del 40% che cade sulla rete e l'altro 40% di far giocare entrambe le squadre tra battute e ribattute e non sò come fare per l'altro 20% per far andare la palla fuori...cioè fuori array??

4 Risposte

  • Re: [c] casistica partita pallavolo

    Il campo è 7x7 da quel che ho capito. siccome devi aggiungere un 20% di battuta fuori devi allargare il rand nel range da 0 a 9 così la palla fuori è un 2/10 con indici rispettivamente 0 e 8. Gli indici da 1 a 7 saranno del campo dove poi puoi applicare la regola che stai usando per vedere se la palla tocca la rete o meno. Fai un disegnino su carta e lo capisci meglio.
  • Re: [c] casistica partita pallavolo

    skynet ha scritto:


    il campo è 7x7 da quel che ho capito. siccome devi aggiungere un 20% di battuta fuori devi allargare il rand nel range da 0 a 9 così la palla fuori è un 2/10 con indici rispettivamente 0 e 8. Gli indici da 1 a 7 saranno del campo dove poi puoi applicare la regola che stai usando per vedere se la palla tocca la rete o meno. Fai un disegnino su carta e lo capisci meglio.
    il campo è un 6x7
    io avevo intensione di mettere nel mio codice proprio una casistica del genere
    xò non sò come fare, perchè così penso che sia sbagliato
    int fortuna;
    fortuna=rand()%11;
    switch(fortuna)
    {case 1:
    case 2:
    case 3:
    case 4:
     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\n", nome_squadra[numero_squadra-1]);
         			numero_squadra = ((numero_squadra == 1) ? 1 : 2); /*in modo che se avevo la squadra 1 diventa la squadra 2 e viceversa*/
                    ribattuta=1;
                } break;
    case 5:
    case 6:
    case 7:
    case 8:
     else if (campo [nx][ny] == 'I') /* se la palla finisce sulla rete il punto va all'altra squadra */
         		{
                    printf("\n Oh no la palla prendere la rete!!\n\nIl punto va a %s", nome_squadra[2-numero_squadra]);
                                  }break;
    case 9:
    case 10:
    printf("la palla è uscita fuori campo\n");
    
    }
    
  • Re: [c] casistica partita pallavolo

    La condizione per far uscire la palla fuori è questa,è la stessa condizione dell'if se la palla prende la rete ma come l'ha metto nel codice ??:( solo questo vorrei sapere
     if (campo [nx] [ny]>7 ) /* se la palla finisce 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 
                  {
                            punteggio[0]++;
                            numero_squadra=1;
                            vittoria=1;
                            ribattuta=0;
                    }
    premetto che ho cambiato il range nella function battere
    *nx=rand()%9; l'ho aumentato a 9
  • Re: [c] casistica partita pallavolo

    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?
Devi accedere o registrarti per scrivere nel forum
4 risposte