質問

C#でポーカーゲームを開発しています。現時点では、 RegEx を使用してプレーヤーのハンドスコアを取得しようとしています。文字列(カードのスーツと番号で構成される)を検索し、 RegEx に一致するスーツまたは番号を探します。私が2試合を取得した場合、プレーヤーはペアを持ち、3試合は彼が3種類を持っています。

現時点では、カードクラス(番号とスーツ)、デッキクラス(52枚のカードを含む)、シャッフルデッキから5枚のカードを取得するハンドクラスの3つのクラスがあります。

Deckクラスには shuffleDeck()があります。 Handクラスには、スコアを計算する関数があります(これらの関数にはRegExを使用しています)。

手にある5つのスーツと数字を追加して、 RegEx を使用する文字列を生成します。

これは良いアイデアですか、それとも別の方法で行う必要がありますか?

ご協力ありがとうございます

PS。私はすべてに新しく学んだツールを使用したい未経験のプログラマーの一人です

役に立ちましたか?

解決

正規表現がこれに対処する適切な方法だとは思わない。おそらく、文字列よりも洗練された手の表現を使用する必要があります。

他のヒント

あなたは詳細を提供していませんが、私が読んだことから、OOPをあまり遠くまでプッシュしていないと思います...

ランクとスーツのクラスインスタンスを持つカードクラスがあります。そうすると、シャッフル/ディールを処理するデッキクラスができます...

その後、n個のカードオブジェクトのポーカーハンドを含むHandクラスを作成します...

このようにして、各ハンドオブジェクトを評価するルールを構築することができます。したがって、将来的にはより柔軟で拡張性が高くなります。

これをすべて行うために正規表現を使用するのは、かなり貧弱な選択のようです。

Regexは悪い選択のように思えるので、他の人にも同意します。ペア、3種類、4種類のペアで動作する可能性があります。ただし、フラッシュ、ストレート、2ペアなどのハンドを見始めると、ややトリッキー(または不可能)になります。

最善の解決策は、カードをベストハンドからワーストハンドまで評価することだと思います。こちら、一致が見つかったらすぐにそれがあなたの手になります。これにより、4を2ペアと間違えないようにします。または、ストレートまたはフラッシュのみのストレートフラッシュ。 mmattaxを使用して、カードのオブジェクトとハンドのオブジェクトを作成し、各ハンドのカードを評価して、各ハンドに必要な基準を満たしているかどうかを確認します。

素数はそのための良い解決策だと思います。 考慮してください:

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

一意のカードは、色の素数*ランクの素数で識別されます。 (たとえば、ダイヤモンドのように:プライム= 7 * 61)

したがって、全体のユニークなデッキまたは組み合わせは、プライム*プライム*プライム*プライム*プライム*プライムによって識別されます

ダイヤモンドのフラッシュがある場合、5カードデッキのプライムIDは、ダイヤモンドIDのフラッシュによる除算(mod = 0)でなければなりません(ダイヤモンドカラープライムは7であるため、7 ^ 5)

手を表すために文字列を使用することは、悪い判断のように思えます。私の推奨事項は、Enumを使用してスーツを表し、別のEnumを使用してカードの数値を表すことです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top