Diskuze: Pacman - duchové
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 2 zpráv z 2.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, té implementaci ve tvém kódu moc nerozumím, ale zkusím ti popsat jak jsem obdobně jednoduchou 2D hru řešil já, když jsem si hrál.
V první řadě bych oddělil logiku hry od vykreslování. Pokud tvůj kód
chápu dobře tak řešíš kolize tak, že kontroluješ zda se nesrazily dva
pictureboxy. Takhle bych to určitě nedělal, protože pokud změníš
obrázek, budeš mít .png s průhledným pozadím okolo obrázku apod. tak to
nebude moc dobře fungovat.
Hrací plochu bych reprezentoval dvourozměrným polem integeru o velikosti
hrací plochy. Předem bych si určil ID typů objektů co které číslo bude
znamenat (resp. pro přehlednost bych použil enum). Např. 0 == volné pole, 1
== zeď, 2 == pac man, 3 == duch atd. V tomto poli bude tedy uložen stav celé
hry s vyjímkou směru jakým se pohybují objekty které se pohybovat
mají.
Pro každý nestatický objekt bych tedy vytvořil instanci jednoduché třídy, která v sobě obsahuje ID typu objektu (odpovídající tomu co doplňuješ do pole), pozici v poli a směr kterým se aktuálně pohybuje. Při každém tiku se všechny objekty mají posunout ve směru který mají nastavený a předpokládám, že na jednom poli může být v jednu chvíli pouze jeden objekt. Předtím si ale musíš zkontrolovat co na daném poli je a podle toho zareagovat(např. pokud pacman narazí do zdi tak se zastaví, pokud duch narazí do zdi tak vygeneruje náhodný směr kam pokračovat, pokud pacman narazí do ducha tak ztratí život atd.) Výhoda tohodle řešení je že není nezbytně nutné procházet celé pole, projdeš jen nestatické objekty a z pole zjistíš co se nachází v jejich bezprostředním okolí.
Ve chvíli kdy je herní logika spočítaná a uložená do pole tak bych zavolal funkci, která podle informací v poli vykreslí scénu. Tím je herní logika nezávislá na grafice. Pokud by jsi to chtěl řešit nějak komplexnějí, popř. tam byly složitější věci, bylo by lepší to všechno řešit objektově, ale na pacmana bohatě stačí pole.
Snad ti tenhle obecný popis trochu pomůže.
Zobrazeno 2 zpráv z 2.