マッチ棒取りゲーム

マッチ棒取りゲームをプログラムにしてみよう。

【マッチ棒取りゲームのルール】

match.cへのリンクを右クリック→「リンクを名前を付けて保存」
→ 自分で決めたディレクトリ(~/C-lang/ など)に保存する。

match.c

#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;                    /* 負けといって終了。でも負けない */
    }
  }
}

補足

新しく登場した関数やキーワードについての補足をしておこう。

実行

以下の手順で、コンパイル&実行。

% gcc -o match match.c
% ./match

目次