?include "random.h--"
?define DELITEL 32
?include "timer.h--"
?include "ftoa.h--"

?define NUMVIVAT 5
?define NUMFALS  6
?define NUMTEST 10

char vivat1="Здорово!";
char vivat2="Ну ты даешь!";
char vivat3="А еще быстрее можешь?";
char vivat4="А ну давай, наяривай...";
char vivat5="Во замочил!";
char fals1="Фальстарт!";
char fals2="Не спеши!";
char fals3="Не лезь поперек батьки в пекло!";
char fals4="Какой-то ты нервный.";
char fals5="Ну чего ты дергаешся?";
char fals6="Упал, отжался!";
byte Finish;
char start;
int vivat={#vivat1,#vivat2,#vivat3,#vivat4,#vivat5};
int fals={#fals1,#fals2,#fals3,#fals4,#fals5,#fals6};
int numt;
int ireakc=1,jreakc=1;
word mn,mx;
word starttime,deltatime;
float mint,sred;
float maxt,trez;
dword summatime;

void hReakc()
{
	RANDOMIZE();	//установить генератор
	mint=0;
	maxt=0;
	numt=0;
	sred=0;
	trez=0;
	Finish=FALSE;
	summatime=0;
	mn=0xffff;
	mx=0;
	KBCLEAR();
	MoClear();
	INSTTIMER();
	start=0;
	hReakcShow();
}

void rReakc()
{
	DEINSTTIMER();
	KBCLEAR();
	MoClear();
}

void hReakcHandler()
word tic;
char m1[48];
{
	IF(Event.what==evMouse)GOTO kk2;
	if(Event.what==evKeyboard){
		AX=Event.keyCode;
		IF(AX==k_esc){
			Finish=TRUE;
			return;
		}
kk2:
		if(start==0){
			whide();
			AX=RAND()%NUMFALS;
			AX=AX*2;
			BX><AX;
			hInfoWindow(fals[BX],idAccent);
			WAIT(18);
			rInfoWindow();
			wunhide();
			summatime+=6;	//НАКАЗАНИЕ ЗА ФАЛЬСТАРТ
			IF(numt!=0){
				sred=summatime/582.607/numt;
				ftoan(float sred,#m1,3);
				Say(18,20,_scheme.schNormalText[Window.scheme],#m1);
			}
			KBCLEAR();
			MoClear();
			start++;
			hReakcShow();
			hReakcShow();
		}
		else{
			tic=schot;
			numt++;
			summatime+=tic;
			IF(tic<mn)mn=tic;
			IF(tic>mx)mx=tic;
			mint=mn/582.607;
			maxt=mx/582.607;
			trez=tic/582.607;
			sred=summatime/582.607/numt;
			INTTOSTR(numt,#m1);
			Say(14,20,_scheme.schNormalText[Window.scheme],#m1);
			ftoan(float trez,#m1,3);
			vprints(15,20,8,0,_scheme.schNormalText[Window.scheme],#m1);
			ftoan(float mint,#m1,3);
			vprints(16,20,8,0,_scheme.schNormalText[Window.scheme],#m1);
			ftoan(float maxt,#m1,3);
			vprints(17,20,8,0,_scheme.schNormalText[Window.scheme],#m1);
			ftoan(float sred,#m1,3);
			vprints(18,20,8,0,_scheme.schNormalText[Window.scheme],#m1);
			whide();
			AX=RAND()%NUMVIVAT;
			AX=AX*2;
			BX><AX;
			hInfoWindow(vivat[BX],idNormal);
			WAIT(18);
			rInfoWindow();
			wunhide();
			KBCLEAR();
			MoClear();
			hReakcShow();
			IF(numt==NUMTEST)Finish=TRUE;
			ELSE hReakcShow();
		}
	}
}

void Waitr()
{
	AX=timer()-starttime;
	IF(AX>deltatime)Event.what=evMessage;
}

void hReakcShow()
byte atr;
{
	if(start==0){
		do
		{
			RAND();
			atr=AL%8*16;
		}while(_scheme.schNormalText[Window.scheme]&0x70==atr);
		deltatime=RAND()%90+18;
		starttime=timer();
		hRead(#Waitr);
		IF(AL!=evMessage)hReakcHandler();
		ELSE{
			AX=RAND()%height+1;
			ireakc=AX;
			RAND();
			AX=RAND()%width+1;
			jreakc=AX;
			FillBox(ireakc,jreakc,2,4,' ',atr|0x80);
			start++;
			schot=0;
		}
	}
	ELSE{
		FillBox(ireakc,jreakc,2,4,' ',_scheme.schNormalText[Window.scheme]);
		start=0;
	}
}
