前回の続きです。
4、9.手札をソートする
関数名 SortHand 戻り値 なし 引 数 手札 機 能 手札を番号の昇順でソートする |
void SortHand(Card hand[HAND_NUM]) { int i; int j; Card work; for (i = 0; i < HAND_NUM - 1; i++) { for (j = 0; j < HAND_NUM - 1; j++) { if (hand[j].number > hand[j + 1].number) { work = hand[j]; hand[j] = hand[j + 1]; hand[j + 1] = work; } } } } |
ここでも、必要な変数は関数内で宣言します。
<sample program 144-01>
int main(void)
{
Card deck[CARD_NUM];
Card hand[HAND_NUM];
srand((unsigned int)time(NULL));
/* デッキの初期化 */
InitializeDeck(deck);
/* デッキのシャッフル */
ShuffleDeck(deck);
/* 手札を配る */
DealCard(deck, hand);
/* 手札をソートする */
SortHand(hand);
return 0;
}
|
5、7、10.手札を表示する
関数名 ShowHand 戻り値 なし 引 数 手札 機 能 手札を表示する |
void ShowHand(const Card hand[HAND_NUM]) { int i; for (i = 0; i < HAND_NUM; i++) { switch (hand[i].suit) { case 0: printf("スペード:"); break; case 1: printf("ハ ー ト:"); break; case 2: printf("ダ イ ヤ:"); break; case 3: printf("ク ラ ブ:"); break; } printf("%2d", hand[i].number); if (hand[i].selectFlag == 1) { printf(" *\n"); } else { printf("\n"); } } } |
この関数は手札を変更する際にも使いますので、選択フラグのことも考えて作ります。
当然、引数の中身に変更はありませんので「const」を付けます。
<sample program 144-02>
int main(void)
{
Card deck[CARD_NUM];
Card hand[HAND_NUM];
srand((unsigned int)time(NULL));
/* デッキの初期化 */
InitializeDeck(deck);
/* デッキのシャッフル */
ShuffleDeck(deck);
/* 手札を配る */
DealCard(deck, hand);
/* 手札をソートする */
SortHand(hand);
/* 手札を表示する */
ShowHand(hand);
return 0;
}
|
<実行結果>
ク ラ ブ: 2 スペード: 2 スペード: 6 ダ イ ヤ: 8 ハ ー ト:12 続行するには何かキーを押してください・・・
やっと結果が表示出来るようになりました。
6.変更するカードを選択する
関数名 SelectCard 戻り値 なし 引 数 手札 機 能 変更するカードを選択する 0〜4の入力で選択(フラグを立てる) 5の入力で関数から戻る |
void SelectCard(Card hand[HAND_NUM]) { int select; for (;;) { do { scanf("%d", &select); } while (select < 0 || select > HAND_NUM); if (select == HAND_NUM) { break; } if (hand[select].selectFlag == 0) { hand[select].selectFlag = 1; } else { hand[select].selectFlag = 0; } /* 手札を表示する */ ShowHand(hand); } } |
この関数では、変更するカードを選択する度にカードを表示し直しますので、関数内でShowHand関数を呼び出します。
<sample program 144-03>
int main(void)
{
Card deck[CARD_NUM];
Card hand[HAND_NUM];
srand((unsigned int)time(NULL));
/* デッキの初期化 */
InitializeDeck(deck);
/* デッキのシャッフル */
ShuffleDeck(deck);
/* 手札を配る */
DealCard(deck, hand);
/* 手札をソートする */
SortHand(hand);
/* 手札を表示する */
ShowHand(hand);
/* 変更するカードを選択する */
SelectCard(hand);
return 0;
}
|
<実行結果>
ダ イ ヤ: 7 ハ ー ト: 8 ク ラ ブ: 8 ダ イ ヤ:11 スペード:12 0 ダ イ ヤ: 7 * ハ ー ト: 8 ク ラ ブ: 8 ダ イ ヤ:11 スペード:12 3 ダ イ ヤ: 7 * ハ ー ト: 8 ク ラ ブ: 8 ダ イ ヤ:11 * スペード:12 5 続行するには何かキーを押してください・・・
続きは次回で。