6
votes

Une meilleure conception de cadre de poker c # poker?

J'écris un cadre de poker en C # et je n'aime pas la conception que j'ai actuellement. Mon objectif est d'avoir un moteur de jeu pouvant jouer de multiples agents AI les uns contre les autres en mode batch très rapidement et de jouer à plusieurs agents d'AI par rapport à plusieurs humains (probablement via un client Silverlight). J'aimerais garder l'efficacité élevée, mais maintenir la flexibilité, par exemple, il devrait être capable de jouer à des jeux comme Limit Hold'em, sans limite Hold'em, limite 7-Card Stud, etc.

Ma conception actuelle est plutôt clunky et inflexible:

  • Handhistory: contient toutes les informations sur la main en cours (joueurs dans les paris fabriqués, etc.)
  • iPlayer: chaque joueur définit une méthode de gettage (historique de la main).
  • Gameengine: Définit une méthode Play (Handinfo Info) qui renvoie un objet déroutant.
  • PotManager: gère le pot et détermine la quantité de chaque joueur à appeler et combien ils peuvent gagner (par exemple, s'ils ont des piles inégales et sont tout-en-in).
  • Betmanager: gère les paris et détermine quand un cycle de paris est terminé.

    La classe Handinfo contient toutes les informations sur la manière de configurer la main. La méthode de jeu ressemble à quelque chose comme ceci: xxx

    Les problèmes se posent car il y a tellement de petites choses à considérer comme ramasser les stores, etc. Les cours de Pot et de Bet Manager deviennent un cauchemar et sont invariablement criblés de bugs. En outre, ma conception du moteur prend en charge un type de jeu (Hold'em) par opposition aux autres.

    Mon classement principal est d'abord pour l'efficacité, car le moteur est utilisé principalement comme un simulateur AI sur des milliards de mains. Cependant, j'aimerais penser qu'il existe une manière plus élégante que cela pourrait être fait.


0 commentaires

3 Réponses :


1
votes

J'ai vraiment aimé l'interface iopponent écrit par John Gietzen pour le Battleship Ai Tourney. Je regarderais son cadre pour une inspiration.

Quel est le meilleur cuir de bataille AI?

Oh et j'ai récemment vu ceci: http: //visualsturogallery.msdn. Microsoft.com/EN-US/BA4638AD-A2D2-49E5-AE46-94E0F747CAE0?SRC=Vside


0 commentaires

3
votes

Ma première pensée est, code de lisibilité et manque de redondance en premier, et optimiser les performances (que je suppose, c'est ce que vous entendez par efficacité) en dernier. Il est généralement difficile de prévoir que le cou de la bouteille de performance sera, et une application légèrement plus lente est meilleure qu'une buggy ou un système immunitaire. Il est facile d'utiliser un produit comme DotTrace lorsque vous êtes prêt à optimiser, si vous le trouvez ISN 't assez rapide.

En ce qui concerne votre désir d'ajouter une fonctionnalité, je vous recommande de devenir meilleur à refactoring . C'est l'un des principaux croyances de TDD: écrivez le moins de code pour compléter un morceau de fonctionnalité, puis refroidissez tout code sent. Et en utilisant TDD, vous pouvez vous assurer que lorsque vous implémentez, disons, Stud, votre Hold'em fonctionne toujours.

Un bon endroit pour commencer avec votre refactoring, car il semble que vous rencontriez déjà des problèmes de maintenabilité, c'est essayer de vous assurer que chaque classe a une seule responsabilité (le premier des Solid Popers ). Votre exemple de méthode a de nombreuses responsabilités: parier, traiter, historique du jeu, etc.


2 commentaires

En plus de la publication de @ Lachlan ci-dessus, je suggérerais d'optimiser le manque de redondance.


Je suis d'accord avec "d'abord le faire fonctionner, puis le rendre rapide" en général. Toutefois, si la performance est une partie importante (comme dans de nombreuses simulations), il est généralement utile de faire quelques estimations (ce qui aura besoin de la fréquence à laquelle?) Et peut-être écrire un prototype pour obtenir une première estimation sur la durée de la durée de certaines choses. Parce que parfois, une belle conception oo est entendue pour devenir vraiment rapide. Et j'ai peur, parfois, vous avez besoin exactement de cela. Mais s'il vous plaît vérifier si c'est vraiment le cas pour vous!



0
votes

Un exemple d'un évaluateur de Texas Hold'em TeXas Hold'em 7 et 5 est prêt à être trouvé ici et expliqué davantage ici . Cela pourrait vous aider avec la performance. Tous les commentaires bienvenus à l'adresse e-mail qui y sont trouvés.


0 commentaires