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);
}