Írjunk programot, mely egy céltáblát jelenít meg. A céltáblára lehessen lövéseket leadni bármely billentyű megnyomásával. A lövések helyét kis fillezett körök jelezzék (fehér területen fekete, fekete területen fehér legyen). Lövéskor rövid hangot adjon a program. A lövések helyét véletlenül válassza a program. Számolja a lövések számát és az elért pontokat, és ezeket folyamatosan jelenítse meg a képernyőn. Használjuk az svga256.bgi grafikus drivert, a legnagyobb felbontásban.

 

A feladatot megoldó program listája:

 

Program Celtabla;

Uses NewDelay, Crt, Graph;

Var Gd, Gm, Xm, Ym, Xk, Yk, I, R, T, H: Integer;

    D: Real;

    X, Y: Longint;

    Sz: String;

    Ch: Char;

Begin

  Gd:= InstallUserDriver('svga256',Nil); Gm:=4;

  InitGraph(Gd,Gm,'C:\Tp\Bgi');

  Xm:= GetMaxX; Ym:= GetMaxY;

  Xk:= Xm Div 2; Yk:= Ym Div 2;

 

  SetFillStyle(1,15); Bar(0,0,Xm,Ym);

  SetColor(0); Circle(Xk,Yk,150);

  SetFillStyle(1,0); FloodFill(Xk,Yk,0);

  R:= 0;

  SetColor(15);

  For I:= 1 To 5 Do Begin Inc(R,30); Circle(Xk,Yk,R) End;

  SetColor(0);

  For I:= 1 To 5 Do Begin Inc(R,30); Circle(Xk,Yk,R) End;

  SetTextStyle(0,0,2);

  MoveTo(Xk-10*30-5,Yk-7);

  For I:= 1 To 10 Do

  Begin

    MoveRel(14,0); If I=10 Then MoveRel(6,0);

    Str(I,Sz); If I>5 Then SetColor(15); OutText(Sz);

  End;

  SetColor(0); MoveTo(Xk+11*30-5,Yk-7);

  For I:= 1 To 9 Do

  Begin

    MoveRel(-46,0); Str(I,Sz);

    If I>5 Then SetColor(15); OutText(Sz);

  End;

  SetColor(0); SetTextStyle(0,0,4);

  T:= 0; Str(T,Sz); OutTextXY(30,50,Sz);

  OutTextXY(Xm-150,50,Sz);

 

  Randomize; 

  For I:= 1 To 30 Do

  Begin

    Ch:= Readkey; Sound(1000); Delay(100); NoSound;

    X:= Random(400)+Xk-200; Y:= Random(400)+Yk-200;

    D:= Sqrt(Sqr(X-Xk)+Sqr(Y-Yk));

    If D<150 Then

    Begin SetColor(15); SetFillStyle(1,15) End

    Else

    Begin SetColor(0); SetFillStyle(1,0) End;

    PieSlice(X,Y,0,360,6); SetColor(0); SetFillStyle(1,15);

    Bar(0,0,100,100); Str(I,Sz); OutTextXY(30,50,Sz);

    H:= 10-Round(Int(D/30)); If H<0 Then H:= 0; Inc(T,H);

    Bar(Xm-150,50,Xm,100); Str(T,Sz); OutTextXY(Xm-150,50,Sz);

  End;

  ReadKey;

End.

 

         A program képe 15 lövés után: