Question

Je développe un jeu de poker en C #. Pour le moment, j'essaie d'obtenir le score des joueurs en utilisant RegEx . Je cherche la chaîne (composée de la combinaison de cartes et le numéro) et cherche des combinaisons ou des numéros correspondant au RegEx . Si je reçois 2 matchs, le joueur en a une paire, 3 matchs, il en a 3.

J'ai actuellement 3 classes: une classe de cartes (avec numéro et couleur), une classe de deck (qui contient 52 cartes) et une classe de mains qui reçoit cinq cartes du jeu mélangé.

La classe Deck a un shuffleDeck () ; La classe Hand a les fonctions pour calculer le score (c’est dans ces fonctions que j’utilise RegEx).

Je génère la chaîne sur laquelle j'utilise RegEx en ajoutant les 5 combinaisons et les numéros de la main.

Est-ce une bonne idée ou devrais-je le faire autrement, si oui, comment?

Merci pour votre aide

PS. Je suis l’un des programmeurs inexpérimentés qui souhaitent utiliser un outil récemment appris pour tout

Était-ce utile?

La solution

Je ne pense pas qu'un regex soit le moyen approprié de gérer cela. Vous devriez probablement utiliser une représentation plus sophistiquée d’une main que d’une chaîne.

Autres conseils

Vous n'avez pas fourni beaucoup de détails, mais d'après ce que j'ai lu, je suppose que vous ne poussez pas la POO très loin ...

J'aurais une classe Card qui a une instance Rank et Suit. J'aurais alors une classe de deck qui gère le brassage / la distribution ...

J'aurais alors une classe Hand contenant votre main de n objets de carte au poker ...

De cette façon, vous pouvez créer des règles pour évaluer chaque objet de la main, ce qui vous permet d’être plus flexible et plus extensible à l’avenir ... si vous voulez créer un autre jeu de cartes / ajouter du support pour une autre variante du poker ...

Utiliser des expressions régulières pour faire tout cela semble être un très mauvais choix.

Je suis d’accord avec les autres, que Regex semble être un mauvais choix. Cela pourrait fonctionner avec des paires, 3 d'un genre, 4 d'un genre. Cependant, cela peut devenir un peu délicat (ou impossible) une fois que vous commencez à regarder des mains comme des flushes, des lignes droites et 2 paires.

Je pense que la meilleure solution serait d’évaluer les cartes de la meilleure à la pire des mains, comme indiqué ici. , et dès que vous trouvez une correspondance, c'est votre main. Cela garantit que vous ne confondez pas 4 d'une sorte avec 2 paires. Ou une quinte flush pour juste une quinte ou une flush. Je voudrais utiliser mmattax et créer un objet pour la carte et un objet pour la main. Vous pouvez ensuite évaluer les cartes de chaque main pour voir si elles répondent aux critères requis pour chaque main.

Je pense que les nombres premiers sont une bonne solution pour cela. considérer:

//            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]

une carte unique est identifiée par un nombre premier de couleur * un nombre premier de rang. (par exemple, à partir de diamants: prime = 7 * 61)

donc un jeu ou une combinaison unique et unique est identifié par prime * prime * prime * prime * prime

s'il y a une couleur de diamants, l'ID principal du paquet de 5 cartes doit être divisé par (mod = 0) par la couleur de diamants ID (7 ^ 5 parce que la couleur des diamants prime est 7) ??

Utiliser une chaîne pour représenter la main semble être une mauvaise décision. Ma recommandation serait d'utiliser un Enum pour représenter le costume et un autre pour représenter la valeur numérique de la carte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top