Domanda

Sto sviluppando un gioco di poker in C #. Al momento sto cercando di ottenere il punteggio della mano dei giocatori usando RegEx . Cerco la stringa (composta dal seme e dal numero delle carte) e cerco semi o numeri corrispondenti al RegEx . Se ricevo 2 partite, allora il giocatore ha una coppia, 3 partite ne ha 3 di un tipo.

Al momento ho 3 classi, una classe di carte (con numero e seme), una classe del mazzo (che contiene 52 carte) e una classe della mano che ottiene cinque carte dal mazzo mischiato.

La classe del mazzo ha un shuffleDeck () ; La classe della mano ha le funzioni per calcolare il punteggio (è in queste funzioni che sto usando RegEx).

Genero la stringa su cui utilizzo RegEx aggiungendo i 5 semi e numeri che ha la mano.

È una buona idea o dovrei farlo in un altro modo, se sì, come?

Grazie per il tuo aiuto

PS. Sono uno dei programmatori inesperti che vogliono utilizzare uno strumento appena appreso per tutto

È stato utile?

Soluzione

Non penso che una regex sia il modo appropriato di affrontarlo. Probabilmente dovresti usare una rappresentazione più sofisticata di una mano rispetto a una stringa.

Altri suggerimenti

Non hai fornito molti dettagli, ma per quanto da quello che ho letto, suppongo che non stai spingendo l'OOP molto lontano ...

Vorrei una classe di carte con istanze di classe Rango e seme. Avrei quindi una classe di mazzo che gestisce la mescolanza / gestione ...

Avrei quindi una classe Hand che conterrebbe la tua mano di poker di n oggetti Card ...

In questo modo puoi costruire regole per valutare ogni oggetto mano, diventando così più flessibile e più estendibile in futuro ... dì se vuoi creare un altro gioco di carte / aggiungere il supporto per un'altra variante del poker ...

L'uso delle espressioni regolari per fare tutto ciò sembra essere una scelta piuttosto scadente.

Concordo con gli altri sul fatto che Regex sembra una cattiva scelta. Potrebbe funzionare con coppie, 3 di un tipo, 4 di un tipo. Tuttavia, potrebbe diventare un po 'complicato (o impossibile) una volta che inizi a guardare le mani come vampate, rettilinei e 2 coppie.

Penso che la soluzione migliore sarebbe quella di valutare le carte dalla migliore alla peggiore, come mostrato qui e non appena trovi una corrispondenza, questa è la tua mano. Questo assicura che non si confonda 4 di un tipo per 2 coppie. O una scala reale solo per una scala, o solo una scala. Vorrei andare con mmattax e creare un oggetto per la carta e un oggetto per la mano, quindi puoi valutare le carte in ogni mano per vedere se soddisfano i criteri richiesti per ogni mano.

Penso che i numeri primi siano una buona soluzione per questo. considerare:

//            D H S C    
colors =    [7,5,3,2]

//           A  Q  K  J  T  9  8  7  6  5  4  3  2    
ranks =     [61,59,53,43,41,37,31,29,23,19,17,13,11,61]

una carta univoca è identificata da un numero primo di colore * un numero primo di rango. (ad esempio, A partire da Diamanti: prime = 7 * 61)

quindi un intero mazzo o combinazione unica sono identificati da prime * prime * prime * prime * prime

se c'è una scala di Diamanti, l'ID dei numeri primi del mazzo da 5 carte deve essere divisibile (mod = 0) per la scala di Diamanti ID (7 ^ 5 perché il colore dei diamanti primo è 7)

Usare una stringa per rappresentare la mano sembra una decisione sbagliata. La mia raccomandazione sarebbe di usare un Enum per rappresentare il seme e un altro per rappresentare il valore numerico della carta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top