/*************************************************************************/
/**************日本語入力の練習になるかもしれないプログラム***************/
/*************************************************************************/
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>

int col(int x);			/*色を出す関数*/
void cls(void);			/*画面をクリアする関数*/
int wait(int x);		/*引数の秒数だけプログラムの進行を止める関数*/
void title(void);		/*タイトル表示の関数(関数にする必要があるのか)*/
int haiti(int x, int y);	/*表示する文字の位置を決める関数*/

#define BUN 20

main()
{
	char c[BUN][20]={"こんにちは",		/*この配列は画面に登場する課題の一覧です*/
		         "こんばんは",
		         "さようなら",
			 "我田引水",
			 "時間厳守",
			 "おはよう",
			 "関白宣言",
			 "電話相談室",
			 "品川駅前",
			 "横浜駅ビル",
			 "お母さん",
			 "トイザラス",
			 "晩御飯",
			 "笹かまぼこ",
			 "国語辞典",
			 "名作ドラマ",
			 "マガジン",
			 "時計仕掛け",
			 "布団カバー",
			 "田舎みそ"
	}; 
	char ch[20];				/*入力した文字はこの配列に格納されます。*/
	time_t time1, time2;			/*課題が表示された時間と入力し終わった時間*/
	double jikan;				/*上記の時間の差*/
	static double soujikan;			/*10課題の時間の総合計*/
	static int ten;				/*得点*/
	int i, saikou, n, toi=1;		/*iはchの添え字, saikouはhighから読み込んだ数値, toiは課題が今何問目かを示す。*/
	FILE *fp;				/*ファイルポインタ*/

	cls();					/*画面をクリアしてタイトルを水色で表示*/
	col(6);
	title();
	col(3);
	getch();

	cls();					/*簡単な説明を黄色の文字で表示する*/
	printf("緑色で、表示された文字と同じように入力してください。\n日本語入力はCTRL+XFERキーです。\n(push Enter key)\n");
	getch();
	cls();					/*画面をクリアしてSTARTを赤で表示2秒待つ*/
	col(1);
	haiti(10,30);
	printf("START!!\n");
	wait(2);
	col(7);

	srand((unsigned)time(NULL));		/*乱数を発生させiに代入*/
	i=0;
	i=rand()%BUN;
	for(n=0; n<10; n++){			/*10課題でるので10回ループ*/
		cls();
		printf("%d ", toi);
		col(2);
		puts(c[i]);			/*i番目の課題を画面へ出力*/
		col(7);
		time(&time1);			/*入力開始時間を取得*/
		gets(ch);

		if(ch[0]=='z'){			/*zを入力すれば終了*/
			break;
		}

		time(&time2);			/*入力の終わった時間を取得*/
	
		jikan=difftime(time2, time1);   /*かかった時間を取得*/

		if(strcmp(ch, c[i])==0){	/*課題の文字列cと入力した文字列chが同じなら正解として以下の得点を加算する*/
			col(6);
			printf("\n正解\n");
			col(7);
			printf("所要時間 %4.2f 秒\n", jikan);	/*入力にかかった時間を表示*/

			if(((int)jikan)<=1){		/*jikanが一秒以内なら+10point以下一秒ごとに-2pointで6秒以上はno point*/
				ten=ten+10;
				col(6);
				printf("+10point\n");
			}
			else if(1<((int) jikan) && ((int) jikan)<=2){
				ten=ten+8;
				col(6);
				printf("+8point\n");
			}
			else if(2<((int) jikan) && ((int) jikan)<=3){
				ten=ten+6;
				col(6);
				printf("+6point\n");
			}
			else if(3<((int) jikan) && ((int) jikan)<=4){
				ten=ten+4;
				col(6);
				printf("+4point\n");
			}
			else if(4<((int) jikan) && ((int) jikan)<=5){
				ten=ten+2;
				col(6);
				printf("+2point\n");
			}
			else{
				ten=ten+0;
				col(3);
				printf("No point\n");
			}
		}
		else{					/*課題の文字列cと入力した文字列chが違ったら-10point*/
			col(1);
			printf("\nちあうよ\n");
			ten=ten-10;
			printf("-10point\n");
		}
		toi++;					/*時間と課題の番号を加算*/
		soujikan=soujikan+jikan;
		col(1);
		printf("wait\n");
		col(7);
		wait(2);				/*次の課題まで2秒待つ*/
		i=rand()%BUN;
	}
	col(5);
	printf("総所要時間 %5.2f 秒\n", soujikan);	/*10問すべてにかかった時間と総合得点の画面への出力*/
	printf("%d点\n", ten);

	fp=fopen("high", "r");				/*最後にファイル"high"から読み込んだ数値をtenと比較*/
	fscanf(fp, "%d", &saikou);
	fclose(fp);

	col(2);
	if(ten>saikou){					/*もしtenのほうが大きかったらそちらをハイスコアとして画面とファイルに出力*/
		fp=fopen("high", "w");
		fprintf(fp, "%d", ten);
		fclose(fp);
		printf("現在のハイスコア %d 点\n", ten);
	}
	else{
		printf("現在のハイスコア %d 点\n", saikou);
	}

	col(7);
}

int col(int x)
{
	if(x<1 || x>7){
		printf("\x1b[0m");
	}
	printf("\x1b[0;%dm", 30+x);
	return;
}

void cls(void)
{
	printf("\x1b[2J");
}

int wait(int x)
{
	clock_t start, end;

	start=clock();
	while((end=clock())-start!=x){
		;
	}
	return;
}

void title(void)
{
	printf("\x1b[10;15H");
	printf("キーボードの練習になるかもしれないプログラム\n");
	printf("\x1b[11;22H");
	printf("push Enter key\n");
}

int haiti(int x, int y)
{
	printf("\x1b[%d;%dH", x, y);
	return;
}
もどる