Last active
July 5, 2018 11:09
-
-
Save no1fushi/797aede26b7e210d41101521b29113ef to your computer and use it in GitHub Desktop.
Gist for juniors making binary games in C
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//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