2

まず、私はまだ C に慣れていないので、提案があれば教えてください (特に配列の処理について)。

BlackJack ハンドを C で保存したいのですが、ハンドまたはカードは文字列でなければならないという結論に達しました。これは、カードが character:A, J, Q, Kまたは numbers:1, 2.. 10の両方である可能性があるためです。ここで、10 は実際には 2 文字の文字列である必要があります。

ここで、ハンドを構成するカードを次のような配列に格納してみました。

char* hand;
hand[1] = "A";
hand[2] = "2";

問題は10、配列の 1 つではなく 2 つのインデックスを使用する です。これを回避する方法は、カードごとに 1 つずつ、5 つの文字列 (ブラックジャック ハンドの最大カード数) を持つ構造体を作成することです。しかし、何らかの理由で何千枚ものカードを持ちたい場合はどうすればよいでしょうか? その場合、手を保管する最良の方法は何でしょうか?

4

5 に答える 5

2

このサイトは面白いかもしれません。

http://www.computerpokercompetition.org/

彼らは毎年 AI ポーカー コンテストを開催しています。彼らのサーバーは C で書かれており、上記のサイトからコードをダウンロードできます。

基本的に、カードは整数として保存されます。これは、カードを処理する最も効率的な方法です。デッキには52種類のカードしかありません。ジョーカーがいる場合はさらに。したがって、これを 0 から 51 までの整数値にマップできます。整数のカード番号ではあまり情報が得られないため、次の関数を使用してカードが何であるかを出力します。ランクとスイートに基づいて文字列を作成していることに注意してください。

int printCard( const uint8_t card, const int maxLen, char *string  )
{
  if( 3 > maxLen ) {
    return -1;
  }

  string[ 0 ] = rankChars[ rankOfCard( card ) ];
  string[ 1 ] = suitChars[ suitOfCard( card ) ];
  string[ 2 ] = 0;

  return 2;
}
于 2013-06-06T07:01:07.977 に答える
0

最善の方法は一つではないと思います。ただし、char *hand;文字列の配列は定義しません。を使用できchar *hand[5]、10 は 2 つのインデックスを取りません。または、 を使用char hand[5]して、10 を「0」や「T」などの 1 文字として保存することもできます。

于 2013-06-06T06:52:42.903 に答える