Creare un gioco di beach volley in C

di il
5 risposte

Creare un gioco di beach volley in C

Salve ragazzi mi sono iscritto da poco e mi Presento a tutti

stavo pensando ad un programma per la simulazione del gioco del beach volley fra due giocatori.
Il campo da gioco viene considerato come una mappa regolare di dimensioni 10 x 10 (da visualizzare per ogni punto).
Il campo è formato dal bordo e da una rete. Il giocatore vince se si aggiudica un set e cioè totalizza 20 punti.
Il gioco procede nel seguente modo:
In modo casuale si sceglie il giocatore che batte la palla. La palla viene lanciata nel campo avversario e cade in una cella scelta casualmente.
o Se la palla cade in una cella vuota il punteggio viene dato al giocatore attaccante. L’attaccante batte la palla.
o Se la palla cade in prossimità del giocatore ricevente e cioè nelle celle di distanza 1 intorno al giocatore, la palla viene lanciata nel campo avversaro.
La palla lanciata ha il 10% di cadere sulla rete e il 20% di andare fuori. In questo caso il punto va al giocatore ricevente che provvede a battere la palla. La posizione dei due giocatori viene decisa casualmente ad ogni set.
Chi puo' aiutarmi ???
attendo vostre notizie grazie

ho buttato giù del codice ed è anche molto grezzo ma non riesco a risolvere questi due problemi
il primo Set tutto ok ma dopo il primo va in loop infinito
l'altro problema riguarda la ricezione poiche il giocatore che difende non riesce mai a prendere la palla

il codice e questo
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define  ROW      13 //righe per la matrice
#define  COLUMN   12 //colonne per la mattrice
#define  G1       1  //Giocatore1
#define  G2       2  //Giocatore2
#define  BALL     3  //Palla
/***PROTORIPI***/
void  player_position (int ground[][COLUMN], int *player, int *player_row,int *player_column);
void  server (int *attack,int *defense);
int   ball_probability ();
void  ground_printer (int ground[][COLUMN]);
int   catching_result(int *ball_row,int *ball_column,int *player_row,int *player_column);

int main()
{
   /***DICHIARAZIONE VARIABILI***/
   /*variabili per controllare i set e il punteggio*/
   int   g1_set=0,   g2_set=0;
   int   g1_score=0, g2_score=0;
   /*variabili per controllare le varie posizioni degli elemnti*/
   int   g1_row,     g2_row,     ball_row;
   int   g1_column,  g2_column,  ball_column;
   /*variabile per i vari stati del gioco*/
   int   attack,  defense, hold  ,  shot_result, catching;
   /*Dichiarazione ed inizializzazione campo*/
   int   ground[ROW][COLUMN]={{6,6,6,6,6,6,6,6,6,6,6,6},
                              {6,0,0,0,0,0,0,0,0,0,0,6},
                              {6,0,0,0,0,0,0,0,0,0,0,6},
                              {6,0,0,0,0,0,0,0,0,0,0,6},
                              {6,0,0,0,0,0,0,0,0,0,0,6},
                              {6,0,0,0,0,0,0,0,0,0,0,6},
                              {6,9,9,9,9,9,9,9,9,9,9,6},
                              {6,0,0,0,0,0,0,0,0,0,0,6},
                              {6,0,0,0,0,0,0,0,0,0,0,6},
                              {6,0,0,0,0,0,0,0,0,0,0,6},
                              {6,0,0,0,0,0,0,0,0,0,0,6},
                              {6,0,0,0,0,0,0,0,0,0,0,6},
                              {6,6,6,6,6,6,6,6,6,6,6,6}
                             };
   srand(time(NULL));//creazione del seme casuale
   /***INIZIO  PROGRAMMA***/

   printf("***  THE BEACH VOLLEY GAME  ***\n"
          "***Created By Liardo Alfredo***\n"
          "***   THE MATCH IS STARTED  ***\n");

   while (g1_set<2   &&    g2_set<2)  {

         printf("***INIZIO DEL %d SET***\n\n",g1_set+g2_set+1);
         player_position (ground, G1, &g1_row, &g1_column);
         player_position (ground, G2, &g2_row, &g2_column);
         printf("\n");
         ground_printer(ground);
         printf("\n");
         server(&attack, &defense);
         printf("\n");

         while (g1_score<20   &&    g2_score<20) {
               shot_result = ball_probability();
               if (attack==G1){
                     if(shot_result==1){
                        g2_score++;
                        printf("La palla va sulla rete\n");
                        printf("Player%d has scored 1 point\n", 3- attack);
                        hold=attack;
                        attack=defense;
                        defense=hold;
                     }
                     else if(shot_result==2){
                        g2_score++;
                        printf("La manda fuori\n");
                        printf("Player%d has scored 1 point\n", 3- attack);
                        hold=attack;
                        attack=defense;
                        defense=hold;
                     }
                     else {
                        ball_position(ground,&attack,&ball_row,&ball_column);
                        printf("Giocatore%d lancia la palla in campo in posizione %d %d\n",attack, ball_row, ball_column);
                        catching_result(&ball_row, &ball_column,&g2_row, &g2_column);
                        if(catching==1){
                           printf("il giocatore%d riceve\n", defense);
                           hold=attack;
                           attack=defense;
                           defense=hold;
                        }
                        else {
                           printf("il giocatore%d non riesce a ricevere e il punto va al giocatore%d\n",defense,attack);
                           g1_score++;
                        }
                     }
                  }
               else {
                  if(shot_result==1){
                        g1_score++;
                        printf("la palla va sulla rete\n");
                        printf("Player%d has scored 1 point\n", 3- attack);
                        hold=attack;
                        attack=defense;
                        defense=hold;
                     }
                     else if(shot_result==2){
                        g1_score++;
                        printf("la butta fuori\n");
                        printf("Player%d has scored 1 point\n", 3- attack);
                        hold=attack;
                        attack=defense;
                        defense=hold;
                     }
                     else {
                        ball_position(ground,&attack,&ball_row,&ball_column);
                        printf("Giocatore%d lancia la palla in campo in posizione %d %d\n",attack, ball_row, ball_column);
                        catching_result(&ball_row,&ball_column,&g1_row, &g1_column);
                        if(catching==1){
                           printf("il giocatore%d riceve\n", defense);
                           hold=attack;
                           attack=defense;
                           defense=hold;
                        }
                        else {
                           printf("il giocatore%d non riesce a ricevere e il punto va al giocatore%d\n",defense,attack);
                           g2_score++;
                        }
                     }
               }
               score_printer(&g1_score,&g2_score);

               if(g1_score==20){
                  g1_set++;
                  printf("Il giocatore1 si aggiudica il %d SET\n", g1_set+g2_set);
                  system("pause");
                  system("cls");
               }
               else if(g2_score==20){
                  g2_set++;
                  printf("Il giocatore2 si aggiudica il %d SET\n", g1_set+g2_set);
                  system("pause");
                  system("cls");
               }

               printf("***BATTE GIOCATORE%d ***\n"
                      "***RICEVE GIOCATORE%d***\n\n",attack,defense);
         }
   }
}

   /***FUNZIONI***/
void  player_position (int ground[][COLUMN], int *player,int *player_row,int *player_column)//posiziona i giocatori nella matrice//
{
   if (player == 1) {
      *player_row   = 1+rand()%5;
      *player_column= 1+rand()%10;
      ground[*player_row][*player_column]= G1;
   }
   else {
      *player_row   = 7+rand()%5;
      *player_column= 1+rand()%10;
      ground[*player_row][*player_column]= G2;
   }
   printf("The Player%d is located in [%d][%d]\n", player, *player_row, *player_column);
}
void  server (int *attack,int *defense)//decide chi batte//
{
   *attack = 1+rand()%2;
   *defense= 3- *attack;
   printf("***BATTE GIOCATORE%d ***\n"
          "***RICEVE GIOCATORE%d***\n\n", *attack, *defense);
}
int   ball_probability ()//calcola la probabilità della palla di andare in rete, fuori o in campo//
{
   int percent = rand()%99;

   if(percent >= 0   &&    percent<=9)//percentuale di andare nella rete
      return 1;
   else if(percent>=10 &&  percent<=30)//percentuale di andare fuori
      return 2;
   else
      return 3;
}
void ball_position (int ground[][COLUMN],int *attack, int *ball_row, int *ball_column)//genera la posizione in cui cade la palla//
{
   if(*attack==G1){
      *ball_row    = 7+rand()%5;
      *ball_column = 1+rand()%10;
      ground[*ball_row][*ball_column]=3;

   }
   else {
      *ball_row    = 1+rand()%5;
      *ball_column = 1+rand()%10;
      ground[*ball_row][*ball_column]=3;

   }
}
void ground_printer (int ground[][COLUMN])
{
   int i,j;

   for (i=0;i<ROW;i++){
      for (j=0;j<COLUMN;j++){
           if (j%COLUMN==0){
               printf("\n");
           }
           if(ground[i][j]==6){
              printf("*");
           }
           else if(ground[i][j]==0){
               printf(" ");
           }
           else if(ground[i][j]==9){
               printf("-");
           }
           else if(ground[i][j]==1){
               printf("1");
           }
           else if(ground[i][j]==2){
               printf("2");
           }
           else
               printf("%c",248);
      }
   }
   printf("\n");
}

int catching_result (int *ball_row,int *ball_column,int *player_row, int *player_column)
{
    int dist_row,dist_column;

    dist_row=abs(*player_row-*ball_row);
    dist_column=abs(*player_column-*ball_column); // calcolo la distanza tra la palla e il giocatore

    if ( dist_row==0 || dist_row==1 && dist_column==0 || dist_column==1 )
        return 1;
    else if (dist_row>1 || dist_column>1)
        return 2;
}
void score_printer (int *player1_score,int *player2_score)
{
   printf("****Player1 score: %d****\n"
          "****Player2 score: %d****\n\n",*player1_score,*player2_score);
}

5 Risposte

Devi accedere o registrarti per scrivere nel forum
5 risposte