Skip to content

Instantly share code, notes, and snippets.

@no1fushi
Last active July 5, 2018 11:09
Show Gist options
  • Save no1fushi/797aede26b7e210d41101521b29113ef to your computer and use it in GitHub Desktop.
Save no1fushi/797aede26b7e210d41101521b29113ef to your computer and use it in GitHub Desktop.
Gist for juniors making binary games in C
//2進数を10進数タイムアタック
//ToDo: スキャンで答えを書く、合否の判定をする、ブレイクで次の問題かもう一度答えさせる。
/*課題: startとかfirstとかに目的(EやS)以外の文字が入力されたときのエラー処理
説明文見づらい*/
#define _CRT_SECURE_NO_WARNINGS // CounterPlan: warning C4996: 'scanf': This function or variable may be unsafe.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main (void){
char first,start;
int que, quot, quenum, j;
int ans = 0,count = 0, tf = 0;
int propque[8] = {0}, ren[8] = {0};
srand((unsigned)time(NULL));
// First Desc
printf ("二進数を十進数タイムアタック!!!\nまず始めに、二進数と十進数について説明していくよ!\nまず、十進数からだ!\n");
printf ("十進数というのは普段僕らが使っている数字だよ!0~9まで数字があって、9+1になると繰り上がって二桁になるよね!\nこういうのを十進数と言うんだ!\n次は二進数についてだよ。\n");
printf ("二進数というのは、0~1までしか数字がないんだ!\nだから1+1になると繰り上がって「1」「0」になるよ。\n");
printf ("それじゃあさっそく、やりたいモードを選んでね!各モードの大文字の英語を打ってね。\n簡単モー(E)\n普通モード(N)\n超エキサイティングモード(B)\n");
scanf ("%c", &first);
// Easy Mode
if(first=='E'){
printf ("簡単モードに挑戦だね!\nではルール説明をするよ。ここでは二進数から十進数に変換してもらうよ。\n");
printf ("十進数では「1+1」は2だね。これを二進数にすると、「01+01=10」になるんだ。\n一桁目が2になると同時に繰り上がって「10」になるよ。\n");
printf ("これを回数を重ねた物が二進数だよ。それじゃぁやってみよう!回答は十進数でね。\nそれじゃあ「S」で開始だ!\n\n");
rewind(stdin); // Mem Clean
scanf ("%c", &start);
if(start=='S'){
for(quenum = 0;quenum <= 5 ;quenum++){
tf = 0;
printf("問題はこれだぁ!!\n\n");
// Gene Que
for(que = 0;que <= 7;que++){
propque[que] = rand()%2;
printf("%d", propque[que]);
}
printf ("\n\nさぁ、この答えはいくつかな?\n\n答え→");
scanf ("%d", &ans);
while(1){
ren[count] = ans % 2;
quot = ans/2 ;
ans = quot;
count+= 1;
if (ans < 1){
count = 0; /* 前のソースにはこれがなかった.
初期化してなかったから前のcountが引き継がれていて、正解が正解にならなかった.*/
break;
}
}
// Flip "ans"
for(j = 0;j < 4;j++){
int t = ren[j];
ren[j] = ren[8 - j -1];
ren[8 -j -1] = t;
}
for(j =0;j <= 7;j++) if( ren[j] == propque[j] ) tf++;
if(tf == 8){
printf("\n正解だ!");
}else{
printf("\n残念!違うゾ!");
quenum--;
}
}
}
}else if(first == 'N'){
printf ("普通モードに挑戦だね!\nではルール説明をするよ。ここでは十進数から二進数に変換してもらうよ。\n");
printf ("十進数では「1+1」は2だね。これを二進数にすると、「01+01=10」になるんだ。\n一桁目が2になると同時に繰り上がって「10」になるよ。\n");
printf ("これを回数を重ねた物が二進数だよ。それじゃぁやってみよう!\nそれじゃあ「S」で開始だ!");
}else if(first == 'B'){
printf ("もはや君に助言などいらないだろう...\nそれじゃあ「S」で開始だ!");
}
return (0);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment