Zdravím
Děkuji za podporu. První ze tří příkladů se mi povedlo udělat a hodiny tak nějak fungují ve verzi OOP. Možná to někomu v budoucnu pomůže, tak níže přikládám zdrojový kód.
Jako doplňující dotaz se chci zeptat na nějakou online diskuzi. Kdysi ještě za CZFRee jsme komunikovali na kanálu IRC. Vyřešilo se vše online a mnohem rychleji a to včetně maličkostí, jež není vhodné řešit na fóru. Nevíte zda existuje nějaká taková možnost online diskuze i dnes u tématu programování. Mám nyní třeba další dva příklady a u jednoho vůbec nechápu zadání. Je možné, že programátor má na tohle jiný pohled a jen by se koukl a věděl by, takže by mě trochu nakopl.
program Hodiny;
uses crt, graph, UHodiny;
var gd,gm: smallint;
stredx, stredy, velikostx, Z, Y, R, P, C: integer;
Hodiny: THodiny;
Rucicka: TRucicka;
begin
detectgraph (Gd,Gm); // Detekce grafického režimu
initgraph(Gd,Gm, ''); // Přepnutí do grafického režimu
setcolor(0); // Barva pro kreslení čar nastavena
Hodiny.Init (500,500,200);
Hodiny.Ramecek (); // Vykreslení Rámečku
Hodiny.Cifernik (); // Vykreslení ciferníku
Hodiny.Stred (); // Vykreslení středu hodin
Hodiny.Dvanact (); // Vykreslení číslic
Hodiny.Tri ();
Hodiny.Sest ();
Hodiny.Devet ();
Rucicka.Init (500,500,200); // Souřadnice linky
Rucicka.Tikej;
closegraph; // Ukončení grafického režimu
end.
Unit UHodiny;
interface
uses crt, graph;
type
THodiny = object // Vytvoření objektu
stredx, stredy, velikostx: integer; // Lokální proměnné pro potřeby objektu
constructor Init (stred_x, stred_y, velikost_x: integer); // Metoda pro naplnění proměnných hodnotami
procedure Ramecek; // Metoda pro vykreslení rámečku
procedure Cifernik; // ...
procedure Stred;
procedure Dvanact;
procedure Tri;
procedure Sest;
procedure Devet;
end;
TRucicka = object (THodiny) // Vytvoření objektu
constructor Init (stred_X, stred_Y, velikost_X: integer); // Metoda pro naplnění proměnných hodnotami
procedure Rucicka_1 (stred_X, stred_Y, R, P: integer); // Rucicka zobrazena
procedure Rucicka_2 (stred_X, stred_Y, R, P: integer); // Rucicka v barve ciferniku
procedure Tikej; // Metoda pro posun ručičky
end;
implementation
constructor THodiny.Init (stred_x, stred_y, velikost_x: integer);
begin stredx := stred_x; stredy := stred_y; velikostx := velikost_x; end;
constructor TRucicka.Init (stred_X, stred_Y, velikost_X: integer);
begin stredx := stred_x; stredy := stred_y; velikostx := velikost_x; end;
procedure TRucicka.Rucicka_1 (stred_X, stred_Y, R, P: integer);
begin SetLineStyle(0, 0, 3); Setcolor(4); Line(stred_x, stred_y, R, P); delay (100); end;
procedure TRucicka.Rucicka_2 (stred_x, stred_y, R, P: integer);
begin SetLineStyle(0, 0, 3); Setcolor(15); Line(stred_x, stred_y, R, P); end;
procedure TRucicka.Tikej;
var Z, Y, R, P, C: integer;
begin C := 0;
repeat
Z := round(150 * sin(C * 3.14 / 180)); // Vydělím a zaokrouhlím hodnotu první souřadnice, kde bude končit úsečka. Musí být kratší, aby nepřemazával číslice!
Y := round(150 * cos(C * 3.14 / 180)); // Vydělím a zaokrouhlím hodnotu druhé souřadnice, kde bude končit úsečka. Musí být kratší, aby nepřemazával číslice!
R := stredx + Z; // Souřadnice linky
P := stredy - Y; // Souřadnice linky
Rucicka_1(stredx, stredy, R, P);
Rucicka_2(stredx, stredy, R, P);
C := C + 6; // Rozdělení na šedesát intervalů (sekund)
until C > 360; // Po uplynutí šedesáti sekund (otočení ručičky), se program ukončí
end;
procedure THodiny.Ramecek;
begin SetFillStyle (1,8); FillEllipse (stredx, stredy, velikostx + 25,velikostx + 25); end;
procedure THodiny.Cifernik;
begin SetFillStyle (1,15); FillEllipse (stredx, stredy, velikostx, velikostx); end;
procedure THodiny.Stred;
begin SetFillStyle (1,0); FillEllipse (stredx, stredy, velikostx -190, velikostx -190); end;
procedure THodiny.Dvanact;
begin SetTextStyle(0,0,3); OutTextXY(stredx -20, stredy -180,'12'); end;
procedure THodiny.Tri;
begin SetTextStyle(0,0,3); OutTextXY(stredx +160, stredy -10,'3'); end;
procedure THodiny.Sest;
begin SetTextStyle(0,0,3); OutTextXY(stredx -10, stredy +160,'6'); end;
procedure THodiny.Devet;
begin SetTextStyle(0,0,3); OutTextXY(stredx -180,stredy -10,'9'); end;
end.