Uses Graph,Crt; Const m = 18; n = 18; Left = #75; Right = #77; Space = #32; Mouses = 10; Var GD,GM,Size: Integer; x0,y0,x1,y1,r: Integer; t: Real; HunterAngle, TargetAngle: real; Function Angle(x,y: Real): Real; Var Theta: Real; Begin If (x=0.0) AND (y=0.0) Then Angle:=-1.0 Else If x=0.0 Then Begin If y>0 Then Angle:=0.5*Pi Else Angle:=1.5*Pi; End Else Begin Theta:=ArcTan(y/x); If x>0.0 Then Begin If y>0.0 Then Angle:=Theta Else Angle:=2*Pi+Theta; End Else Angle:=Pi+Theta; End; End; Procedure InitHunter; Begin x0:=320; y0:=240; r:=20; x1:=r+x0; y1:=y0; t:=0; End; Procedure DrawHunter(KC: Char); Begin Case KC Of Left: t:=t-0.1; Right: t:=t+0.1; End; If (t>=2*Pi) Or (t<=-2*Pi) Then t:=0; SetColor(Black); Line(x0, y0, x1, y1); x1:=Round(r*cos(t))+x0; y1:=Round(r*sin(t))+y0; SetColor(Red); Line(x0,y0,x1,y1); SetColor(Blue); SetFillStyle(1,Blue); PieSlice(320,240,0,360,10); SetColor(Red); SetFillStyle(1,Red); PieSlice(320,240,0,360,6); HunterAngle:=Angle(x1-320,240-y1); gotoxy(35, 23); write('Hunter: ',HunterAngle:10:7); End; Procedure DrawTarget; var Xt,Yt: integer; Delta: real; Begin Xt := 50; Yt := 70; TargetAngle:=Angle(Xt-320,240-Yt); gotoxy(1, 1); write('Target: ', TargetAngle:10:7); Delta := Abs(HunterAngle-TargetAngle); gotoxy(1, 2); write('Delta: ', Delta:10:7); if Delta < 0.1 then SetColor(12) else SetColor(15); Circle(Xt,Yt,10); End; Procedure Main; Var Tm: Real; i,Count: Integer; c: Char; Begin Tm:=0; Count:=0; Repeat Tm:=Tm+1; c:=#0; While KeyPressed Do c:=ReadKey; If (c=Left) Or (c=Right) Then begin DrawHunter(c); DrawTarget; end; Until c=#27; RestoreCrtMode; End; Begin GD:=Detect; InitGraph(GD,GM,''); Randomize; InitHunter; directvideo := false; DrawHunter(Left); DrawTarget; Main; End.