|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 22
|
Algoritmo in C Pallavolo
Si vuole sviluppare un programma per la simulazione del gioco della pallavolo. Si suppone di avere due squadre di 4 giocatori ognuna. Il campo da gioco viene considerato come una mappa regolare di dimensioni 6 x 6. Ogni giocatore, per ogni squadra, possiede una regione (cella) identificata casualmente.
Il gioco procede in questo modo: · 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. L’algoritmo usa la function rand() in stdlib per generare numeri casuali: si ricorda che, per esempio, se numero_casuale è un int, la chiamata numero_casuale=rand()%11; genera un numero casuale intero (distribuzione uniforme) nell’insieme (0,1,2,3,4,5,6,7,8,9,10). Usare sempre la srand() per rendere automatica la scelta iniziale del seed della sequenza di numeri casuali. io ho cominciato a dichiarare una matrice 6x6 #include <stdio.h> #include <stdlib.h> #include <time.h> void main() {int i,j,nx,ny; char squadra1; char squadra2; squadra1='x'; *\sarebbero i giocatori cn le maglie x squadra2='o'; *\sarebbero i giocatori cn le maglie o char campo [][6]= {{' ',' ',' ',' ',' ',' ',}, {' ',' ',' ',' ',' ',' ',}, {' ',' ',' ',' ',' ',' ',}, {' ',' ',' ',' ',' ',' ',}, {' ',' ',' ',' ',' ',' ',}, {' ',' ',' ',' ',' ',' ',}}; è mi sn fermato qui, dp x generare una posizione dei giocatori e posizionarli sul campo potrei fare: for(i=1;i<=4; i++) {nx=rand()%6; ny=rand()%6; campo[nx][ny]= squadra1; } for(i=1;i<=4; i++) {nx=rand()%6; ny=rand()%6; campo[nx][ny]= squadra2; } se avete altre idee in merito...sarei lieto di visionarle insieme a voi... |
|
|
|
|
|
#2 | |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 22
|
Quote:
|
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
Sul fatto che ogni tanto vengano generati 3 giocatori invece di 4, mi viene da dire che semplicemente i giocatori vengono "sovrascritti" da un altro giocatore che viene posizionato nella stessa cella, dato che non c'è nessun controllo su celle già occupate da altri giocatori.
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
|
#4 | |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 22
|
Quote:
#include <stdlib.h> #include <time.h> void main() { int i,j,nx,ny; char squadra1='x'; char squadra2='o'; char campo[][6]={{' ',' ',' ',' ',' ',' ',}, {' ',' ',' ',' ',' ',' ',}, {' ',' ',' ',' ',' ',' ',}, {' ',' ',' ',' ',' ',' ',}, {' ',' ',' ',' ',' ',' ',}, {' ',' ',' ',' ',' ',' ',}}; srand(time(NULL)); for(i=1; i<=4; i++) { nx=rand()%3; ny=rand()%3; campo[nx][ny]=squadra1; } for(i=1; i<=4; i++) { nx=3+rand()%6; ny=3+rand()%6; campo[nx][ny]=squadra2; } for(i=0; i<6; i++) {for(j=0; j<6; j++) printf("%c",campo[i][j]); printf("\n"); facendo così mi crea sempre lo stesso problema... alcuni giocatori non me li posiziona...ma in merito si allineano... |
|
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 22
|
come faccio a fare un controllo sulle celle...in modo che non vengano "sovrascritte"
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
Codice:
if (campo[nx][ny] == ',') ... ps. ti prego, indenta il codice mettendolo in un tag [code] altrimenti c'è da morire.
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
|
#7 | |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 22
|
Quote:
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{int j,i,nx,ny;
char giocator1='x'; /*giocatori maglia x*/
char giocator2='o'; /*giocatori maglia o*/
char campo [][6]= {{' ',' ',' ',' ',' ',' ',},
{' ',' ',' ',' ',' ',' ',},
{' ',' ',' ',' ',' ',' ',},
{' ',' ',' ',' ',' ',' ',},
{' ',' ',' ',' ',' ',' ',},
{' ',' ',' ',' ',' ',' ',}};
srand(time(NULL));
for(i=1;i<=4; i++)
{
nx=rand()%3;
ny=rand()%3;
campo[nx][ny]=giocator1;
if(campo[nx][ny]==' ')
nx=3+rand()%6;
ny=3+rand()%6;
campo[nx][ny]=giocator2;
}
for(i=0; i<6; i++)
{for(j=0; j<6; j++)
printf("%c",campo[i][j]);
printf("\n");
}
...se non ti dà troppo fastidio può eseguirlo anke te lo stesso codice...in modo che riesci a capirmi cosa voglio esprimere..ah..scusa...per il mancato tag di prima |
|
|
|
|
|
|
#8 | |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 22
|
Quote:
un lampo di genio Codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{int j,i,nx,ny;
char giocator1='x'; /*giocatori maglia x*/
char giocator2='o'; /*giocatori maglia o*/
char campo [][6]= {{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '}};
srand(time(NULL));
for(i=1;i<=4; i++) /*genera 4 posizioni a caso sul campo*/
{
nx=rand()%6;
ny=3+rand()%3-6; /*sposto sulle ultime 3 colonne*/
campo[nx][ny]=giocator1;
if (campo[nx][ny]==' ') /*controllo cella libera*/
nx=rand()%6;
ny=rand()%3; /*sposto sulle prime 3 colonne*/
campo[nx][ny]=giocator2;
}
for(i=0; i<6; i++)
{for(j=0; j<6; j++)
printf("%c",campo[i][j]);
printf("\n");
}
}
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quel "if (campo[nx][ny]==' ')" buttato lì in mezzo non ha nessun senso. Cerca di ragionare: finché non trovo una cella vuota, genero una coppia di nx, ny; quando la trovo, posiziono il giocatore.
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
#10 | |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 22
|
Quote:
infatti è inutile quel if....lo metto o non lo metto mi genera sempre un numero a caso di giocatori.....da come mi hai spiegato...ho presunto ke dovrei spostare l'if sopra al ciclo for(i=1;i<=4;i++) ...così finke trovo una cella vuota genero un giocatori...?? Codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{int j,i,nx,ny;
char giocator1='x'; /*giocatori maglia x*/
char giocator2='o'; /*giocatori maglia o*/
char campo [][6]= {{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '}};
srand(time(NULL));
char rete='I';
for(i=0;i<6;i++){
campo[i][2]=rete;
}
for(i=1;i<=4; i++) /*genera 4 posizioni a caso sul campo*/
{
nx=rand()%6;
ny=3+rand()%3-6; /*sposto sulle ultime 3 celle*/
campo[nx][ny]=giocator1;
nx=rand()%6;
ny=rand()%2; /*sposto sulle prime 3 celle*/
campo[nx][ny]=giocator2;
}
for(i=0; i<6; i++)
{for(j=0; j<6; j++)
printf("%c",campo[i][j]);
printf("\n");
}
system("PAUSE");
return 0;
}
|
|
|
|
|
|
|
#11 |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16213
|
Attenzione a come si usa rand: dovendo scegliere un numero a caso fra 1 e 6, rand()%6 dà dei risultati molto più prevedibili che non 1 + (int)(6*rand()/(RAND_MAX+1.0))
http://www.hwupgrade.it/forum/showthread.php?t=1196677 che forse dovrei aggiornare con una sezione sulle permutazioni random... perché qui bisogna scegliere a caso quattro numeri su sei senza ripetizioni...
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
#12 |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 22
|
Non è un problema di controllo di celle, perchè alla fine le posizioni di entrambe le squadre sono lontane l'une dall'altre e quindi non possono essere sovrascritte, quindi è nella funzione rand() che decide lei quando farmi uscire 4 giocatori per ogni squadra, non esiste un modo per fissare il rand?
|
|
|
|
|
|
#13 | |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 22
|
Quote:
|
|
|
|
|
|
|
#14 |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 22
|
Anke facendo una prova con nx=1+(6*rand()/(RAND_MAX+1)) mi dà sempre delle posizioni mancanti...anche se uniformemente più distribuiti
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{int j,i,nx,ny;
char giocator1='x'; /*giocatori maglia x*/
char giocator2='o'; /*giocatori maglia o*/
char campo [][6]= {{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '}};
srand(time(NULL));
char rete='I';
for(i=0;i<6;i++){
campo[i][2]=rete;
}
for(i=4;i>=1; i--) /*genera 4 posizioni a caso sul campo*/
{
nx=1+(int)(6*rand()/(RAND_MAX+1.0));
ny=3+rand()%3-6; /*sposto sulle ultime 3 celle*/
campo[nx][ny]=giocator1;
nx=1+(int)(6*rand()/(RAND_MAX+1.0));
ny=rand()%2; /*sposto sulle prime 3 celle*/
campo[nx][ny]=giocator2;
}
for(i=0; i<6; i++)
{for(j=0; j<6; j++)
printf("%c",campo[i][j]);
printf("\n");
}
system("PAUSE");
return 0;
}
|
|
|
|
|
|
#15 |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 22
|
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{int j,i,nx,ny;
char giocator1='x'; /*giocatori maglia x*/
char giocator2='o'; /*giocatori maglia o*/
char campo [][6]= {{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' '}};
srand(time(NULL));
char rete='I';
for(i=0;i<6;i++){
campo[i][2]=rete;
}
i=1;
while(i<=4) /*genera 4 posizioni a caso sul campo*/
{
nx=1+(int)(6*rand()/(RAND_MAX+1.0));
ny=3+rand()%3-6; /*sposto sulle ultime 3 celle*/
if(campo[nx][ny]!='x')
i++;
campo[nx][ny]=giocator1;
}
j=1;
while(j<=4)
{
nx=rand()%6;
ny=rand()%2;
if(campo[nx][ny]!='o') /*sposto sulle prime 3 celle*/
j++;
campo[nx][ny]=giocator2;
}
for(i=0; i<6; i++)
{for(j=0; j<6; j++)
printf("%c",campo[i][j]);
printf("\n");
}
system("PAUSE");
return 0;
}
|
|
|
|
|
|
#16 | |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 22
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:17.












...se non ti dà troppo fastidio può eseguirlo anke te lo stesso codice...in modo che riesci a capirmi cosa voglio esprimere..







