Autor Wątek: Wzorzec projektowy  (Przeczytany 18555 razy)

Offline gmpro

  • Użytkownik

# Czerwiec 26, 2012, 11:04:09
Pamiętam jak kiedyś nie znając się za dużo na programowaniu pytałem o profesjonalny kod, nie wiedziałem wówczas jak to nazwać :P Taka mała dygresja na początku..

Tak się zastanawiam jakich wzorców używacie do pisania gier?
Głównie chodzi mi o gry czasu rzeczywistego..

BTW. teraz jak się zainteresowałem całą tą inżynierią :P to zmienia się całe podejście. Choć (chodź) jak na moje żółtodziobowe gry kod był całkiem przyzwoicie zaprojektowany.

EDIT: oczywiście nie chodzi mi o te szczegółowe typu singleton albo obserwator tylko te nadrzędne jak MVC dla stron internetowych..
« Ostatnia zmiana: Czerwiec 26, 2012, 11:27:39 wysłana przez gmpro »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Avaj

  • Użytkownik

  • +3
# Czerwiec 26, 2012, 12:02:31
W grach się raczej nie używa takich "nadrzędnych" wzorców projektowych. Jedyny co mi przychodzi do głowy to Component Based Design http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/

Offline .:NOXY:.

  • Użytkownik
    • Profil

  • +2
# Czerwiec 26, 2012, 12:17:54
Z tym ladnym kodem to jest tak ze sie szybko konczy na slowo: "Ma dzialac lepiej", "Brzydkie" , "Trzeba to dodac na za dwa dni" itp... Czesto fuckup na fuckupie powoduje ze trzbea robic tak zwane fuckfixy. Takze wysokim czynnikiem jest czas i to czy sie nie pomyliles na samym poczatku, bo jak tak to jestes w pupie :)

Offline gmpro

  • Użytkownik

# Czerwiec 26, 2012, 12:30:35
Aha no czyli nie potrzebnie się tym przejąłem ;)
"Zwykła" hierarchia klas jest już nadrzędnym wzorcem.

@.:NOXY:. no ja mam właśnie taką paranoję, że jak zacznę coś pisać, dochodzę do połowy i uznaję że dany kod pomimo, że działa świetnie nie podoba mi się. Zaczyna się zmienianie założeń, poprawianie, aby poprawić, usystematyzować kod, który i tak nie będzie zauważony przez końcowego użytkownika :P
« Ostatnia zmiana: Czerwiec 26, 2012, 12:46:33 wysłana przez gmpro »

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Czerwiec 26, 2012, 13:06:02
O tym wlansie mowie trzeba duzo ale to okropnie duzo czasu poswiecac na kartke i olowek. Im wiecej "zaprogramujesz na kartce" tym mniejsza szansa ze cos pominiesz. Ogolnie Brainstormy to podstawa dobrej architektury. Nawet najlepsze trzymanie sie wzrocow nie pomoze jak odgornie cos zle obmyslisz.

O i tu moze taka fajna rada:

Unikaj zajawki, to jest zuo jak sie nakrecisz i cos szybko robisz bo masz "swieza glowe" to jest 99% ze nie skumasz za miesiac jak to dziala i jak to potem optymalizowac. True Story ;)
« Ostatnia zmiana: Czerwiec 26, 2012, 13:08:43 wysłana przez .:NOXY:. »

Offline Kos

  • Użytkownik
    • kos.gd

# Czerwiec 26, 2012, 13:22:17
"Zwykła" hierarchia klas jest już nadrzędnym wzorcem.

Hierarchia... Co Wy macie z tymi hierarchiami? Klasy sobie perfekcyjnie dobrze radzą bez hierarchii. :) Hierarchie są zbyt skomplikowane i zbyt mało elastyczne do modelowania kodu. (Graf obiektów ma rosnąć wszerz, a nie wzwyż!)

Cytuj
@.:NOXY:. no ja mam właśnie taką paranoję, że jak zacznę coś pisać, dochodzę do połowy i uznaję że dany kod pomimo, że działa świetnie nie podoba mi się. Zaczyna się zmienianie założeń, poprawianie, aby poprawić, usystematyzować kod, który i tak nie będzie zauważony przez końcowego użytkownika :P

Wiele ludzi tak ma. Tyle, że poprawiając można łatwo przesadzić i zrobić kod gorszy. Zły OOP pełny zbędnych abstrakcji i nietrafnych założeń oraz ciasnego couplingu (czyt. dziedziczenie) jest IMO gorszy od kodu bez OOP-u.

Offline gmpro

  • Użytkownik

# Czerwiec 26, 2012, 13:48:35
@Kos: No właśnie :)
Nie ma sensu pisanie skomplikowanych rozwiązań dla prostej jednorazowej czynności.
Parafrazując frazeologizm, którego sobie teraz nie mogę przypomnieć: nie używaj c4, aby pozbyć się kretowiska na trawniku :P

Offline MadBonsai

  • Użytkownik
    • Ifrit

# Czerwiec 26, 2012, 14:29:25
Parafrazując frazeologizm, którego sobie teraz nie mogę przypomnieć: nie używaj c4, aby pozbyć się kretowiska na trawniku :P
"To jak strzelać do muchy z armaty"? O to chodziło? ;)

Offline koirat

  • Użytkownik

# Czerwiec 26, 2012, 14:33:52
Jeśli miałbym przywołać jakiś szczególny wzorzec to był by to wzorzec "Mediator" a dokładniej to zastosowanie tego wzorca w celu skonstruowania globalnego systemu rozgłaszania wydarzeń.

Wzorzec MVC również się przydaje, nie tylko w stronach interentowych.

Po za tym wiele innych, np Factory, LazyInitialization, Object Pool,Prototype,Facade

Głębokie Hierarchie to naleciałość z C++, poprostu za łatwo je się tam robi gdy mamy do dyspozycji "Multiple inheritance" (nie wiem jak to być po Polsku) :) i jak już wspomniał @Kos lepiej unikać.
« Ostatnia zmiana: Czerwiec 26, 2012, 14:37:44 wysłana przez koirat »

Offline gmpro

  • Użytkownik

# Czerwiec 26, 2012, 14:42:28
@MadBonsai: chyba tak :p

@koriat: ale Mediatora to ja bym sklasyfikował jako bardziej szczegółowy wzorzec, stworzony do danej czynności, w Twoim wypadku powiadamiania obiektów o zdarzeniu.. (to taki nawet kombos Singleton-Mediator-Obserwator)

naleciałość z C++
nie lubisz c++?
« Ostatnia zmiana: Czerwiec 26, 2012, 14:45:31 wysłana przez gmpro »

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Czerwiec 26, 2012, 15:02:24
Powiedzmy że używam pewnych wzorców projektowych. No bo jeżeli większość gier robię w środku tak samo, to chyba można nazwać wzorcem? ;)

Najlepszym tego typu "wzorcem" jest Encja. Masz jedną klasę "Obiekt" w grze, która w zależności od pola "type" (albo wskaźników na funkcje, itp) potrafi być każdym obiektem świata gry. Dzięki temu odpada cała zabawa z polimorfizmem, upraszcza się skryptowanie, rendering, kod sieciowy, itp, itd. Stosowane komercyjnie w Quake 1/2/3, Thief 1/2 i pewnie wiele innych.

Offline hashedone

  • Użytkownik

# Czerwiec 26, 2012, 15:50:04
nie lubisz c++?
Co za różnica czy lubi czy nie? Ja np. bardzo lubię, ale uważam że koirat ma tu rację - zbyt łatwo zrobić bezsensowną hierarchię klas w C++, dla tego niepotrzebnie ludzie programujący lub dawniej programujący w tym języku często to robią.

Offline gmpro

  • Użytkownik

# Czerwiec 26, 2012, 16:10:52
@Krzysiek K.
Mi tam zabawa z polimorfizmem się podoba i sprawia przyjemność.
Hmm ale to jak to wygląda z tą encją. Pola w tym obiekcie są umieszczone w jakimś buforze i w zależności od typu są interpretowane w dany sposób?

@hashedone:
Co za różnica czy lubi czy nie?
Dla mnie ma i nie chodzi tu o ta hierarchę tylko jeśli dana osoba nie lubi C++ to pozwala mi ją w jakiś sposób poznać. Bo jeśli przy tym jest wyznawcą javy to już można go nieładnie mówiąc zaszufladkować.. A moje pytanie spowodowane było czystą ciekawością.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Czerwiec 26, 2012, 16:16:48
Cytuj
Hmm ale to jak to wygląda z tą encją. Pola w tym obiekcie są umieszczone w jakimś buforze i w zależności od typu są interpretowane w dany sposób?
W przypadku Quake 1 encja ma wszystkie możliwe pola. Po prostu najczęściej spora część jest niewykorzystanych.

Offline gmpro

  • Użytkownik

# Czerwiec 26, 2012, 16:42:28
He i to jest opłacalne?