Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Pokerin pelien etsiminen

Sivun loppuun

Ozmosis [19.01.2005 20:49:18]

#

Olen tekemässä (edelleen) pokeri peliä ja nyt pitäisi saada pelit etsittyä korteista. Kortit on numeroitu 1-52, eli arvon 5 randomi lukua ja haen sitten lukua vastaavan kortin kuvan. Kortit on numeroitu siten että numerot 1-13 ovat herttoja numeroja järjestyksessä,14-26 patoja ja niin edelleen. Miten saan eri pelit etsittyä arvotuista numeroista/korteista??

esakom [19.01.2005 21:01:29]

#

luulin että osaan jonkun verran pokeria, mutta mitä tarkoitat "peleillä"? tarkoitatko korttikombinaatioita, kuten täyskättä, suoraa etc...? tuohan on jo sitä logiikan ohjelmointia, eli raakaa aivotyötä...

ezuli [19.01.2005 21:48:23]

#

Ensin lajittelee kortit suuruus järjestykseen.
Sitten tarkistaa kuninkaallisväristä lähtien alaspäin ja lopettaa jos osuu.
Jos kortit on 9,10,11,12,13 tai 22,23,24,25,26 jne. on kuninkaallisväri.
Jos kortti5 =kortti4 +1 =kortti3 +2 ... ja enintään kortti5 on jaollinen 13 on värisuora.
jne.
jne.

Tuolla systeemillä pitäisi onnistua.

BadSource [20.01.2005 07:46:43]

#

Esakom ja ezuli mainitsivat jo ne tärkeimmät: logiikka ja korttien suuruusjärjestys.

Itse hoitaisin tuon niin, että kun kortit on suuruusjärjestyksessä, niin niistä tutkitaan parit, väri ja suora. Parit ensimmäisenä, sillä se sulkee kaksi seuraavaa tarkistusta pois. Pareilla tarkoitan sitä, että saman arvoista korttia on useampi kuin yksi. Pareja voi olla yksi (pari, kolmoset, neloset) tai kaksi (kaksi paria, täyskäsi).

Kun parit on tarkistettu (eikä niitä löytynyt) tarkistetaan väri ja suora. Vaikka kunigasvärisuora onkin paras mahdollinen käsi, niin sitä ei kannata kuitenkaan tarkistaa yksistään, kun kerran sen saa yhdistettyä värin ja suoran haun tuloksista.

Värissä kaikkien korttien tulos on sama, kun (kortin arvo + 1) jaetaan kolmellatoista. Jako \:lla palauttaa kokonaisluvun, kuinka monta kertaa jakaja lukuun menee. Arvo + 1 taas pitää kuninkaat omissa maissaan.

Suorassa taas korttien arvot ovat (Kortti(1) Mod 13) + 4 = (Kortti(2) Mod 13) + 3 = (Kortti(3) Mod 13) + 2 = (Kortti(4) Mod 13) + 1 = IIF((Kortti(5) Mod 13) = 0, 13, (Kortti(5) Mod 13)). Kortti(1) + 4, koska ensimmäisen kortin pitäisi olla se pienin (riippuu tietysti mihin järjestykseen kortit on järjestänyt). IIF((Kortti(5) Mod 13) = 0, 13, (Kortti(5) Mod 13)) taas palauttaa kuninkaan.

Hakujen tuloksia varten tarvitaan muuttujia. Tehdään niitä varten omat muuttujat.

Public Type Pari
    Loytyy As Boolean 'True/False
    Arvo As Byte '1-13
    Kpl As Byte '2-4
End Type

Public Type Suora
    Loytyy As Boolean 'True/False
    Suurin As Byte '1-13
End Type

Public Type Vari
    Loytyy As Boolean 'True/False
    Maa As Byte '0-3 0:hertta, 1:pata jne.
End Type

'Käyttö
Dim LoytyneetParit(0 To 1) As Pari
Dim LoytynytVari As Vari
Dim LoytynytSuora As Suora

'täyskäsi
LoytyneetParit(0).Loytyy = True
LoytyneetParit(0).Arvo = 1
LoytyneetParit(0).Kpl = 3
LoytyneetParit(1).Loytyy = True
LoytyneetParit(1).Arvo = 13
LoytyneetParit(1).Kpl = 2

Noilla alkuun... ;)

Edit: Unohdin sanoa sen, että kortit kannattaa järjestää Mod-arvonsa mukaan (ei noin voi sanoa toim.huom.), että ässät on peräkkäin, sitten kakkoset, kolmoset jne.

Ozmosis [20.01.2005 12:58:25]

#

Eli tarkoitatte tällä korttien järjestämisellä suuruus järjestykseen että 1-4 = ässät 5-8 = kakkoset jne. ???

BadSource [20.01.2005 13:41:53]

#

joku kirjoitti:

Kortit on numeroitu siten että numerot 1-13 ovat herttoja numeroja järjestyksessä,14-26 patoja ja niin edelleen.

Ässät: 1,14,27,40 Kakkoset: 2,15,28,41 jne.

ezuli [20.01.2005 15:17:35]

#

Ei kun kädessä olevat kortit suuruusjärjestykseen. Silloin ne on helpompi tarkistaa.

Ozmosis [23.01.2005 17:51:34]

#

Mitenkähän tuon parien eli saman arvoisten korttien etsimisen voisi tehdä helpoiten? Itse mietin jotain tällaista: kortin1 arvo mod 13 = kortin2 arvo mod 13, kortin1 arvo mod 13 = kortin3 arvo mod 13... mutta näin mahdollisuuksia on useita ja tämä tarvii paljon if lauseita. Olisiko kenelläkään ideaa miten tämän voisi tehdä helpommin/lyhyemmin??

tuomas [23.01.2005 21:13:36]

#

Teet muutaman hyödyllisen silmukan, se riittää.

BadSource [24.01.2005 06:24:36]

#

Riippuu tietysti siitä, miten sinulla on korttien arvot tallessa. Jos ne on taulukossa, niin tehtävä on todella helppo. Jos ei, niin otan osaa...

Public Type Pari
    Loytyy As Boolean 'True/False
    Arvo As Byte '1-13
    Kpl As Byte '2-4
End Type

Dim LoytyneetParit(0 To 1) As Pari
Dim i As Integer, j As Integer
Dim kortit(4) As Integer

For i = 0 To 3
    For j = i + 1 To 4
        If (kortit(i) Mod 13) = (kortit(j) Mod 13) Then
            If Not LoytyneetParit(0).Loytyy Then
                LoytyneetParit(0).Loytyy = True
                LoytyneetParit(0).Arvo = (kortit(i) Mod 13)
                LoytyneetParit(0).Kpl = 2
            ElseIf LoytyneetParit(0).Arvo = (kortit(i) Mod 13) Then
                LoytyneetParit(0).Kpl = LoytyneetParit(0).Kpl + 1
            ElseIf Not LoytyneetParit(1).Loytyy Then
                LoytyneetParit(1).Loytyy = True
                LoytyneetParit(1).Arvo = (kortit(i) Mod 13)
                LoytyneetParit(1).Kpl = 2
            ElseIf LoytyneetParit(1).Arvo = (kortit(i) Mod 13) Then
                LoytyneetParit(1).Kpl = LoytyneetParit(0).Kpl + 1
            Else
                MsgBox "WTF? Jokin kusee...", vbCritical, "Error Terror"
            End If
        End If
    Next j
Next i

BadSource [24.01.2005 09:45:39]

#

Korjaus: Ennen viimeistä End If:iä pitää poistua loopista, ettei pareja lasketa useaan kertaan, jos on kyseessä kolmoset tai neloset. Eli:

            '...
            End If
            Exit For 'j
        End If
    Next j
Next i

Ozmosis [24.01.2005 15:15:07]

#

Kiitokset BadSourcelle! Sain parien etsinnän onnistumaan, mutta yksinkertaistin hieman ja laitoin vain yhden muuttujan kasvamaan 1:llä kun korttien arvo mod 13 ovat yhtäsuuret.

BadSource [24.01.2005 17:12:41]

#

Kaksi paria?

Ozmosis [26.01.2005 23:20:07]

#

Nyt ois pokeri valmis, jos jotaki kiinnostaa nähdä mitä sain aikaan niin pelin voi ladata: http://nicepage.bounceme.net/pokeri.zip
Kiitos vielä kaikille auttajille!

Blaze [26.01.2005 23:47:35]

#

Tuo ei tunnista suoraa: http://pp.kpnet.fi/blaze/temp/suora.png


Sivun alkuun

Vastaus

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

Tietoa sivustosta