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