Nim game

Nim game

ニム (nim) は、2人で行うレクリエーション数学ゲームの1つである。ルーツは古代中国からあるとされ、16世紀初めの西欧で基本ルールが完成したが、名前については、一般的に1901年ハーバード大学のチャールズ・L.バウトン (Charles L. Bouton) によって名付けられたとされる。

ゲームルール:

一人1個か2個か3個か4個だけ取れて、交互にやっていって、
最後の1個の石を取った人が負けとなります。

#include <stdio.h>

int main(void)
{
  int i, stone, n=0, turn=0;
  char name[2][256];

  printf("Input players' names\n");

  printf("player 1:");
  gets(name[0]);
  printf("player 2:");
  gets(name[1]);

  printf("\nnumber of stones:");
  scanf("%d", &stone);

  while (stone > 0){
    printf("\nThere are %d stones.\n", stone);
    printf("%s's turn! Take some stones:", name[turn]);
    while (n < 1 || n > 4) scanf("%d", &n); //取る石の数を制限1..4
    stone -= n;
    turn = 1 - turn;
    n = 0;
  }

  printf("\nNow winner is %s!!\n", name[turn]);

  // getch();
  // return 0;
}

課題

勝者の名前、対戦記録をファイルに記録するように改造してください。記録ファイル名は、nim.scrとする。
例:
====================================
Input players’ names
player 1:tom
player 2:mary

Now winner is mary!!
====================================
nim.c、nim.scr と実行画面のコピーを提出してください。

1 thought on “Nim game”

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


Related Post

CalculatorCalculator

電卓プログラムの考え方、書き方例 2つの数値の加減乗除をする電卓のようなプログラムを作ります。 簡単なようですが、多くの話題(データ型の選択、入力、判断や繰り返しなど)を含んでおり、学習に役立つ例題です。 今回は、プログラムをつくる流れも分かるように、どんなプログラムにするか検討するところから始めます。 それを処理手順に書き、C言語のコードに直します。 プログラムの機能を考える まずは、どんなプログラムにするかを考え、前提とすることや制約についても検討します。 数や演算の指定はどうする? たとえば「2 + 5」のように、「数値1 演算記号 数値2」の順に入力すると計算結果が表示されるようにする。 演算記号は、+, -, *, / のみとする。 繰り返して計算できるようにする 繰り返しの終了は、指定が上記の書式でなかったときとしよう。 […]

a C HTTP Clienta C HTTP Client

C#やJavaでは簡単にhttp Clientプログラムができる。C言語ではソケットを作成するところから必要です。またWindowsとLinux両方対応するように書いたのでプログラムが長くなる。 (bcc32で動作確認済み) プログラムは、最初にsocketを生成してWebサーバに接続し、テキスト形式でHTTPリクエストメッセージを作成してWebサーバに送信する。 HTTPリクエストメッセージは、複数行から成り立つ一連のデータ列。ここでいう1行とは、終端にCR(キャリッジリターン、16進の0x0d)とLF(ラインフィード、16進の0x0a)を持つデータの単位を示す。ほぼ、通常のテキスト・データの1行と等しくなる。メッセージ・ヘッダとメッセージボディ部に分かれ、両者は空行(単独のCR+LF)で分割される。 httpを理解するには、telnetで手入力でHTTPをしゃべってみるがいい方法。 https://www.softel.co.jp/blogs/tech/archives/263 まずプログラムをリストする: #include <stdio.h> /* printf, sprintf */ #include <stdlib.h> /* exit, atoi, malloc, […]

Dump fileDump file

DUMP で出力された内容を ダンプリスト と呼ぶ ダンプリスト左端はアドレス(ファイル先頭からの位置) ダンプリスト中央にある16進数(バイト)が列挙されてる部分がマシン語プログラム(バイトコード)を表している。 ダンプリスト右端は、バイトコードをキャラクタコードで表現したときの内容。ただしバイトで表現可能な数値はキャラクタコードの範疇を超えることがあるため、そのような場合はピリオドで表現される。 dump.c #include <stdio.h> int main(int argc, char* argv[]) { FILE *fp; unsigned char buf[16]; /* 読み込みバッファ […]