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??
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ä...
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.
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 = 2Noilla 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.
Eli tarkoitatte tällä korttien järjestämisellä suuruus järjestykseen että 1-4 = ässät 5-8 = kakkoset jne. ???
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.
Ei kun kädessä olevat kortit suuruusjärjestykseen. Silloin ne on helpompi tarkistaa.
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??
Teet muutaman hyödyllisen silmukan, se riittää.
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 iKorjaus: 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 iKiitokset 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.
Kaksi paria?
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!
Tuo ei tunnista suoraa: http://pp.kpnet.fi/blaze/temp/suora.png
Aihe on jo aika vanha, joten et voi enää vastata siihen.