Í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: