Hit & Blow
1.ルール
- 出題者は、0から9までの互いに異なる数字を使った
4桁の数を正解として用意し、解答者から隠しておく。
- 解答者は、解を予想し、質問をする。
- 出題者は、質問と正解の数を比較して、
- Hit数
- 同じ数字が同じ桁に出現する回数
- Blow数
- 同じ数字が違う桁に出現する回数
をヒントとして解答者に与える。
- 解答者はなるべく少ない質問で正解を当てる。
2.ゲームの進行例
正解:4832
| 回数 | 質問 | Hit | Blow |
| 1 | 0123 | 0 | 2 |
| 2 | 2345 | 0 | 3 |
| 3 | 3467 | 0 | 2 |
| 4 | 4238 | 2 | 2 |
| 5 | 4832 | 4 | 0 |
3.遊びかたの例
- 2人で互いに問題を作る。
- 先行、後攻を決めて、交互に質問をする。
- 質問数が少ない方、つまり先に正解を見つけた方が
勝ちとなる。
4.出題プログラム
Hit&Blowの出題プログラムを作るメリットとして、
以下の項目が挙げられる。
- 1人でも遊べる。
- Hit数とBlow数の計算ミスがない。
- 貧弱なユーザインターフェースでも十分遊べる。
4.1.出題プログラムの機能
出題プログラムの機能は以下のようなものである。
- 問題を作成する。
- 質問に答える。
4.1.1.乱数の生成
問題の作成にあたって乱数の生成が必要である。
cで乱数を作るためには、以下のようにすればよい。
/* 乱数の生成プログラム */
/* Dec 15,1997 by K.OKANO */
#include < stdlib.h > /* 標準ライブラリ Standard Library */
#include < time.h > /* 時刻に関するライブラリ */
void main(void){
double x;
srand( (unsigned int)time(NULL) ); /* 現在時刻を乱数の種にする */
x=(double) rand()/RAND_MAX; /*rand():0からRAND_MAXまでの乱数の生成*/
printf("RAND_MAX=%d\n",RAND_MAX);
printf("random(0-1.0)=%lf\n",x); /* 0から1までの乱数 */
printf("random(0-10.0)=%lf\n",x*10.0); /* 0から10までの乱数 */
}
5.課題提出
- 5.1.提出方法
- 電子メールで、okano@ece.numazu-ct.ac.jpに送る。
- 5.2.提出期限
- 1998年1月16日(金)まで。
5.2.1.UNIXのコマンドでメールを送る方法
% mail -s kadai okano@ece.numazu-ct.ac.jp < hb.c
-s の後に題名 、その後に宛先、<を付けた後にファイル名。
6.追加機能:スコアをのこす。
出題プログラムに、スコアを付ける機能を追加する。
スコアを残す為には、ファイルの入出力をしなければならない。
6.1.ファイル入出力
例:score.datというファイルに、Helloという文字列を書き込むプログラム。
#include <stdio.h>
void main(void){
double x;
FILE *fp;
fp = fopen("score.dat","w");
fprintf(fp,"Hello\n");
x=3.14;
fprintf(fp,"x=%lf\n",x);
}