Írjunk programot, mely a Naprendszert
szemlélteti. A bolygók együttállásból (északról) induljanak, pályájuk legyen
ellipszis, a Naptól mért távolságoknak nem kell a valósággal arányosnak lenni.
A bolygók mérete némileg tükrözze a nagysági viszonyúkat, relatív keringési
idejük viszont a valóságot jól tükrözze. A bolygók különböző színűek legyenek,
egyezzen meg a pályájuk színével. A Föld kék, a Mars vörös legyen. A Nap és a
Jupiter sárga.
Egy lehetséges megvalósítás futási képe:
A program listája:
Program Bolygok;
Uses NewDelay,
Crt, CrtPlus, Graph;
Const A:
Real= 0.3;
Uc: Byte= 0;
Var Xk,
Yk: Integer;
Type TBolygo=
Object
FRn, FRk, FKi, Fr:
LongInt;
FFi: Real;
FC: Byte;
Procedure Init(IRn, IRk,
IKi, Ir: LongInt; IFi: Real;
IC: Byte);
Function GetKis: Integer;
Function GetNagy: Integer;
Procedure Hely;
Procedure Show;
Procedure Hide;
Procedure Mozgas;
Private
Fx, Fy: Integer;
End;
TControl= Object
Nap, Mercur, Venus, Fold, Mars, Jupiter,
Saturnus, Uranus, Neptunus, Pluto: TBolygo;
Procedure Init;
Procedure Run;
Procedure Done;
End;
Procedure TBolygo.Init(IRn, IRk, IKi, Ir:
LongInt; IFi: Real; IC: Byte);
Begin
FRn:= IRn;
{Nagy sugár}
FRk:= IRk;
{Kis sugár}
FKi:= IKi;
{Keringési idő}
Fr:= Ir; {A bolygó sugara}
FFi:= IFi;
{Kezdő fázis}
FC:=
IC; {A
bolygó színe}
End;
Function TBolygo.GetKis: Integer;
Begin
GetKis:= Round(A*FRk);
End;
Function TBolygo.GetNagy: Integer;
Begin
GetNagy:= FRn;
End;
Procedure TBolygo.Hely;
Begin
Fx:= Xk+Round(FRn*Cos(FFi*Pi/180));
Fy:= Yk-Round(A*FRk*Sin(FFi*Pi/180));
End;
Procedure TBolygo.Show;
Begin
Hely; SetColor(FC); SetFillStyle(1,Fc); FillEllipse(Fx, Fy, Fr,
Fr);
End;
Procedure TBolygo.Hide;
Begin
Hely; SetColor(Uc); SetFillStyle(1,Uc); FillEllipse(Fx, Fy, Fr,
Fr);
End;
Procedure TBolygo.Mozgas;
Begin
Hide; FFi:= FFi+360/FKi;
Show;
End;
Procedure TControl.Init;
Var Gd,
Gm: Integer;
Begin
Gd:= InstallUserDriver('svga256',Nil); Gm:= 4; InitGraph(Gd,Gm,'');
Xk:= GetMaxX Div 2; Yk:= GetMaxY
Div 2; SetFillStyle(1,Uc);
Bar(0,0, GetMaxX, GetMaxY);
SetColor(15); OutTextXY(Xk-50,0,'Naprendszer');
Nap.Init (
0, 0, 0, 7, 0,14); Nap.Show;
SetColor(14); OutTextXY(Xk+12,Yk-3,'Nap');
Mercur.Init ( 61, 55,
88, 2, 90, 12);
SetColor(12); OutTextXY(Xk-10,Yk+Mercur.GetKis+5,'Mercur');
Venus.Init (110,106,
224, 2, 90, 11);
SetColor(11); OutTextXY(Xk-10,Yk+Venus.GetKis+5,'Venus');
Fold.Init (155,145,
365, 3, 90, 9);
SetColor(9); OutTextXY(Xk-10,Yk+Fold.GetKis+5,'Fold');
Mars.Init (230,226,
684, 2, 90, 4);
SetColor(4); OutTextXY(Xk-10,Yk+Mars.GetKis+5,'Mars');
Jupiter.Init
(290,280, 4330, 4, 90, 14);
SetColor(14); OutTextXY(Xk-10,Yk+Jupiter.GetKis+5,'Jupiter');
Saturnus.Init(350,340,10752,
4, 90, 9);
SetColor(9); OutTextXY(Xk-10,Yk+Saturnus.GetKis+5,'Saturnus');
Uranus.Init (400,390,30660, 3, 90, 10);
SetColor(10); OutTextXY(Xk-10,Yk+Uranus.GetKis+5,'Uranus');
Neptunus.Init(450,440,60225,
2, 90, 11);
SetColor(11); OutTextXY(Xk-10,Yk+Neptunus.GetKis+5,'Neptunus');
Pluto.Init (500,490,90520, 2, 90, 2);
SetColor(2); OutTextXY(Xk-10,Yk+Pluto.GetKis+5,'Pluto');
End;
Procedure TControl.Run;
Begin
Repeat
SetColor(6); With Mercur Do
Begin Mozgas; Ellipse(Xk,
Yk, 0, 360, GetNagy, GetKis) End;
SetColor(3); With Venus Do
Begin Mozgas; Ellipse(Xk,
Yk, 0, 360, GetNagy, GetKis) End;
SetColor(9); With Fold Do
Begin Mozgas; Ellipse(Xk,
Yk, 0, 360, GetNagy, GetKis) End;
SetColor(5); With Mars Do
Begin Mozgas; Ellipse(Xk,
Yk, 0, 360, GetNagy, GetKis) End;
SetColor(7); With Jupiter Do
Begin Mozgas; Ellipse(Xk,
Yk, 0, 360, GetNagy, GetKis) End;
SetColor(8); With Saturnus Do
Begin Mozgas; Ellipse(Xk,
Yk, 0, 360, GetNagy, GetKis) End;
SetColor(1); With Uranus Do
Begin Mozgas; Ellipse(Xk,
Yk, 0, 360, GetNagy, GetKis) End;
SetColor(7); With Neptunus Do
Begin Mozgas; Ellipse(Xk,
Yk, 0, 360, GetNagy, GetKis) End;
SetColor(8); With Pluto Do
Begin Mozgas; Ellipse(Xk,
Yk, 0, 360, GetNagy, GetKis) End;
Until KeyPressed;
End;
Procedure TControl.Done;
Begin
ClearDevice; CloseGraph;
End;
Var Control:
TControl;
Begin
Control.Init;
Control.Run;
Control.Done;
End.