Pregunta

Estoy desarrollando un juego de poker en C #. En este momento estoy tratando de obtener la puntuación de la mano de los jugadores usando RegEx . Busco la cadena (compuesta por el palo y el número de cartas) y busco trajes o números que coincidan con el RegEx . Si consigo 2 partidos, entonces el jugador tiene un par, 3 partidos tiene 3 de una clase.

Tengo 3 clases en este momento, una clase de cartas (con número y palo), una clase de mazo (que contiene 52 cartas) y una clase de mano que recibe cinco cartas del mazo barajado.

La clase de cubierta tiene un shuffleDeck () ; La clase de mano tiene las funciones para calcular la puntuación (es en estas funciones que estoy usando RegEx).

Genero la cadena en la que uso RegEx agregando los 5 trajes y números que tiene la mano.

¿Es una buena idea o debería hacerlo de otra manera? Si es así, ¿cómo?

Gracias por tu ayuda

PS. Soy uno de los programadores inexpertos que quieren usar una herramienta recién aprendida para todo

¿Fue útil?

Solución

No creo que una expresión regular sea la forma adecuada de lidiar con esto. Probablemente debería usar una representación más sofisticada de una mano que una cadena.

Otros consejos

No ha brindado muchos detalles, pero a partir de lo que he leído, asumo que no está presionando mucho el OOP ...

Tendría una clase de Tarjeta que tiene instancias de clase Rango y Juego. Entonces tendría una clase de mazo que maneja barajando / repartiendo ...

Luego tendría una clase de Mano que contendría su mano de póquer de n objetos de Cartas ...

De esta manera, puede crear reglas para evaluar cada objeto de la mano, así será más flexible y más extensible en el futuro ... diga si desea crear otro juego de cartas / agregar soporte para otra variante de póker ...

Usar expresiones regulares para hacer todo esto parece ser una opción bastante mala.

Estoy de acuerdo con los demás, que Regex parece ser una mala elección. Puede funcionar con pares, 3 de una clase, 4 de una clase. Sin embargo, puede ser un poco complicado (o imposible) una vez que empieces a mirar manos como rubores, rectas y 2 pares.

Creo que la mejor solución sería evaluar las cartas de la mejor mano a la peor, como se muestra aquí , y tan pronto como encuentres una coincidencia, entonces esa es tu mano. Esto asegura que no confunda 4 de una clase para 2 pares. O una escalera de color para una escalera, o simplemente una escalera. Iría con mmattax y crearía un objeto para la tarjeta y un objeto para la mano, luego puede evaluar las tarjetas en cada mano para ver si cumplen con los criterios requeridos para cada mano.

Creo que los números primos son una buena solución para eso. considerar:

//            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 tarjeta única se identifica con un número primo de color * un número primo de rango. (por ejemplo, a partir de diamantes: prime = 7 * 61)

para que un entiere único deck o combinaison son identificados por prime * prime * prime * prime * prime

si hay una descarga de Diamantes, la ID de los números primos de la baraja de 5 cartas debe dividirse (mod = 0) por la descarga de los diamantes (7 ^ 5 porque la coloración de los diamantes es 7)

Usar una cuerda para representar la mano parece una mala decisión. Mi recomendación sería usar un Enum para representar el Traje y otro para representar el valor numérico de la tarjeta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top