- ベストアンサー
C言語でビンゴマシンを作成しよう!
- 大学のゼミ旅行でのビンゴ大会に備えてC言語でビンゴマシンを作成しています。
- マシンの出る数字を自分で指定できるようにし、デジタルのビンゴマシンのようにルーレットも回せるようにする予定です。
- ただ現状では1~75までのランダムな数字を出せる程度であり、文字の表示や最新の数字の表示に苦戦しています。プログラミングに詳しい方からのアドバイスをお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
さっき紹介したサイトに参考になりそうなのが幾つか有ったので紹介しておきます。 「C言語サンプルプログラム(オープンソース)/佐伯英子技術士事務所(情報工学)」 http://saeki-ce.xsrv.jp/Cgengo.html 参考になりそうなもの。 画面時計(アスキーアート) サイコロ(乱数)
その他の回答 (2)
- zwi
- ベストアンサー率56% (730/1282)
これはコンソールアプリケーションですから工夫しないと文字の大きさでメリハリを付けることはできません。 ただ、文字を組み合わせて大きな数字の様に見せかけたり、ルーレットが回っているように見せることは可能です。かなりグラフィックを使ったものよりは見劣りますけど一種のアスキーアートです。 試しに書くと ■■■■ ■ ■■■■ ■□□■ ■■■■ こんな感じでしょうか。 □はブラウザなので仕方なく使っています。 アスキーアートアニメのごく簡単なサンプルです。 http://saeki-ce.xsrv.jp/C_src/anime01.html
- zwi
- ベストアンサー率56% (730/1282)
現状のソースコードを見せてもらえますか?
補足
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #define MIN 25 //最小数 #define MAX 100 //最大数 int InputNumber(int *mnu_counter); int Bingo(int *number); int main() { int number = 0; do { if(number == 0) { printf("表示する最大数を入力してください。:"); } else { printf("数値が不正です。もう一度入力してください。:"); } //最大数入力 if(InputNumber(&number) != 0) { exit(-1); } //画面クリア system("cls"); if(number == 0) { number = -1; } //不正な数値がなくなるまでループ }while((number < MIN) || (number > MAX)); //ビンゴ関数 if(Bingo(&number) != 0) { exit(-1); } return 0; printf("Copyright Mochi\n"); } //数値入力 int InputNumber(int *mnu_counter) { char *ch; if((ch = (char *)malloc(256 * sizeof(char))) == NULL) { printf("Malloc Error!!\n"); return 1; } scanf("%d",&*mnu_counter); gets(ch); free(ch); return 0; } //ビンゴ出力 int Bingo(int *number) { int i = 0, j = 0, k = 0, tmp = 0, *data, *flg; char ch = 'y'; //乱数初期化 srand((unsigned)time(NULL)); //配列確保 if((data = (int *)malloc((*number + 1) * sizeof(int))) == NULL) { printf("Malloc Error!!\n"); return 1; } if((flg = (int *)malloc((*number + 1) * sizeof(int))) == NULL) { printf("Malloc Error!!\n"); return 1; } //初期化 for(i = 0; i < *number + 1; i++) { data[i] = 0; flg[i] = 0; } //yを入力の間もしくは最大値まで数値を出力 do { printf("次の番号を表示しますか?(Y / N):"); ch = _getch(); if((ch != 'n') && (ch != 'N')) { //画面クリア system("cls"); //フラグリセット k = 0; //同じ数値がでなくなるまでループ do { //乱数発生 tmp = rand() % *number + 1; //出たことがない数字だった場合 if(flg[tmp] == 0) { //フラグを1にする。 flg[tmp] = 1; //データを保存 data[j] = tmp; //カウンタを1プラス j++; //抜け出すためのフラグを立てる k = 1; } }while((flg[tmp] != 1) || (k == 0)); //今までの番号出力 for(i = 0; i < j; i++) { //適度に改行 if((i > 0) && (i % 25 == 0)) { printf("\n"); } printf(" %d",data[i]); } printf("\n"); } }while((ch != 'n') && (ch != 'N') && (j < *number)); //開放 free(flg); free(data); return 0; } これが現時点でのソースコードです。 よろしくお願いします。
お礼
詳しく回答いただきありがとうございます。 回答で載せてくださったものを参考にしながら挑戦してみます。