Olen juuri yrittämässä luoda pokeria, toteutan kortin saannin jokseenkin seuraavalla menetelmällä
hertta = int(rnd*13) + 1 ruutu = int(rnd*13) + 1 pata = int(rnd*13) + 1 risti = int(rnd*13) + 1 Kortti = int(rnd * 4) + 1 'Katsoo mikä maa sitten If lauseita
Onko tämä nyt hyvä tapa arpoa korttipakka, sillä minulle tulee vaikeuksia sitten käsien tunnistamisessa, vai olisiko siihen ideoita...
Ei tuo ole kovinkaan hyvä tapa, sillä esim. värien todennäköisyys kasvaa. Itse rakentaisin seuraavalla tavalla.
(Sorry, en osaa antaa QBasic-koodia).
Hatusta löytyi kuitenkin seuraavanlainen koodi, mutta toiminnasta ei takeita.
Dim kortit(52) As Boolean 'Onko kortti jo valittu Dim maa(52) As Integer ' Mikä maa Dim Arvot(52) As Integer ' Mikä arvo Dim Kadessa(5) As Integer Dim i As Integer Dim j As Integer Dim k As Integer ' Apumuuttujat k=0; For I=1 To 4 For J=1 TO 13 Maa(k)=I Arvot(k)=J kortit(k)=FALSE k=k+1; Next J Next I ' Sorry en tiedä miten looppi tehdään QB:ssä For I=0 TO 4 Looppini: Kadessa(I)=int(rnd(52)) If kortit(Kadessa(I)) THEN GOTO Looppini kortit(Kadessa(I))=TRUE print "Maa:"; print Maa(Kadessa(I)) print "Arvo:"; print Arvot(Kadessa(I)) Next I
P.S. Pokeriongelmaa käsiteltiin hieman aikaa sitten PHP:lla ja on valmis koodikin saatavilla, tosin PHP:ta, josta voi ottaa mallia.
Peranin esittämä tapa on minusta hyvä. Sen sijaan vain, että tekisi oman taulukon kortin joka arvolle, on parempi luoda TYPE-rakenne, ja määrittää se tyypiksi yhdelle taulukolle.
Esim.
TYPE Kortti Maa AS INTEGER Arvo AS INTEGER END TYPE
Olen koittanut selvittää mitä nuo kaikki Dim ja integer&shared käskyt meinaa, mutta olen varmaan typerä kun en ole vieläkään noita oppinut...
DIM määrittelee muuttujan. INTEGER tarkoittaa, että muuttuja määritellään kokonaisluvuksi. SHARED tarkoittaa, että muuttuja määritellään jaetuksi kaikkien aliohjelmien kesken.
OK, pitteepi tuota kokeilla tännään näillä keinoin...
oho.. joku muukin tekee korttipeliä QB:llä mun lisäksi :D
Pitteepi otta jotain opuksia käyttöön kun minä en noita Subeja ja Funktioita oikein hallitse... Ymmärrän tuon koodin kyllä mutta tekee vaikeuksia tehdä omia tuollaisia :(
Tässä kans yksi tapa generoida sekoitettu korttipakka (menee vähän pseudoksi kun en osaa QB:tä)
tehdään taulukko jossa on numerot 1-52 (kuvaavat eri kortteja)
Sitten vaikka 100 kertaa vaihdetaan 2 satunaisen kortin paikkaa. (sekoitus)
Tehdään taulukko2 jossa on 52 alkiota.
Sitten... näin:
for (int a = 0; a < taulukko.length; a++) { taulukko2[a] = taulukko[a] % 4; taulukko[a] = (taulukko[a] - taulukko2[a]) / 4 + 1; }
nyt taulukko:ssa on kortin arvo ja taulukko2:ssa kortin maa. Korttien arvot ovat välillä 1-13. Tuo % ottaa siis jakojäännöksen.
msdos464:sin koodi qb:lle käännettynä
Dim a Dim taulukko() Dim taulukko2() For a = 0 to taulukko.length 'tai UBound(taulukko) en tiedä toimiiko qb:ssä taulukko2(a) = taulukko(a) % 4; taulukko(a) = (taulukko(a) - taulukko2(a)) / 4 + 1; Next a
eiks toi vois tehä myös näin:
for a = 1 to 200
b = int(rnd * 52) + 1
c = int(rnd * 52) + 1
swap pakka(b),pakka(c)
next
?
Aihe on jo aika vanha, joten et voi enää vastata siihen.