Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [C]mescolamento mazzo di carte
Forum - C/C++ - [C]mescolamento mazzo di carte

Avatar
crack001 (Normal User)
Rookie


Messaggi: 52
Iscritto: 25/10/2007

Segnala al moderatore
Postato alle 19:56
Mercoledì, 09/12/2009
salve a tutti, sto facendo un programma per un gioco di carte, e ho il seguente problema...io utilizzo un mazzo di carte francesci, quindi 52 carte con 4 semi, 13 carte per ogni seme. Utilizzo 2 Array, e supponendo che il mazzo sia nuovo quindi appena comprato, ho in sequenza 13 carte del primo seme seguite da 13 carte del secondo e cosi via...ora dovrei mescolare questo mazzo...il problema è questo!!!

cioè io devo lavorare su 2 array, per ogni atto di mescolazione, io devo memorizzare oltre alla carta del primo vettore anche il seme che si trova nel secondo vettore, dato che la carta io la trovo usando parallelamente i 2 vettori, mi spiego meglio:

Codice sorgente - presumibilmente Plain Text

  1. carta   seme
  2. 1       1
  3. 2       1
  4. 3       1
  5. 4       1
  6. 5       1
  7. 6       1
  8. 7       1
  9. 8       1
  10. 9       1
  11. 10      1
  12. 11      1
  13. 12      1
  14. 13      1
  15. 1       2
  16. 2       2
  17. e cosi via



chi di voi mi da una mano??? se dovevo mescolare 1 solo vettore utilizzavo la funzione random e risolvevo tutto in 5 minuti ma qui devo lavorare su 2 vettori, come fare???


PM Quote
Avatar
crack001 (Normal User)
Rookie


Messaggi: 52
Iscritto: 25/10/2007

Segnala al moderatore
Postato alle 20:00
Mercoledì, 09/12/2009
ops chiedo scusa ho sbagliato sezione!!! kiedo gentilmente ad 1 moderatore di cambiare la sezione al topic -.- mi scuso ma sto fuso XD

PM Quote
Avatar
ingMark (Ex-Member)
Pro


Messaggi: 176
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 23:44
Mercoledì, 09/12/2009
Immagino che tu ancora non abbia sentito parlare di struct :)
Col presupposto che non sai/puoi usarle ecco la domanda che mi farei sul tuo problema.

-Devo per forza tenere anche il mazzo di carte ordinato?

A meno che non sia una specifica dell'esercizio, la risposta secondo me è no.
Mi sembra anche un'informazione abbastanza inutile visto che sai benissimo come è fatto un mazzo di carte ordinato.
Inoltre anche se dovessi rimescolarlo più volte, non perdi nessuna informazione se il tuo programma non sa come è fatto un mazzo di carte ordinato.

Mi spiego meglio. Anche nella realtà, dopo che hai giocato una partita a carte e devi rimischiare il mazzo non lo riporti alla forma originale (con tutte le carte ordinate per numero e per seme) e poi le rimischi :k:

Quindi in definitiva se l'esercizio non ti chiede di tenere l'informazione sul mazzo di carte iniziale puoi riutilizzare quei due vettori, scambiando ogni volta le posizioni di due carte.

Se invece l'esercizio ti chiedesse di tenere anche l'informazione sul mazzo di carte iniziale, allora come usi due vettori per memorizzare l'informazione originale, dovresti usarne due (e tenerli sempre paralleli) anche per il mazzo di carte mischiato.

Poi puoi benissimo cercare di ottimizzare il tutto.
Una possibile soluzione che mi viene in mente, potrebbe essere usare solo 3 vettori invece che 4.
Questo perchè nel mazzo iniziale tu sai per certo che le prime 13 carte sono del seme 1, le seconde 13 carte sono del seme 2 etc etc, e quindi l'informazione del seme è superflua.
Quando il mazzo è mischiato invece ne hai bisogno :k:


Mamma diceva sempre che stupido è chi lo stupido fa.
PM Quote
Avatar
crack001 (Normal User)
Rookie


Messaggi: 52
Iscritto: 25/10/2007

Segnala al moderatore
Postato alle 11:34
Giovedì, 10/12/2009
si appunto, l'esercizio vuole ke all'inizio il mazzo di carte sia NUOVO, e poi deve partire la funzione che mescola il mazzo, xo siccome io ho 2 vettori, uno di carte e uno di semi, quando mescolo il mazzo io li devo mantene ordinati tutti e 2, cioè metti che il mio vettore è:

1   2
2   2
3   1
4   4

pensa a questo come un piccolo mazzo di 4 carte miskiato, se io lo mescolo nuovamente ottengo

1  2
4  4
2  2
3  1

capito cosa intendo??? se dovevo giocare solo su 1 vettore la cosa era facile spostavo 2 carte per volta usando una variabile temporanea a via...ma qui devo memorizzare 2 vettori, come faccio? qualcuno di voi che mi illustra tutto con un semplice algoritmo??? ne ho trovate di soluzioni in rete ma sono solo ed esclusivamente per 1 vettore...cioè altre funzioni per mescolare carte non vanno ad influire sul vettore del seme

PM Quote
Avatar
ingMark (Ex-Member)
Pro


Messaggi: 176
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 13:14
Giovedì, 10/12/2009
se sai come ordinare un vettore perchè non puoi ordinarne due assieme? 8-|

questo è quello che faresti con un solo vettore
Codice sorgente - presumibilmente Plain Text

  1. for(i = 0; i< lungvett; i++)
  2. {  
  3.    ottieni_indici_casuali(&indice1, &indice2); //questo decidi poi tu come farlo
  4.    scambia(vett, indice1, indice2); //come sopra
  5. }



ora una volta che sai questo il passo è breve!
Se le due informazioni (numero e seme) devono sempre essere abbinate, ti basta scambiare gli elementi con lo stesso indice anche sul secondo vettore

Codice sorgente - presumibilmente Plain Text

  1. for(i = 0; i< lungvett; i++)
  2. {
  3.    ottieni_indici_casuali(&indice1, &indice2); //questo decidi poi tu come farlo
  4.    scambia(vett_numeri, indice1, indice2); //come sopra
  5.    scambia(vett_semi, indice1, indice2);
  6. }



Devi solo ripetere l'operazione di scambio, con gli stessi indici


Mamma diceva sempre che stupido è chi lo stupido fa.
PM Quote
Avatar
crack001 (Normal User)
Rookie


Messaggi: 52
Iscritto: 25/10/2007

Segnala al moderatore
Postato alle 23:06
Giovedì, 10/12/2009
grande, avevo perfettamente ragione, l'unica cosa è che tu nella funziona richiami una funzione di scambio etc, solo ke la mia funzione di scambio mi dava un problema con degli errori, quindi l'ho fatto senza funzione ma è la stessa cosa...se ho problemi pubblico un nuovo post nella sezione giusta questa volta...grazie mille (postero sicuramente)

PM Quote