11-26 poker - 1

{c101345 クラス 11 \atop 公益太郎}

平成 15 年 11 月 24 日

1 問題

課題中の問題番号 1 番

• ツーペアの判定関数を作る

を選択した。

2 作成したプログラム

今回作成したプログラムは以下の通り。

#include <stdio.h>
#include <stdlib.h>
#define CARDS   52       /* 難しいのでジョーカー抜き */
typedef struct { /* 1 枚のカードの構造体 */
  char *suit;           /* スート */
  int  number; /* 数字 */
  char *name; /* 読み名 */
} aCard;

〜〜〜〜〜見本なので中略〜〜〜〜〜

int main(int argc, char *argv[])
{
  Cards deck, human, com;

int i, result;
initialize(&deck);
shuffle(&deck);

/* 人間に 5 枚配る */

for (human.n=0; human.n<5; human.n++) {
  memcpy(&human.card[human.n], &deck.card[--deck.n], sizeof (aCard));
}
puts("あなたの手は");
for (i=0; i<human.n; i++) {
  dispcard(human.card[i]);
}
result = judge(&human);
printf("result=%d, 役は%s\n", result, hand[result]);
}

3 実行例

実際にプログラムを動かしてみた。以下のようになった。

[figure]

% ./poker

あなたの手はダイヤの A ハートの Q ダイヤの 4 クラブの K クラブの 7

sum=5
result=0, 役はハイカード
% ./poker

あなたの手はハートの Q ダイヤの K ハートの K ダイヤの J ハートの J

sum=4
result=1, 役はツーペア

[figure]

4 プログラムの解説

今回の課題で改良を加えたのは以下の部分である。

int is_twopair(Cards *c)
{
  :

〜〜〜〜〜見本なので省略〜〜〜〜〜

  :
}

twopair() 関数によって手持のカードがツーペアかどうか判定するようにした。ツーペアと判定する場合にはワンペア判定関数と似た考え方を適用する。うがあああほげえええ、じょじょじょじょ〜。

5 感想

実際のポーカーをやったことが無い (おい)。しかしこれを機に練習して一儲けしたい (ウソ)。