Pergunta

Estou desenvolvendo um jogo de pôquer em C #. No momento eu estou tentando obter a pontuação jogadores mão usando RegEx. Eu pesquisar na string (composto pelo terno cartões e número) e procurar fatos ou números para combinar com o RegEx. Se eu recebo 2 jogos, em seguida, o jogador tem um par, 3 jogos que ele tem 3 de um tipo.

Eu tenho 3 classes, no momento, uma classe Cartão (com número e naipe), uma classe Deck (que contém 52 cartas) e uma classe Mão que recebe cinco cartas do baralho.

classe Deck tem uma shuffleDeck(); classe lado tem as funções para calcular a pontuação (é nessas funções que estou usando RegEx).

Eu gerar a seqüência em que eu uso RegEx adicionando os 5 fatos e números que a mão tem.

Esta é uma boa ideia ou devo fazê-lo de outra forma, se sim, como?

Obrigado por sua ajuda

PS. Eu sou um dos programadores inexperientes que querem usar uma ferramenta recém-aprendido para tudo

Foi útil?

Solução

Eu não acho que uma regex é a forma adequada de lidar com isso. Você provavelmente deve estar usando uma representação mais sofisticada de uma mão de um string.

Outras dicas

Você não forneceu muitos detalhes, mas o que a partir do que eu li, eu suponho que você não está empurrando o OOP muito longe ...

Eu teria uma classe cartão que tem uma ocorrência de Posto e de classe terno. Eu teria, então, uma classe plataforma que alças baralhar / lidar ...

Eu teria, então, uma classe Mão que conteria sua mão de poker de n Cartão de objetos ...

Desta forma você pode construir regras para avaliar cada objeto lado, sendo, portanto, mais flexível e mais extensível no futuro ... dizem que se você quiser fazer um outro jogo de cartas / adicionar suporte para outra variante do poker ...

Usando expressões regulares para fazer tudo isso parece ser uma escolha muito pobre.

Eu concordo com os outros, que Regex parece ser uma má escolha. Pode funcionar com pares, 3 de um tipo, 4 de um tipo. No entanto, ele pode ficar meio complicado (ou impossível) uma vez que você começar a olhar para as mãos como flushes, straights, e 2 pares.

Eu acho que a melhor solução seria a de avaliar os cartões de melhor mão para pior mão, como mostrado aqui , e logo que a sua encontrar uma correspondência, então essa é a sua mão. Isso garante que você não confunda 4 de um tipo para 2 pares. Ou um straight flush para apenas uma reta, ou apenas um flush. Eu iria com mmattax e criar um objeto para o cartão, e um objeto para o lado, então você pode avaliar os cartões em cada mão para ver se eles atendem aos critérios necessários para cada lado.

Eu acho que os números primos são uma boa solução para isso. 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]

um cartão único é identificado por um número primo cor * um número primo rank. (Por exemplo, como dos diamantes: privilegiada = 7 * 61)

para uma plataforma única entiere ou combinaison são identificados pelo primeiro-* nobre * nobre * nobre * nobre

se houver um flush de diamantes, a 5 cartas do baralho primos ID must por divisble (mod = 0) pelo rubor de diamantes ID (7 ^ 5 por causa nobre diamantes cor é 7)

Usando uma corda para representar o lado parece ser uma má decisão. Minha recomendação seria usar um Enum para representar o terno e outro para representar o valor numérico do cartão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top