Tips

【C言語で】#12 BINGO Machineを改造してみよう【ビンゴを作ろう】

【C言語で】#12 BINGO Machineを改造してみよう【ビンゴを作ろう】

C言語でBINGOを作ろう #12 BINGO Machineを改造してみよう

C言語でBINGOを作ろう!

C言語でBINGOを作ろう!

CUI上で動くビンゴゲームの完成目指してひっそりとプログラムの勉強を始めました。前回はBINGO Machineの試作1号機を作りました。今回はそれを改良します。

前回はタイトルに何回目か書き忘れたYO!!

開発環境

開発環境はこちらをご覧ください。

 

本記事は以上の開発環境を前提に説明を行います。

 

BINGOの記事一覧はこちら

 

BINGO Machineを作ろう

BINGO Machineとは

BINGO Machineとは、ビンゴの抽選の機械です。それ前回も聞いたYO!!

試作1号機はこんな↓感じでした。

BINGOMachine01

す、数字が大きすぎる・・・w

試作1号機を改造

 

試作1号機では抽選される数字が大きすぎます。そこで、抽選される数字の範囲を制限したいと思います。

前回使用したrand()関数は、そのまま使うと出てくる非常に大きな数字も出てきます。そこで、ちょっと小細工をします。

↓のような感じです。

int num = rand() % 10; // 出てきた数字が0~9までの10個の数字に変わる

%演算子は割り算の余りを求める演算子です。上の例の場合、10で割ったあまりを求めます。10で割った場合余りは0~9のいずれかなので、rand()関数で選ばれた数字は0~9のいずれかの数字に変わる、というわけです。

注意点としては、10で割った場合、出てくる数値は0~9の10個の数字になるという点です。割った数自身(例の場合、10)は出てこないので注意してください。

 

それではこれを使って早速試作1号機を改造してみましょう。

 

 

BINGO Machine 試作3号機

BINGO Machine 試作3号機

2号機どこ行った

2号機は前回の宿題だったので、今回は3号機を作成しましょう。
プログラム(sample12_00.c)

#include <stdio.h>
#include <stdlib.h>

int main(void){
  srand(7);
  int num = 0;
  printf("抽選を開始します。\r\n");
  while(1){
    printf("(Enterを押してください)\n");
    char ch = getc(stdin); //キーボードからなにか入力するまで画面を一時停止する。
    num = rand() % 75; //0~74になるように変更
    printf("%02dが出ました。\r\n", num);
  }
  return 0;
}

実行結果

>gcc -o BINGOMachine03.exe sample12_00.c
>BINGOMachine03.exe
抽選を開始します。
(Enterを押してください)

61が出ました。
(Enterを押してください)

22が出ました。
(Enterを押してください)

これで抽選結果に大きな数字が出なくなりました。めでたしめでたし・・・?
でも、よく見るとこれ↓

BINGOMachine03

同じ数字が何回も出てる・・・!?

しかも、初期SEEDが同じだと同じ数字が順番どおりに出る。。。やった、イカサマし放題www

毎回初期SEED変更するのめんどくさい。。。


 

おまけ

初期SEEDを乱数にしようとしても、その乱数を作るためには初期SEEDが必要。。。という、鶏と卵状態になってしまいます。 そこで、手軽に使える実装としては、現在時刻を用いる方法があります。 ということで、次回は現在時刻を使って乱数の初期SEEDを設定します。 良かった、今回は宿題じゃない。。。w

宿題コーナー

夏が終わってからが本当の夏休m(ry 宿題のコーナーです。

前回の宿題と解答例

前回の宿題は、「抽選を10回だけ行うBINGOMachine02.cを作成してください。」でした。今回は同様、短い・・・w

解答は以下の通りです。※解答例のファイル名はhomework11.cとなっていますが、BINGOMachine02.cでもコンパイル可能です。ま、間違えたわけじゃないんだからね!!

 

解答例(homework11.c)

#include <stdio.h>
#include <stdlib.h>

int main(void){
  int i = 0;
  int num = 0;
  srand(7);
  printf("抽選を開始します。\r\n");
  for(i = 0; i < 10; i++){
    printf("(Enterを押してください)\n");
    char ch = getc(stdin); //キーボードからなにか入力するまで画面を一時停止する。
    num = rand();
    printf("%02dが出ました。\r\n", num);
  }
  printf("抽選を終了します。\r\n");
  return 0;
}

実行結果※表示される数値は初期SEEDによって変わります。

>gcc homework11.c -o BINGOMachine02.exe
>BINGOMachine02
抽選を開始します。
(Enterを押してください)

61が出ました。
(Enterを押してください)

17422が出ました。
(Enterを押してください)

15215が出ました。
(Enterを押してください)

(中略)

20344が出ました。
抽選を終了します。
今日の宿題

sample12_00.cを改造して、0~74が出て抽選を10回だけ行うBINGOMachine04.exeを作成してください。あれ、これ前回の宿題と今日やったこと組み合わせれば簡単w

 

次回は宿題で作る(はず)の試作4号機を改造して抽選される数字の初期SEEDを自動的に設定してみます。

 

BINGOの記事一覧はこちら

 

実践力が身につくC言語講座 連載リンク

競技プログラミングをイメージしたライブラリ活用講座
競技プログラミング風-標準Cライブラリ入門 連載

アルゴリズムをマスターして技術力アップ!
実践アルゴリズム講座 連載

パズルゲームの解析をテーマにしたC++講座
ゲーム解析プログラミング 連載

Recent News

Recent Tips

Tag Search