Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Pokeri (QB)

Sivun loppuun

Bubi [19.05.2005 09:30:53]

#

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...

peran [19.05.2005 11:43:34]

#

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.

hunajavohveli [19.05.2005 13:04:31]

#

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

Bubi [19.05.2005 13:31:00]

#

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...

hunajavohveli [19.05.2005 13:37:44]

#

DIM määrittelee muuttujan. INTEGER tarkoittaa, että muuttuja määritellään kokonaisluvuksi. SHARED tarkoittaa, että muuttuja määritellään jaetuksi kaikkien aliohjelmien kesken.

Bubi [19.05.2005 13:45:50]

#

OK, pitteepi tuota kokeilla tännään näillä keinoin...

eraggo [22.05.2005 16:10:34]

#

oho.. joku muukin tekee korttipeliä QB:llä mun lisäksi :D

Bubi [23.05.2005 13:27:30]

#

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 :(

msdos464 [24.05.2005 15:22:45]

#

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.

petrinm [24.05.2005 15:56:08]

#

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

eraggo [29.05.2005 19:57:49]

#

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
?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta