Creare Videopoker con C#!!

lunedì 23 maggio 2011 - 00.01
Tag Elenco Tags  C#  |  Windows XP  |  Visual Studio 2010  |  Firefox

xcibox Profilo | Newbie

Salve a tutti! sono nuovo sia del forum che di c#, lo sto studiando in questi mesi.

Nella noia pomeridiana mi sono messo a creare un videopoker con C# per allenarmi, sono arrivato però ad un punto che mi mette in crisi ( nonchè il piu importante eheheheh ) ovvero la comparazione dei punti!

il mio programma in breve fa questo:
genero il mazzo e lo metto in una lista, lo mescolo, e poi partendo dalla prima posizione della lista mescolata prendo le carte necessarie
ho una classe CARTA che è composta da due oggetti char, valcarta e seme.
ho 7 variabili ti tipo CARTA che chiamo FLOP1,FLOP2,FLOP3,TURN,RIVER,MANO1,MANO2 (che per semplicità di stampa a video converto anche in stringhe se interessa)

a questo punto il programma è composto da:

una lista<CARTA> chiamata mazzo con ovviamente dentro tutte le 52 carte esistenti
una lista<CARTA> chiamata carteintavola con dentro 5 carte ( FLOP1,FLOP2,FLOP3,TURN,RIVER )
una lista<CARTA> chiamata carteinmano con dentro 2 carte ( MANO1,MANO2 )

dopo tutto ciò mi sono accorto che non ho la minimai idea di come poter fare per controllare se in tavola+mano ci sia il punto e quale sopratutto!!!
se uso le variabili stringa dovrei creare manualmente tutte le possibili combinazioni di punto esistenti nel poker e poi comparare.
poi mi era venuto in mente di usare il compare tra liste ma non riesco a capire molto bene come funziona...e sopratutto come articolarlo!!
se qualcuno ha idee migliori o riesce a spiegarmi come dovrei farlo sono aperto ad opinioni!!

GRAZIE!!!

------------------ P.S.-------------- PER CHI NON CONOSCE IL VIDEOPOKER hold'em------------------------

2 carte in mano e il flop in tavola ( 3 carte ) - IL COMPUTER CHIEDE DI PUNTARE O FOLDARE
2 carte in mano e il flop in tavola ( 3 carte ) + TURN (1 carta) - IL COMPUTER CHIEDE DI PUNTARE O FOLDARE
2 carte in mano e il flop in tavola ( 3 carte ) + TURN (1 carta) + RIVER (1 carta) - IL COMPUTER CHIEDE DI PUNTARE O FOLDARE

VINCITA = almeno coppia di jack = (sommapuntate * 1)
VINCITA = tris = (sommapuntate * 3)
VINCITA = poker = ( Sommapuntate * 4)
etc
etc
etc

shinji76 Profilo | Newbie

Ciao,
sono nuovo di questo forum (mi sono registrato pochi minuti fa) ma visto che l'argomento è interessante volevo spiegarti come ho gestito la cosa.

Ho affrontato qualche volta problemi simili, anche se con linguaggi diversi da C#.

Un modo veloce è quello di cercare i punti a partire dal più alto, scrivendo una piccola funzione/metodo per ogni tipologia di punto:
-scala colore/reale
-poker
-full
-colore
-scala
-tris
-doppia coppia
-coppia
-carta alta (ma questa non ti serve se cerchi almeno due Jack

(ognuna di queste funzioni non arriva a 20/30 righe di codice)

Appena trovi il punto non serve che vai a vedere le funzioni più in basso.

Sostanzialmente ogni carta è un oggetto con una serie di proprietà: valore (da 2 a 13), seme (diciamo da 1 a 4)

L'asso è un po' una rottura di scatole nelle scale in quanto può essere sia la carta più bassa che quella più alta.

Quando fai i controlli le 7 carte (5 del board + 2 in mano) sono praticamente tutte allo stesso piano.

Questa soluzione è sicuramente molto semplice e veloce da implementare.

Spero di averti messo nella direzione giusta.
Shinji

Brainkiller Profilo | Guru

>Nella noia pomeridiana mi sono messo a creare un videopoker con
>C# per allenarmi, sono arrivato però ad un punto che mi mette
>in crisi ( nonchè il piu importante eheheheh ) ovvero la comparazione
>dei punti!

Molto interessante il tuo post. Anche io mi sono avvicinato al poker recentemente e mi ha appassionato sia dal punto di vista del gioco che dalla logica delle applicazioni delle poker room tanto che ne volevo aprire una poi ho visto i costi di licenza e ho messo via l'idea

>dopo tutto ciò mi sono accorto che non ho la minimai idea di
>come poter fare per controllare se in tavola+mano ci sia il punto
>e quale sopratutto!!!

Secondo me i consigli che ti ha dato Shinij sono corretti, fare così anche io.

>poi mi era venuto in mente di usare il compare tra liste ma non
>riesco a capire molto bene come funziona...e sopratutto come
>articolarlo!!

Sicuramente questa è la strategia migliore se vuoi fare il figo.
quindi si va nel campo dell'overloading degli operatori, nel tuo caso potrebbero essere > e <
Quindi puoi andare a verificare se un set di carte è maggiore o minore di un altro in termini di punteggio.
Dentro bisognerà implementare la logica indicata da Shinij quindi tutte le combinazioni/regole del poker.
Quindi anche in presenza di due scale potrai capire quale delle due vince sull'altra.
Io partirei da qui se vuoi studiare qualcosa sull'overloading:
http://msdn.microsoft.com/en-us/library/aa288467.aspx
Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

xcibox Profilo | Newbie

Problema risolto!

Creo una lista per ogni punto possibile, ogni volta che esce una carta la vado a mettere nelle liste che riguardano quella carta, tramite list.Count() analizzo la lista piu completa che sarà il punto migliore, con qualche for e qualche if stampo il risolutato! :)

Ora passo all'inserimento del multiplayer
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5