前回の続きです。
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 続行するには何かキーを押してください・・・
続きは次回で。