|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2006
Messaggi: 67
|
Programma in C: HELP!
Allora il programma è il seguente: Il programma deve simulare il gioco del Monopoli semplificato. Ho una lista di giocatori e ogni giocatore ha una lista di proprietà che possiede (ogni proprietà è caratterizzata dal nome della casella: es via torino, piazza dante) che è costituita dal nome della proprietà e dalla cifra in euro che dovrà essere corrisposta agli altri giocatori che capitassero in tale casella. Ho un'altra lista che costituisce il tabellone, ogni elemento della lista è una via o una piazza (es. corso_magellano). Tutti i giocatori si trovano inizialmente nella prima casella e a turno si simula il lancio di due dadi ( generare un numero casuale tra 1 e 12) e lo si fa avanzare nella casella corrispondente eventualmente pagando la tassa dovuta al proprietario ( se c'è un proprietario); infine si stampa a video l'operazione compiuta. Un giocatore che finisce i soldi viene eliminato, vince l'ultimo giocatore rimasto.
Ovviamente il programma è lungo, però vorrei che voi mi aiutaste a risolvere il problema, soprattutto la parte riguardante la simulazione vera e propria, ovvero dal lancio dei dadi in poi. Ogni suggerimento non può che aiutarmi. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: May 2006
Messaggi: 67
|
Scusate ma non sono stato molto chiaro:
Il tabellone è rappresentato dalla seguente lista ad es. Partenza Parco_della_vittoria corso_magellano piazza_giulio_cesare ..... ecc...... I partecipanti sono messi in una lista e ogni elemento della lista ha il campo nome giocatore e capitale, per ogni giocatore c'è una lista di proprietà(ogni proprietà è una casella) ogni proprietà ha un prezzo che deve essere pagato da chi capita in questa casella se non è sua, ovviamente deve pagare al proprietario. Sul video devo semplicemente comparire questo Es. Mario tira dadi:5 Mario arriva in corso_magellano e paga Euro 5.32 a Gustavo soldi rimanenti : euro 24.91 e così via per tutti i giocatori Niente di grafico la mia struttura dati sono semplicemente delle LISTE |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Ma almeno iniziarlo no ? un'idea uno spunto hai messo il linguaggio e il problema ... Vabbé, io t'ho fatto il lancio dadi ... Codice:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
/* *\
RITORNA LA SOMMA DI 2 NUMERI TRA 1 E 6
SI POTREBBE FARE ANCHE:
\* */
int TiraDadi()
{
return (rand() % 6 + 1) + // DADO 1
(rand() % 6 + 1); // DADO 2
}
/* *\
TESTA LA FUNZIONE TiraDadi
\* */
int main( int argc, char *argv[] )
{
int i;
/*
* srand VA CHIAMATA PER INIZIALIZZARE IL GENERATORE RANDOM
* GLI PASSO getpid() PER AVERE UAN SEQUENZA DIVERSA OGNI VOLTA
*/
srand((unsigned int)getpid());
/* TESTA 100 LANCI DI DADI. OGNI 10 VA A CAPO */
for ( i = 1; i <= 100; i++ )
printf( "%3i %c", TiraDadi(), (i % 10) ? ' ' : '\n' );
putchar('\n');
}
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: May 2006
Messaggi: 67
|
Non sto chidendo di farmi il programma vorrei solo qualche suggerimento. Il lancio dei dadi mi serve qualcosa molto piu semplice:
tirata = rand() % 12 + 1;che mi genera numeri casuali tra 1 e 12. Il mio vero problema è implementare il fatto dello spostamento dei giocatori nel tabellone. Avevo pensato di mettere nel campo struct di ogni giocatore una variabile int posizione che mi tiene conto della posizione del giocatore... |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Codice:
return (rand() % 6 + 1) + // DADO 1
(rand() % 6 + 1); // DADO 2
Comunque mi sembra la cosa piú veloce e semplice da fare quella del campo "posizione". Immagina il campo del monopoli come un array di n posizioni e il resto viene da se Il realtá il campo é "circolare", diciamo una matrice nella quale usi solo il perimetro, ma sarebbe assurdo e da calci nelle palle usare una matrice per la posizione Ti consiglio di disegnare il tutto e lavorare molto su carta Quando serve fai un fischio
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Dec 2004
Città: Pomezia-Roma Mezzo: STGT ( Sola e Tacchi Gran Turismo )
Messaggi: 2646
|
Quote:
tirata=random(12)+1; cosi.? |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
|
è meglio la tirata con i due da sei, perche ci sono le stessed probabilita che in un lancio di dadi nella realta.
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: May 2006
Messaggi: 67
|
Il tabellone del monopoli devo per forza farlo sottoforma di lista circolare. Il problema è come faccio a chiudere la lista?? Ovvero l'ultimo elemento punta al primo?
DOmanda 2: while(nome_casella != '#' ) dove nome_casella è una stringa mi da problemi...... In pratica i giocatori sono così memorizzati in un file Mario 30.23 parco_della_Vittoria 10.23 viale_dei_giardini 8.32 # Pippo ............. .......... In pratica ogni giocatore è separato da un altro dal simbolo # 30.23 sta a indicare il capitale di mario. sotto ci sono tutte le proprietà di mario con i relativi prezzi che ogni giocatore deve pagargli nel caso ci finisse. NOme_casella è appunto il nome della proprietà (che rappresenta appunto una casella). Quel while però non me lo fa passare. Ultima modifica di McGrady : 27-06-2006 alle 12:30. |
|
|
|
|
|
#10 | ||
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
forse randomize() con Borland ? Quote:
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
||
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
allora usa la classica struttura con gli "iteratori" Codice:
typedef struct POS
{
int Posizione;
...
struct POS *pNext;
struct POS *pPrev;
} Pos;
e a pPrev della prima il punt dell'ultima vado a magná
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Dec 2004
Città: Pomezia-Roma Mezzo: STGT ( Sola e Tacchi Gran Turismo )
Messaggi: 2646
|
Quote:
ah..è vero sono due dadi.. quindi: tirata1=random(6)+1; tirata2=random(6)+1; tirata=tirara1+tirara2; |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
potresti anche avere una lista circolare come tabellone, poi ad ogni utente nel compo posizione metti il puntatore alla casella interessata, su ogni casella (quindi su ogni elemento della lista) segnali proprietario ed eventuali edifici.
in pratica lanci i dadi ti muovi e aggiorni la posizione controlli se la casella ha un proprietario e paghi, altrimenti chiedi cosa fare
__________________
|
|
|
|
|
|
#14 |
|
Member
Iscritto dal: May 2006
Messaggi: 67
|
In pratica ho difficolta uhna volta lanciati i dadi a trovare una corrispondenza tra il numero del dado e la posizione nel tabellone.
Ad es Mario tira dadi : 8 posizione_mario=posizione_mario + 8; /* va avanti di 8 */ dopodichè come faccio a collegare la posizione attuale di marco con il nome della casella del tabellone? |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
|
non puoi farlo in C++ e usare l'OOP? sarebbe 10000 volte + facile...
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Se non ricordo male la Borland spiega bene nel manuale se la funzione é ANSI e su che macchine funge. randomize() su Sun e linux non c'é
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#17 | ||
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
non é che il C++ glielo risolve Puó fare il metodo Codice:
void MuoviPosizione(int Pos) Quote:
Dipende da come hai impostato la cosa. Mario che tipo di oggetto é ? la posizione ? sono strutture ? il tabellone ? troppe incognite potresti fare cosí Codice:
typedef struct POS
{
int Posizione;
...
struct INFO *pInfo;
struct POS *pNext;
struct POS *pPrev;
} Pos;
su quella posizione, tipo il nome della via, il costo, il proprietario etc ... tanto per dirne una
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
||
|
|
|
|
|
#18 |
|
Member
Iscritto dal: May 2006
Messaggi: 67
|
Allora Mario è il giocatore, "posizione" è il campo della struct di ogni giocatore, il tabellone è una lista di stringhe_
PARTENZA=>VIA_DANTE=>CORSO_TORINO=>.......ECC... Se sono all'inizio e mi esce 2 con i dadi, MArio dovrà andare nella posizione 2, che nel mio esempio è CORSO_TORINO ora io dovrei vedere se Cordo Torino è proprietà di qualche altro giocatore e in tal caso pagare |
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Quote:
in fondo hai un numero fisso di caselle e in questo modo salvi posizione corrente e hai la posizione dopo il lancio con una semplice somma
__________________
|
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
|
Quote:
quello che hai fatto tu calcola il random con range 6+1, cioe 7 (credo quali header servono per usare rand() ? |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:37.



















