Fiksuin tapa toteuttaa kortti pakka ? Olen toteuttanut näin (lyhyesti):
Merkkijono: "010203....52", josta poimitaan arpomalla osa esim "24", tästä saadaankin kortin arvo ja maa. Sen jälkeen merkkijono "24" poistetaan "pakasta" ja satunnaislukugeneraattorin max. arvoa pienennetään. Etuna, ettei jo arvottua korttia poimita koskaan uudelleen, eikä minkäänlaista kontrollia arvotuista korteista tarvita, koska niitä ei enää "pakassa" ole. Tästä on toimiva versio tehty VB:lla.
Kuinka tämän saisi toimimaan VB:ssa tai Delphissä taulukkona, ilman että taulukkoa tarvitsisi määrittää uudelleen kun siitä poistetaan alkio tai tarvitsi tehdä minkäänlaista tarkistusta, onko kortti jo kerran arvottu ???
Korttipakka
4
505
Vastaukset
- Sinivuokko
Muuten sama homma, mutta kopioit taulukon viimeisen elementin arvotun elementin päälle.
- Tp
No, niinpä tietenkin ! Yksinkertaista.
- Sinivuokko
jos (päällekopioinnin sijaan) VAIHDAT pakan kortit keskenään, siis taulukon viimeisen elementin ja arvotun elementin, taulukkoa ei tarvitse alustaa mitenkään kun pakka sekoitetaan. Riittää, että asetat satunnaislukugeneraattorin maksimin osoittamaan täyttä pakkaa.
- Sinivuokko
Sinivuokko kirjoitti:
jos (päällekopioinnin sijaan) VAIHDAT pakan kortit keskenään, siis taulukon viimeisen elementin ja arvotun elementin, taulukkoa ei tarvitse alustaa mitenkään kun pakka sekoitetaan. Riittää, että asetat satunnaislukugeneraattorin maksimin osoittamaan täyttä pakkaa.
#include
#define HERTTA (0*16)
#define RUUTU (1*16)
#define RISTI (2*16)
#define PATA (3*16)
typedef unsigned char Kortti;
Kortti Pakka[] =
{
HERTTA 1, HERTTA 2, HERTTA 3, HERTTA 4, HERTTA 5,
HERTTA 6, HERTTA 7, HERTTA 8, HERTTA 9, HERTTA 10,
HERTTA 11, HERTTA 12, HERTTA 13,
RUUTU 1, RUUTU 2, RUUTU 3, RUUTU 4, RUUTU 5,
RUUTU 6, RUUTU 7, RUUTU 8, RUUTU 9, RUUTU 10,
RUUTU 11, RUUTU 12, RUUTU 13,
PATA 1, PATA 2, PATA 3, PATA 4, PATA 5,
PATA 6, PATA 7, PATA 8, PATA 9, PATA 10,
PATA 11, PATA 12, PATA 13,
RISTI 1, RISTI 2, RISTI 3, RISTI 4, RISTI 5,
RISTI 6, RISTI 7, RISTI 8, RISTI 9, RISTI 10,
RISTI 11, RISTI 12, RISTI 13
};
unsigned KorttejaPakassa = 52;
#define SekoitaPakka() KorttejaPakassa = 52
Kortti KorttiPakasta(void)
{
Kortti k=0;
if (KorttejaPakassa)
{
unsigned i, m=RAND_MAX/KorttejaPakassa;
for (m *= KorttejaPakassa; (i=rand()) >= m;);
k = Pakka[i %= KorttejaPakassa--];
Pakka[i] = Pakka[KorttejaPakassa];
Pakka[KorttejaPakassa] = k;
}
return(k);
}
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Martinan uusi poikakaveri
Sielläpä se sitten on. Instastoorissa pienissä speedoissa retkottaa uusin kulta Martinan kanssa. Oikein sydämiä laitettu2043085Suomessa helteet ylittää vasta +30 astetta.
Etelä-Euroopassa on mitattu yli +40 asteen lämpötiloja. Lähi-Idässä +50 on ylitetty useasti Lämpöennätykset rikkoutuva2391590Laita mulle viesti!!
Laita viesti mesen (Facebook) kautta. Haluan keskustella mutta sinun ehdoilla en halua häiriköidä tms. Yhä välitän sinus921442- 881342
Vanhemmalle naiselle
alkuperäiseltä kirjoittajalta. On olemassa myös se toinen joka tarkoituksella käyttää samaa otsikkoa. Ihan sama kunhan e461304Fazer perustaa 400 miljoonan suklaatehtaan Lahteen
No eipä ihme miksi ovat kolminkertaistaneen suklaalevyjensä hinnan. Nehän on alkaneet keräämään rahaa tehdasta varten.1481206Ajattelen sinua tänäkin iltana
Olet huippuihana❤️ Ajattelen sinua jatkuvasti. Toivottavasti tapaamme pian. En malttaisi odottaa, mutta odotan kuitenkin121168Ökyrikkaat Fazerit saivat 20 MILJOONAA veronmaksajien varallisuutta!
"Yle uutisoi viime viikolla, että Business Finland on myöntänyt Fazerille noin 20 miljoonaa euroa investointitukea. Faze120992Miehelle...
Oliko kaikki mökötus sen arvoista? Ei mukavalta tuntunut, kun aloit hiljaisesti osoittaa mieltä ja kohtelit välinpitämät89912Tuntuu liian hankalalta
Lähettää sulle viesti. Tarvitsen apuasi ottaa koppi tilanteesta. Miehelle meni.44793