

OOP - objekty zasahujúce mimo?
Mal by som praktickú otázku ohľadne OOP. Prerábam jednu hru, čo som kedysi napísal v Turbo Pascale do C#. Jedná sa o klasiku, húsenica, známa v zjednodušenej forme na starých Nokiách a v zložitejšej forme ako Wurmi. Samozrejme, moja prerábka bola najlepšia. Ale k veci:
Červík Wurmi by mal vystupovať ako samostatný objekt, čo sa implementácie pohybu týka. Obsahuje teda:
- informáciu o umiestnení tela pre každý článok
- začiatok a koniec tela
- smer
Do toho chcem implementovať metódy na posuv červíka. Lenže, ak má byť tento objekt samostatný, tak z neho nemôžem odkazovať na kreslenie hracej plochy. Musel by som teda v obsluhe červíka implementovať posuv interne až potom po použití v programe urobiť krok červíka a následne ručne volať metódu kreslenia. Nebolo by teda lepšie implementovať kreslenie červíka do jeho objektu priamo a na kresliace metódy vytvoriť delegátov, ktorí budú volaní v objekte červíka a bude v nich adresa rutín pre kreslenie požičaná z hlavnej obslužnej rutiny? Tým pádom bude objekt samostatný a prehľadný.
Chcem sa teda spýtať, aké riešenie sa v takýchto prípadoch používa najčastejšie? Je aj nejaká výhodnejšia tretia možnosť? (V zmysle, čo je najvhodnejšie urobiť.)
Ono je plno seriálov o OOP, len všade sa používajú jednoduché príklady, kde takéto veci nie je nutné riešiť.
Takže mám to takto:
Objektu záhrada odovzdám objekt PictureBox, kam má kresliť. V tomto objekte sú implementované všetky metódy na kreslenie a tiež na vytváranie objektov v záhrade. Čiže v programe nepotrebujem vygenerovať súradnice kapusty pri vytváraní záhrady, ale záhrada vygeneruje sama a odovzdá súradnice.
Objektu Wurmi odovzdám objekt záhrada. Kompletný pohyb červíka je implementovaný v ňom. Ak zje kapustu, tam objekt záhrada vygeneruje novú. Ak chce nakresliť články tela, objekt záhrada ich vie vykresliť, keďže kreslenie je v nej. Vytváranie a zanikanie článkov tela je ale implementované v tomto objekte.
Aplikácia vytvorí plátno na PictureBox. Vytvorí objekt záhrada a odovzdá mu už pripravený PictureBox. Aplikácia naaranžuje záhradu, ale príkazy na kreslenie odovzdáva objektu záhrada. Potom vytvorí objekt Wurmi a odovzdá mu objekt záhrada, aby Wurmi vedel, kam patrí. Cez Timer je riadený pohyb červa. Podľa stlačenej klávesy aplikácia odovzdáva objektu Wurmi informáciu o pokuse zmeniť smer. Ak je to možné, objekt Wurmi si ho zmení. Aplikácia si následne od objektu Wurmi vypýta, aký objekt je pred hlavou červa a prikáže mu urobiť krok. Zobrazia sa informácie o dĺžke a času do konca hry. Potom sa otestuje, či pred hlavou červa nebola otrava alebo či neskončil čas. Ak áno, hra končí, inak sa to celé opakuje dokola.
Ak budem chcieť v budúcnosti pridať červa, nebude nič jednoduchšie. Vytvorím len ďalší objekt Wurmi a odovzdám mu rovnaký objekt záhrada a dvaja červi budú v jednej záhrade.
Ďakujem zúčastneným za pomoc.