|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jul 2006
Messaggi: 96
|
[C] Simulazione gioco Tennis
Salve , devo sviluppare questo progetto per l'esame di programmazione I .
Non ho ancora studiato tutti gli argomenti tuttavia nonostante abbia trattato la maggior parte degli argomenti come Function , array , insiemi , stringhe , approccio incrementale non so neanche come iniziarlo ![]() ![]() Gioco del tennis: Si vuole sviluppare un programma per la simulazione del gioco del tennis. Supponiamo di avere un giocatore che gioca contro un simulatore. Il simulatore lancia la palla che deve essere respinta dal giocatore. Il giocatore (rettangolo rosso) viene collocato in una mappa regolare di dimensioni come in figura. Il giocatore ha a disposizione una racchetta che può muovere solo a sinistra (nero in figura). Il simulatore fa un punto se il giocatore non riesce a respingere la palla altrimenti se il ricevitore colpisce la palla il punto va al giocatore. ![]() Il gioco procede in questo modo: · Il simulatore lancia la palla con una certa intensità che è identificata da un numero casuale da 1 a 10. · Se la palla cade nella cella arancione questa viene respinta dal battitore che fa un punto. · Se la palla cade in una cella gialla il punto va al battitore se l’intensità del tiro è minore di 3 altrimenti il punto va al simulatore. · Se la palla ricade in una zona azzurra il punto va al giocatore. · La palla non può essere mai lanciata sul giocatore. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
forse puoi fare che il campo sia un array di interi , e il colore il numero contenuto ( blu = 0 , arancio =2 , giallo = 1)
![]() if( campo[ destinazione_della_palla ] == BLU) { perdi(); } if( campo[ destinazione_della_palla ] == GIALLO) { if( potenza > 3) perdi(); else vinci(); } if( campo[ destinazione_della_palla ] == ARANCIO) { vinci(); } |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: May 2001
Messaggi: 12814
|
Beh ci vedrei meglio una matrice (che poi a basso livello è gestita come un array è un altro paio di maniche
![]() |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#5 | |
Member
Iscritto dal: Jul 2006
Messaggi: 96
|
Quote:
typedef enum {Blu,giallo,arancione} Colori; struct area_gioco{ int valore; Colori colore; }; typedef area_gioco Area_gioco; e magari usare i tuoi esempi in qst modo definendo un array di tipo derivato: Area_gioco campo[]; if( campo[10,arancione] ) { punt_giocatore=punt_giocatore+1; Correggetemi se sbaglio sono alle prime armi ![]() |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Mar 2006
Città: Milano
Messaggi: 832
|
come gestisci la parte grafica? testuale o grafica "seria"???
comunque avevo fatto una cosa molto simile in pascal tempo fa se ti interessa... |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
Quote:
anzi che glielo fanno scrivere al computer , e non con carta e penna ![]() |
|
![]() |
![]() |
![]() |
#8 | |
Member
Iscritto dal: Jul 2006
Messaggi: 96
|
Quote:
Bobby scusami mi sapresti dire se il ragionamento sopra è esatto quello del tipo derivato e la struct vedo che tu sei piu esperto ![]() |
|
![]() |
![]() |
![]() |
#9 | ||
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
Quote:
Quote:
per "valore" dentro struct area_gioco cosa intendi ? questo if( campo[10,arancione] ) non è corretto riguardo ai colori va bene , anche se puoi anche dichiararli cosi Codice:
#define BLU 0 #define GIALLO 1 #define ARANCIO 2 // se devi usare una struct puoi usarla cosi: typedef struct _tiro_ { int destinazione; int potenza; } Tiro; // insieme a una funzione tipo questa void tiro_del_computer(Tiro *cpu_tiro) { cpu_tiro->destinazione = random( DIM_CAMPO ); cpu_tiro->potenza = random( MAX_POWER ); } // e quindi come prima main() { Tiro cpu_tiro; tiro_del_computer(&cpu_tiro); int destinazione_della_palla = cpu_tiro.destinazione; int potenza = cpu_tiro.potenza ; if( campo[ destinazione_della_palla ] == BLU) { perdi(); } if( campo[ destinazione_della_palla ] == GIALLO) { if( potenza > 3) perdi(); else vinci(); } if( campo[ destinazione_della_palla ] == ARANCIO) { vinci(); } } |
||
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Jul 2006
Messaggi: 96
|
Bene ho quasi finito di scriverlo, però qui dove mi dici
// insieme a una funzione tipo questa void tiro_del_computer(Tiro *cpu_tiro) { cpu_tiro->destinazione = random( DIM_CAMPO ); cpu_tiro->potenza = random( MAX_POWER ); come faccio a dare il valore a cpu_tiro destinazione e a potenza ovviamente cpu_tiro->destinazione non è esatto ... come si fa precisamente? |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
Quote:
puoi usare una funziore random che ti restituisce un valore tra 0 e MAX , o puoi inserire tu i valori ( ma a quel punto non sarebbe piu un tiro "pensato" dal computer) , lo stesso vale per la potenza. riguardo a cpu_tiro->destinazione non è esatto in che senso ? |
|
![]() |
![]() |
![]() |
#12 |
Member
Iscritto dal: Jul 2006
Messaggi: 96
|
Codice:
#include <stdio.h> #include <stdlib.h> #define BLU 0 #define GIALLO 1 #define ARANCIO 2 struct _tiro_ { int destinazione ; int potenza; }; typedef struct _tiro_ Tiro; void tiro_del_computer(Tiro *); int main() { int area_gioco [3]= {0 , 1 , 2}; int dim_area_gioco=3; int potenza_tiro []={1,2,3,4,5,6,7,8,9,10}; int dim_potenza_tiro=10; int punteggio_cpu=0; int punteggio_giocatore=0; Tiro cpu_tiro; tiro_del_computer(&cpu_tiro); int destinazione_palla= cpu_tiro.destinazione; int potenza = cpu_tiro.potenza ; if (area_gioco[destinazione_palla] == BLU); { punteggio_cpu=punteggio_cpu+1; } if (area_gioco[destinazione_palla] == GIALLO); { if (potenza>3) punteggio_cpu=punteggio_cpu+1; else punteggio_giocatore=punteggio_giocatore+1; } printf("i punteggi sono %d vs %d", punteggio_cpu, punteggio_giocatore); system("PAUSE"); return 0; void tiro_del_computer(Tiro *cpu_tiro); { cpu_tiro.destinazione = rand()%dim_area_gioco; cpu_tiro.potenza = rand()%dim_potenza_tiro; } } Linker error : undefined reference to tiro_del_computer |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
hai messo un punto è virgola di troppo
void tiro_del_computer(Tiro *cpu_tiro); <-- qui ! { cpu_tiro.destinazione = rand()%dim_area_gioco; cpu_tiro.potenza = rand()%dim_potenza_tiro; } |
![]() |
![]() |
![]() |
#14 | |
Member
Iscritto dal: Jul 2006
Messaggi: 96
|
Quote:
46 request for member `destinazione' in something not a structure or union 47 request for member `potenza' in something not a structure or union |
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
se quello è il tuo codice originale , devi fare attenzione ci sono tanti errori ,
funzioni dichiarate dentro altre funzioni (tiro_del_computer dentro il main) , i valori dei campi della struct sono assegnati in modo errato dentro la funzione tiro_del_computer e ci sono punti e virgola posizionati in modo errato, e non stai valutando il caso che uscisse ARANCIO. |
![]() |
![]() |
![]() |
#16 | |
Member
Iscritto dal: Jul 2006
Messaggi: 96
|
Quote:
- ho aggiunto il caso ARANCIONE - i valore assegnati in modo errato nella funzione nn ho capito... ti riposto il codice con commento mio Codice:
struct _tiro_ { int destinazione[3]; "]/* dichiaro la struct con i valori di destinazione e potenza */ int potenza[10]: }; typedef struct _tiro_ Tiro; void tiro_del_computer(Tiro *); /* dichiaro la funzione con argomento un tipo Tiro*/int main() { int area_gioco [3]= {0 , 1 , 2}; int dim_area_gioco=3; int dim_potenza_tiro=10; int punteggio_cpu=0; int punteggio_giocatore=0; Tiro cpu_tiro; /* inizializzo un tipo tiro che sarà argomento della funzione*/ tiro_del_computer(&cpu_tiro); /* chiamata alla funzione */ int destinazione_palla= cpu_tiro.destinazione; /* inizializzo un intero con il valore della destinazione che mi arriva dalla funzione*/ int potenza = cpu_tiro.potenza ; /* stesso qui ma a potenza */ if (destinazione_palla == BLU); /* utilizzo l'intero di prima per le verifiche */ { punteggio_cpu=punteggio_cpu+1; } if (destinazione_palla == GIALLO); { if (potenza>3) punteggio_cpu=punteggio_cpu+1; else punteggio_giocatore=punteggio_giocatore+1; } if (destinazione_palla == ARANCIO); { punteggio_giocatore=punteggio_giocatore+1; } printf("i punteggi sono %d vs %d", punteggio_cpu, punteggio_giocatore); system("PAUSE"); return 0; void tiro_del_computer(Tiro *cpu_tiro) /* questo è quanto fa la funzione */ { cpu_tiro.destinazione = rand()%3; // cpu_tiro è una struct da due valori qui assegno a destinazione un valore casuale da 0 a 2 */ cpu_tiro.potenza = rand()%11; // valore casuale da 1 a 10 */ } Ultima modifica di Vincenzoflaminio : 23-02-2010 alle 16:48. |
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
Ta-daaa !
Codice PHP:
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Sep 2009
Città: Nel mondo dei sogni
Messaggi: 4125
|
Programmazione I e vi fanno fare questo? Bella fortuna.
|
![]() |
![]() |
![]() |
#19 |
Member
Iscritto dal: Jul 2006
Messaggi: 96
|
Bobbytre come dici tu funziona finalmente ... il mio errore era non assegnare alla function gli altri due parametri cioè dim_area e dim_potenza..
Gli ultimi accorgimenti che devo seguire sono questi ecco perhcè io usavo il comando rand()%dim_area_gioco che dovrebbe corrispondere al tuo random(dim_area_gioco) : Simulare 100 volte la gara ognuna composta da 500 lanci. Il giocatore vince se respinge almeno l’80% dei lanci. Stampare la statistica delle vittorie. 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. Effettuare almeno 5 test, visualizzando lo schema come presentato in figura Ho risolto tutto a parte una cosa io nel ciclo for metto for (i=0;i<500;i++) ma quando parte il programma il punteggio sommato tra cpu e giovatore è 1500.. ![]() ma se io metto 500 com'è possibile? |
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
Quote:
posta il tuo codice e ti posso dare una conferma. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:03.