【baseball.cのソースコード】
/*
* 野球のカウントを数えるゲームのプログラム
* baseball.c
*/
#include <stdio.h>
#include <stdlib.h>
#define BUF_SIZE 256
/*
* 自作のbool型の定義
*/
typedef enum {
false, /* 0 */
true /* 1 */
} bool;
/*
* ユーザー定義関数の関数原型宣言
*/
void print_title(void);
void play(void);
void print_result(void);
bool retry(void);
/*
* グローバル変数
*/
int ball, strike;
/*
* メイン関数
*/
int main(void)
{
while (1) {
/* 表題・説明 */
print_title();
/* プレー */
play();
/* 結果の表示 */
print_result();
/* 操作を続けるかどうかの選択 */
if (!retry())
break;
}
return EXIT_SUCCESS;
}
/*
* 表題・説明を表示する関数
*/
void print_title(void)
{
strike = ball = 0;
printf("【野球のカウントを数えるゲーム】\n");
printf("打者としてプレーしてください。\n");
printf("ただし、ヒットにはなりません。\n\n");
}
/*
* プレーをする関数
*/
void play(void)
{
char buf[BUF_SIZE], ch, zz;
while (ball < 4 && strike < 3) {
while (1) {
printf("ボール(b)ですか、ストライク(s)ですか、");
printf("ファウル(f)ですか? ");
fgets(buf, sizeof buf, stdin);
sscanf(buf, "%c%c", &ch, &zz);
if (ch == 'b' && zz == '\n') {
ball++;
printf("%dボール、%dストライク。\n\n", ball, strike);
break;
} else if (ch == 's' && zz == '\n') {
strike++;
printf("%dボール、%dストライク。\n\n", ball, strike);
break;
} else if (ch == 'f' && zz == '\n' && strike < 2) {
strike++;
printf("ファウル。\n");
printf("%dボール、%dストライク。\n\n", ball, strike);
break;
} else if (ch == 'f' && zz == '\n' && strike == 2) {
printf("ファウル。\n");
printf("%dボール、%dストライク。\n\n", ball, strike);
break;
} else {
printf("無効な入力です。\n");
printf("b、s、fのいずれかを入力してください。\n\n");
continue;
}
}
}
}
/*
* 結果を表示する関数
*/
void print_result(void)
{
if (ball == 4)
printf("フォアボール。\n\n");
else if (strike == 3)
printf("ストライクスリー、バッターアウト。\n\n");
}
/*
* 操作を続けるかどうかを選択する関数
* true: 繰り返す、false: 終了する
*/
bool retry(void)
{
bool ret;
char buf[BUF_SIZE], ch, zz;
while (1) {
printf("\n続けますか?(y/n) ");
fgets(buf, sizeof buf, stdin);
sscanf(buf, "%c%c", &ch, &zz);
if ((ch == 'y' || ch == 'Y') && zz == '\n') {
printf("\n+++++\n\n");
ret = true;
break;
} else if ((ch == 'n' || ch == 'N') && zz == '\n') {
ret = false;
break;
}
printf("無効な入力です。\n");
printf("yまたはnを入力してください。\n");
}
return ret;
}
C:\Users\skonishi\Documents>baseball
【野球のカウントを数えるゲーム】
打者としてプレーしてください。
ただし、ヒットにはなりません。
ボール(b)ですか、ストライク(s)ですか、ファウル(f)ですか? b
1ボール、0ストライク。
ボール(b)ですか、ストライク(s)ですか、ファウル(f)ですか? s
1ボール、1ストライク。
ボール(b)ですか、ストライク(s)ですか、ファウル(f)ですか? f
ファウル。
1ボール、2ストライク。
ボール(b)ですか、ストライク(s)ですか、ファウル(f)ですか? b
2ボール、2ストライク。
ボール(b)ですか、ストライク(s)ですか、ファウル(f)ですか? f
ファウル。
2ボール、2ストライク。
ボール(b)ですか、ストライク(s)ですか、ファウル(f)ですか? b
3ボール、2ストライク。
ボール(b)ですか、ストライク(s)ですか、ファウル(f)ですか? s
3ボール、3ストライク。
ストライクスリー、バッターアウト。
続けますか?(y/n) y
+++++
【野球のカウントを数えるゲーム】
打者としてプレーしてください。
ただし、ヒットにはなりません。
ボール(b)ですか、ストライク(s)ですか、ファウル(f)ですか? s
0ボール、1ストライク。
ボール(b)ですか、ストライク(s)ですか、ファウル(f)ですか? f
ファウル。
0ボール、2ストライク。
ボール(b)ですか、ストライク(s)ですか、ファウル(f)ですか? b
1ボール、2ストライク。
ボール(b)ですか、ストライク(s)ですか、ファウル(f)ですか? f
ファウル。
1ボール、2ストライク。
ボール(b)ですか、ストライク(s)ですか、ファウル(f)ですか? b
2ボール、2ストライク。
ボール(b)ですか、ストライク(s)ですか、ファウル(f)ですか? f
ファウル。
2ボール、2ストライク。
ボール(b)ですか、ストライク(s)ですか、ファウル(f)ですか? b
3ボール、2ストライク。
ボール(b)ですか、ストライク(s)ですか、ファウル(f)ですか? f
ファウル。
3ボール、2ストライク。
ボール(b)ですか、ストライク(s)ですか、ファウル(f)ですか? b
4ボール、2ストライク。
フォアボール。
続けますか?(y/n) n