Archief - [VB.NET]Texas hold em game

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

dirtybolle

Legacy Member
ik ben op dit moment begonnen aan een texas hold em spel in vb.net, heb alle mogelijke kaart images in een array geplaats, ook de overeen stemmende waarde/kleur zitten in een array en ik kan de flop turn en river kaarten laten zien (op dit moment gebeurd dat met een knop, maar de functies zijn er dus die kunnen in het spel zelf worden uitgevoerd)

dit is mijn code: Plaatscode.be - Plaats je code en deel ze met anderen!

nu had ik een paar vragen:

-is de manier waarop ik werk met de kaarten bewaren enz correct om in dit soort spel te gebruiken
-hoe kan ik best gaan checken op mogelijke combinaties (1 pair, 2 pair, 3 of kind ....)

alvast bedankt

Curahee Q

Legacy Member
Zou ik ook wel interessant vinden, ben ook bezig met een pokergame in Java. Trouwens, in visual basic .NET kan je de dll gebruiken van patience enzo hé voor u kaarten.

dirtybolle

Legacy Member
ja daar was ik laatst ook achter gekomen maar ik had die hele cards code al van een project voor school (blackjack) daarmee dat ik daar mee ben verder gegaan

Yngwie

Legacy Member
Ik zou het eerder OO aanpakken en een Kaart klasse voorzien met een image, waarde, kleur...

Dat gaat het imo makkelijker maken om achteraf handen te gaan evalueren.

dirtybolle

Legacy Member
ik maak een classe kaart aan, en de eigenschappen zijn dan image waarde kleur

maar hoe check ik dan al dat er geen dubbele kaarten komen?
(ik dacht weer een aparte array te maken en elke kaar een nummer te geven (miss ook als eigenschap)

en hoe ga ik de combinaties checken ?

SharkyXTS

Legacy Member
Om de waarde van de kaarten te berekenen kan je bv. gebruik maken van een histogram. Je telt hoeveel keer je een A, 2, 3, 4, ... Q, K hebt en sorteert dit dan van hoog naar laag. Aan de hand van het aantal van de twee hoogst genoteerde kan je dan afleiden welke hand ze hebben.

Iets analoogs kan je doen voor de suits (kleur), op die manier kan je snel zien wanneer iemand een (straight) flush heeft.

Links:
Post #3 in Need help writing a program to classify a poker hand
Nick's Blog: Algorithm for evaluating poker hands

Zapp

Legacy Member
In elk geval, maak inderdaad een klasse "Kaart" aan ofzo. Maak dan een Generic List<Kaart> aan (System.Collections.Generic) en steek daar al uw 52 kaarten in.
Je kan nu de kaarten shufflen (best eens opzoeken hoe je best shuffeld, ik meen me te herinneren dat al je kaarten één voor één afgaan in een foreach en dan wisselen met een random andere kaart uit de list, niet random genoeg is...)

Dan kan je tenslotte speler 1 kaart 1 geven, speler 2 kaart 2, enzoverder. Gewoon een tellertje bijhouden.

Hoe je controleert op de beste hand, ben ik zelf nog niet 100% uit, vooral straight flushes maken het dat beetje moeilijker :) Maar imo kan dat ook niet zo moeilijk zijn...

dirtybolle

Legacy Member
ok, ik ga nu al eens proberen uit te vissen hoe zo'n generic list aan te maken en te vullen en om dat een kaart te trekken. Als het gelukt is post ik ook wel even de code, ma ik verwacht eerder problemen :p:D

EDIT: maar die generic list kan ik die al laten vullen in mijn class of het best in de load van mij form doen ?

Zapp

Legacy Member
in C# maar you'll get the idea

Class Kaart
{
public int Waarde {get;set;} // 1-13, 1=A, 11=J, 12=Q, 13=K
public int Kleur {get;set;} // 1=koeken, 2=klaveren, ... hier eventueel een enum voor maken
public string Tekening {get;set;} // de grafische voorstelling van uw kaart

// Je kan uiteraard ook nog een constructor voorzien om je class makkelijk op te vullen...
}

class Form1
{
List<Kaart> kaarten = new List<Kaart>();
private void Page_Load(object sender, EventArgs e)
{
// Hier dan elke kaart maken en in uw List-object dumpen, alzo:
Kaart nieuweKaart = new Kaart();
kaarten.Add nieuweKaart;
// Dit ga je dus 52 keer moeten doen, OF je kan met 2 for's werken ofzo... Eentje voor de soort, de tweede voor de waarde, dan zit je wel in de knoei met je tekeningen...
}
}

edit: hmm, best met een constructor werken voor de kaart-class, dan kan je je list gewoon opvullen aldus:
kaarten.Add(new Kaart(1, 1, "hartenaas.jpg"));

Curahee Q

Legacy Member
Zoals eerder vermeld ben ik daar ook mee begonnen in Java. En i.v.m. dat shufflen doe ik het als volgt.

Een shuffle functie van Java is echt niet random genoeg, vandaar dat ik zelf 2 shuffles heb geschreven.
- Bridge Shuffle
- Hindu Shuffle

Hier en daar wat random waardes toegevoegd en ik vind dat mijn deck echt wel goed geshuffled is. Wat ik ook nog ga doen is, als het programma wordt afgesloten de volgorde van het deck op te slaan zodat basisdeck ook al geshuffled is. Nog een keer de bridge shuffle erdoor halen gevolgd door een hindu shuffle en je hebt best een goed random deck. In ieder geval toch beter dan de shuffle methodes van programmeertalen zelf.

dirtybolle

Legacy Member
echt bedankt dit heeft me heel goed op weg geholpen

op dit moment heb ik de klasse kaart gemaakt en een constructor met 3 variabelen (waarde, kleur en image)

in de load van het formulier worden alle kaarten in een list gestoken (en ik heb juist een getest om waarde terug uit de list te krijgen en dat verloopt ook vlekkeloos)

Nu moet ik eens gaan bekijken hoe kaarten te schudden. een kaart trekken opzich is geen probleem dat is gewoon een random nummer

maar nu moet ik ook nog gaan bij houden welke kaarten zich al op tafel of in de hands zich bevinden, nu ik dacht direct omdat in een aparte array te gooien zodat ik ook makkelijk kan checken bij het geven van een nieuwe kaart als deze kaart al "bestaat" op de tafel, of zou ik dit anders moet doen ?

EDIT:
@/V\@X |3!@GG!: die code heb ik uit een game van blackjack gehaalt wat we in de les gemaakt hadden enja de leerkracht deed het zo :D

@Curahee Q: zou ge het soms zien zitten om de java code van u shuffle functies hier te posten of via pm te sturen zodat ik ze eens kan bekijken ?:)

Zapp

Legacy Member
Ge moet geen random kaart uit het deck halen om ze "op tafel te leggen", ge moet gewoon kaarten pakken, en dan i++ doen zodat je de volgende keer de volgende kaart pakt...
Niet over-engineeren eh ;)

dirtybolle

Legacy Member
ohja das waar, alleen dat shufflen is genoeg want ze liggen dan toch al door elkaar, ja daar had ik nu es niet aan gedacht :D

maar ik heb een shuffle functie gevonden op het internet maar die werken daar in met een array hoe kan ik die code nu omzetten voor die te gebruiken met een list want ik heb een zitten zoeken en ik vond niet echt een functie zoals array.length bestaat niet voor list's ik vond wel iets als list.lastindexof() maar die kreeg ik niet aan de praat en ik weet ook niet als die daar wel voor dient

EDIT: laat maar, ik hoef helemaal de length niet te achterhalen want er zijn ma 52 kaarten dus 51 plaatsen :D

Zapp

Legacy Member
kaarten.Length() geeft je het aantal items

De code die je daar laat zien lijkt me nu niet de meest interessante shuffle-code, als ik het goed lees, gaat hij 52 keer 2 willekeurige kaarten verwisselen. Wat als hij kaarten 1 tot 10 nu eens willekeurigerlei overslaat? OK je kan het aantal "shuffles" als parameter meegeven, maar toch lijkt het me niet erg... veilig. Google some moar! :D


Edit: for future reference, als je nog in .Net gaat programmeren (ik weet niet of het in nog andere talen bestaat, doe al een 4 jaar niks dan C#), maar generic collections zijn IMO veel beter dan arrays. Gebruik nagenoeg nooit nog een array. Alleen eens voor een string.Split ofzo.

dirtybolle

Legacy Member
ja ik heb de functie zo wel eens bekeken, en redelijk veilig lijkt me ze ook niet echt alleen miss als ge bij het script een 30 keer laat schudden ofzo mja er moet een betere manier zijn, dus effe verder zoeken :D

EDIt: heb juist wel eens getest met 20 keer schudden en alle posities van de list doorlopen van boven naar onder en de shuffle lijkt me wel redelijk goed te zitten. Maar ik ga deze nu even tijdelijk laten zitten en dan nu verder denken voor een eerste test spel met 1 speler tegen de pc. is niet zo heel moeilijk denk ik, alleen de user kaarten en de pc kaarten in een array (of list omdat je juist de tip gaf dat deze "beter" was) en dan een check functie bouwen, maar die ga ik ook nog eens moeten opzoeken op google :D

tips bij het bouwen van deze test game zijn altijd welkom :D

EDIT: dit is mijn huidige code: Plaatscode.be - Plaats je code en deel ze met anderen!
ik heb 3 functies aangemaakt voor de flop, turn en river kaart die worden ook getoont, nu ben ik er even nog niet helemaal uit hoe ik het beste op de combinaties ga checken. die histogram die iemand hier boven had voorgesteld leken me wel wat maar ik weet nog niet goed hoe er aan te gaan beginnen

Zapp

Legacy Member
And again with the over-engineering :)

Vertel me eens, buiten de naam, wat is het verschil tussen je functies 'turn' en 'river'? Het idee van een functie is om code te beperken :p Kan je gelijk je 'flop' er ook uitzwieren en een nieuwe functie maken, desnoods met een parameter 'int aantalKaartenTeTrekken', ik zeg maar iets.

dirtybolle

Legacy Member
de hand checker werkt bijna helemaal maar nu wilde ik even weten hoe ik het beste de 5 beste kaarten kan selecteren, via de manier van enkel de hoogste kaarten te nemen werkt niet want er kunnen aas, koning, 10, 9, 5 op tafel liggen maar je kan een paar 2's hebben dusja

als iemand me hier nog even verder mee kan helpen
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan