També desmenteixo rotundament aquesta afirmació.krusenstern_1977 ha escrit:Així seure a una cadira o a una altra té importància a l'hora de vore peces???![]()
![]()
![]()

Moderadors: samadona, lafaltaenvide
obrador ha escrit: jaumarro: El programa utilitza la funció "random()" de java per ordenar 36 cartes de l'1 al 36... i després reparteix aquestes cartes. El programa, quan ordena no sap quines cartes són, per ell són 36 nombres. La carta 1, la carta 2, la carta 3... com pots no entendre això i dir que no és aleatori? En tot cas et pots dirigir al departament de queixes de SUN MICROSYSTEMS per denunciar que la seva funció "random()" del seu llenguatge de programació java s'equivoca... Ara bé, també estic obert a altres solucions... jo no en veig d'altra. Per cert aquest és el codi que mescla les cartes:Mestre Obrador:Codi: Selecciona’ls tots
private void mescla() { int numberOfCardsProcessed; int order; String name=""; Card card,c; boolean given[] = new boolean[thisGame.numberOfCards]; for (int i=0; i<thisGame.numberOfCards; i++) given[i]=false; numberOfCardsProcessed=0; randomCardList.removeAllElements(); while (true) { int i = Math.abs(generator.nextInt()%thisGame.numberOfCards); if (!given[i]) { given[i]=true; c = thisGame.cardAt(i); order = thisGame.numberOfCards-c.getOrder(); card=new Card(c.getName(),order,c.getValue()); randomCardList.push(card); if (++numberOfCardsProcessed==thisGame.numberOfCards) { return; } } } }
Reconec que me feia il.lusió veure el fragment de codi que publicares emprat per al
repartiment de cartes. Desgraciadament, no sé programar en Java, tot i que, si no m'equivoc,
veig més o menys bé el que fa. Se n'ha parlat a missatges anteriors sobre la generació de
números aleatoris per una computadora i crec que una cosa està prou clara. Els números són
fruit d'un càlcul i, per tant, pseudoaleatoris. No en parlaré més d'aquest tema.
Ara bé, aprofitant el teu convit a cercar altres solucions, sí que m'agradaria proposar la meva.
Crec que el problema que hi veig no és en la rutina d'obtenció de números aleatoris sinó en
l'algorisme emprat en la seva obtenció. Intentaré explicar-me de manera més senzilla.
En una partida real (dic real referint-me a una partida jugada amb cartes físiques), a cada
nou repartiment de cartes, aquestes es troben en un lloc de la baralla diferent de la mà
anterior. És a dir, quan s'acaben les vases, el que ha de fer cartes les col.loca al final,
al principi o aleatòriament a un lloc de la baralla i llavors torna mesclar. Si no he
interpretat malament el codi (el publicat és incomplet), la tria de cartes se fa sempre sobre
un conjunt de cartes cadascuna de les quals sempre és a la mateixa posició inicial:
Exemple:
Hi ha 36 cartes.
Carta 1 -> As d'espases
Carta 2 -> 3 d'espases
Carta 3 -> 4 d'espases
...
Carta 13 -> As de bastos
...
etc
El que jo propòs es simular una mescla "real". Com? Idò ja que t'he dit que no sé programar
en Java, intentaré explicar-te'n l'algorisme.
1. Tenim un vector de totes cartes del Truc.
Visibilitat global (Ha de conservar el valors durant tota la partida).
2. Se trien les dotze cartes amb la mateixa funció random actual.
La posició de cada carta seleccionada s'inicialitza amb un valor concret
(per exemple zero).
3. Se juguen les vases.
4. S'han de tornar a repartir cartes.
5. Se fa un "pack" del vector de les cartes no repartides. I s'afegeixen al final del
vector les cartes jugades.
Pack --> Eliminar del vector els espais buits
1 2 0 4 0 0 7 .... Pack --> 1 2 4 7 .... (al final del vector afegirem 3, 5, 6)
6. Tornam al punt 2.
Salutacions.