マッチ棒取りゲームをプログラムにしてみよう。
【マッチ棒取りゲームのルール】
match.cへのリンクを右クリック→「リンクを名前を付けて保存」
→ 自分で決めたディレクトリ(~/C-lang/ など)に保存する。
#include <stdio.h>
#include <stdlib.h>
void query(char* mesg, char* buf, int len)
{
/* char* mesg は、文字列のアドレスを受け取る仮引数宣言 */
/* char* buf も同様 */
printf("%s", mesg); /* 第1引数の文字列を表示 */
fgets(buf, len, stdin); /* 標準入力からbufへ読み込む */
}
int main()
{
int match = 17; /* 最初のマッチの本数 */
int toru, com_toru; /* 取る本数, 人間とコンピュータ用 */
char line[100]; /* 読み込みバッファ100文字分 */
puts("1〜3本の範囲でマッチ棒を取ります。最後の1本を取った方の負け!");
while (match > 0) { /* マッチの残り本数がある限り繰り返す */
printf("あなたの番: マッチ棒が%d本あります\n", match);
query("何本取りますか?(1〜3): ", line, sizeof line);
toru = atoi(line); /* 読み込んだ文字列を整数に直す */
if (toru < 1 || toru > 3) { /* 1〜3の範囲にない場合 */
puts("1〜3の範囲で取って下さい.");
continue; /* 次のループに進んでやりなおし */
}
match -= toru;
if (match < 1) { /* マッチ棒が0以下になった */
puts("最後の1本を取りました。あなたの負けです! や〜い");
break; /* breakでwhileループ終了 */
}
printf("わたしの番: マッチ棒が%d本あります\n", match);
com_toru = 4-toru; /* コンピュータの取る本数決定 */
printf("私は%d本取りました。\n", com_toru);
match -= com_toru;
if (match < 1) { /* マッチ棒が0以下になった ら */
puts("最後の1本を取りました。わたしの負けです! くやち〜〜!!");
break; /* 負けといって終了。でも負けない */
}
}
}
新しく登場した関数やキーワードについての補足をしておこう。
puts関数
文字列を(標準出力に)表示し、最後に改行を付ける。
puts(文字列);
continue
ループ(whileやfor)の途中で利用し、
ループ本体の残りをスキップし、次のループ判定に突入する。
break
ループ(whileやfor)の途中で利用し、
ループを終了する。
以下の手順で、コンパイル&実行。
% gcc -o match match.c % ./match