Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
OnePlus 15 nasce per alzare l'asticella delle prestazioni e del gaming mobile. Ma non solo, visto che integra un display LTPO 1,5K a 165 Hz, OxygenOS 16 con funzioni AI integrate e un comparto foto con tre moduli da 50 MP al posteriore. La batteria da 7.300 mAh con SUPERVOOC 120 W e AIRVOOC 50 W è la ciliegina sulla torta per uno smartphone che promette di offrire un'esperienza d'uso senza alcun compromesso
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media
Vediamo come si comporta il Ryzen 5 7500X3D, nuovo processore di casa AMD che fonde 6 core Zen 4 con la tecnologia 3D V-Cache, particolarmente utile in scenari come il gaming. Annunciato a un prezzo di listino di 279€, il nuovo arrivato sarà in grado di diventare un riferimento per i sistemi budget? Ecco cosa ne pensiamo.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-06-2006, 21:03   #1
McGrady
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.
McGrady è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2006, 21:19   #2
ianaz
Senior Member
 
L'Avatar di ianaz
 
Iscritto dal: Jan 2005
Città: London, United Kingdom
Messaggi: 959
Mi spiace, non posso aiutarti...
però, una curiosità...: lo vuoi fare grafico oppure a "schermo nero"?
__________________
zattix
ianaz è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2006, 21:36   #3
McGrady
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
McGrady è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2006, 09:02   #4
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da McGrady
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.
Stai praticamente chiedendo di farti il programma
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2006, 11:50   #5
McGrady
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...
McGrady è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2006, 12:05   #6
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da McGrady
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...
guarda che la mia mica é complicata ...

Codice:
return (rand() % 6 + 1) + // DADO 1
       (rand() % 6 + 1);  // DADO 2
il resto é commenti e main di test

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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2006, 12:12   #7
davide87
Senior Member
 
L'Avatar di davide87
 
Iscritto dal: Dec 2004
Città: Pomezia-Roma Mezzo: STGT ( Sola e Tacchi Gran Turismo )
Messaggi: 2646
Quote:
Originariamente inviato da McGrady
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...
Randomize();
tirata=random(12)+1;

cosi.?
davide87 è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2006, 12:19   #8
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
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.
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2006, 12:21   #9
McGrady
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.
McGrady è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2006, 12:26   #10
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da davide87)
Randomize();
Randomize() ???
forse randomize() con Borland ?

Quote:
Originariamente inviato da davide87)
tirata=random(12)+1;
ocio che cosí ti puó uscire 1. Usi un dado che ha 0 ?
__________________
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2006, 12:31   #11
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da McGrady
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?
per forza ???

allora usa la classica struttura con gli "iteratori"

Codice:
typedef struct POS
{
   int         Posizione;
   ... 
   struct POS *pNext;
   struct POS *pPrev;
} Pos;
poi la chiudi assegnando a pNext dell'ultima il punt della prima
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2006, 12:34   #12
davide87
Senior Member
 
L'Avatar di davide87
 
Iscritto dal: Dec 2004
Città: Pomezia-Roma Mezzo: STGT ( Sola e Tacchi Gran Turismo )
Messaggi: 2646
Quote:
Originariamente inviato da trallallero
Randomize() ???
forse randomize() con Borland ?


ocio che cosí ti puó uscire 1. Usi un dado che ha 0 ?
ramdomize(); perchè io che ho scritto..?
ah..è vero sono due dadi..
quindi:
tirata1=random(6)+1;
tirata2=random(6)+1;
tirata=tirara1+tirara2;
davide87 è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2006, 12:38   #13
wisher
Senior Member
 
L'Avatar di wisher
 
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
__________________
wisher è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2006, 12:50   #14
McGrady
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?
McGrady è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2006, 13:02   #15
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
non puoi farlo in C++ e usare l'OOP? sarebbe 10000 volte + facile...
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2006, 13:06   #16
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da davide87
ramdomize(); perchè io che ho scritto..?
devi stare attento alla portabilitá delle funzioni.
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2006, 13:40   #17
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da AngeL)
non puoi farlo in C++ e usare l'OOP? sarebbe 10000 volte + facile...
perché ? se ha problemi a muoversi nel tabellone
non é che il C++ glielo risolve
Puó fare il metodo
Codice:
void MuoviPosizione(int Pos)
ma qualcosa ci deve scrivere dentro

Quote:
Originariamente inviato da McGrady
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?
non c'é un unico modo per farlo.
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;
dove INFO é la struttura che contiene le info
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2006, 14:44   #18
McGrady
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
McGrady è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2006, 19:34   #19
wisher
Senior Member
 
L'Avatar di wisher
 
Iscritto dal: Aug 2005
Messaggi: 2755
Quote:
Originariamente inviato da McGrady
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
ma non tornerebbe + comodo usando 1 array?
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
__________________
wisher è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 10:04   #20
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
Quote:
Originariamente inviato da trallallero
Codice:
int TiraDadi()
{
   return (rand() % 6 + 1) + // DADO 1
          (rand() % 6 + 1);  // DADO 2
}
non dovrebbe essere ((rand() % 6)+1)+((rand() % 6)+1); ?
quello che hai fatto tu calcola il random con range 6+1, cioe 7 (credo )

quali header servono per usare rand() ?
AngeL) è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
SONY BRAVIA 8 II e BRAVIA Theatre System 6: il cinema a casa in formato compatto SONY BRAVIA 8 II e BRAVIA Theatre System 6: il c...
KTC H27E6 a 300Hz e 1ms: come i rivali ma a metà prezzo KTC H27E6 a 300Hz e 1ms: come i rivali ma a met&...
Anche Firefox punta sull'intelligenza ar...
Stop alle super-accelerazioni delle auto...
Osservatorio AGCOM: sempre più ac...
Sempre più IA su Spotify: arrivan...
iMac M4 crolla a 1.199€ con risparmio di...
Nintendo Switch 2: in rilascio un nuovo ...
Core Ultra 9 290K Plus, Core Ultra 7 270...
Prezzo Black Friday per le super cuffie ...
Crollano i prezzi della cuffie Beats col...
ASUS ROG Matrix RTX 5090 costa 4000 doll...
Grazie ai dati di ESA il calcolo della t...
Rilasciati nuovi video e immagini della ...
Gli astronauti cinesi di Shenzhou-20 son...
Mai così tanti gas serra: il 2025...
Google condannata in Germania: favorito ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:37.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v