マッチ棒取りゲームをプログラムにしてみよう。
【マッチ棒取りゲームのルール】
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