• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Prośba o ocenę gry c++

Object Storage Arubacloud
0 głosów
771 wizyt
pytanie zadane 12 sierpnia 2016 w C i C++ przez pewien_programista Obywatel (1,070 p.)
Witam!

Zabawę z c++ zacząłem dość dawno. Po obejrzeniu wszystkich filmów pana Mirosława Zelenta i przeczytaniu kilku artykułów na temat c++ właśnie postanowiłem stworzyć jakąś fajną aplikację, niestety kiedy próbowałem wykorzystać podejście obiektowe zawsze coś nie wychodziło... Zraziłem się trochę i porzuciłem na jakiś czas c++ ale potem doszedłem do wniosku, że warto spróbować jeszcze raz. Stworzyłem grę polegającą na zbieraniu "pieniążków" z poruszaniem się w stylu snake'a.

Kod źródłowy: https://gist.github.com/anonymous/dec9b753e5bef4ee2b734d0060e2e99d#file-main-cpp

Wiem, że zapewne jak to w pierwszym "większym" projekcie jest tam pewnie sporo niedociągnięć, ale chciałbym wiedzieć co o tym sądzicie.
komentarz 12 sierpnia 2016 przez erx700 Gaduła (3,430 p.)
Niedawno pisałem, że obiektowe programowanie gier jest trudne. Miałem oczywiście wtedy rację :) Pierwsze co się rzuca w oczy to publiczne gettery. Ja to nazywam bezczelnymi akcesorami bo bezczelnie ujawniają całą strukturę obiektu tak jakby była to struktura danych. Wujek Bob nazwał takie twory hybrydami bo zawierają wady zarówno struktur danych jak i obiektów. Jeśli programowanie obiektowe ci nie wychodzi to się nie martw bo programując strukturalnie można zrobić naprawdę rozbudowane gry. Jako przykład może posłużyć Warcraft 3. Genialna gra, dzięki której powstały inne świetne tytuły takie jak Dota. Wszystko to programując strukturalnie w oparciu o język JASS stworzony przez Blizzarda.
komentarz 12 sierpnia 2016 przez pewien_programista Obywatel (1,070 p.)
Co byś proponował zmienić?
komentarz 12 sierpnia 2016 przez erx700 Gaduła (3,430 p.)
Przenieś swoje akcesory do chronionych albo prywatnych.
1
komentarz 12 sierpnia 2016 przez pewien_programista Obywatel (1,070 p.)
Nie do końca rozumiem jaki jest sens ustawiać akcesory jako prywatne... Przecież ich idea to dostęp do danych z innych klas...
komentarz 12 sierpnia 2016 przez erx700 Gaduła (3,430 p.)
Widać, że nie rozumiesz istoty programowania obiektowego, ale to nie nowość w przypadku ludzi, którzy obejrzeli kurs Zelenta. Polecam przeczytać profesjonalne książki np Czysty Kod, Wzorce Projektowe.
komentarz 13 sierpnia 2016 przez erx700 Gaduła (3,430 p.)
Nie wszystkie gettery i settery są bezczelnymi akcesorami zmiennych. Na przykład metoda setBackgroundColor może po prostu odnosić się do funkcji OpenGL, która zmienia kolor tekstury. Zmienna Background Color może nawet nie istnieć.

Drugi przykład getCollisionBody. W tym przypadku mamy właściwie pewność, że zmienna CollisionBody nawet nie istnieje, a sama metoda przeprowadza zaawansowane operacje.

Może się zdarzyć, że zarówno set i get nie są bezczelnymi akcesorami, np w przypadku listy jednokierunkowej, metody te wykonują operację szukania wartości węzła o wskazanym numerze.

We wszystkich tych przypadkach set i get mogą być publiczne. Twoje akcesory udostępniają po prostu zmienne, dlatego trzeba je ochronić. Jeśli chcesz coś zrobić ze zmiennymi X i Y to klasa, która posiada te zmienne powinna tą operację wykonywać.
komentarz 13 sierpnia 2016 przez pewien_programista Obywatel (1,070 p.)

Jeżeli publiczne akcesory są problemem to widzę kilka rozwiązań:

  1. Całkowicie je usunąć i zmienić klauzulę z private na public (hmm... może lepiej nie) albo protected (nie będzie dostępu "od zewnątrz" ale od klas dziedziczących dostęp będzie jeszcze bardziej "bezczelny")
  2. Zamiast akcesorów zastosować system przyjaźni (W sumie to wiem, że takie coś jest ale jakoś nigdy nie korzystałem)
  3. Zmienić akcesory z public na protected 

Co uważasz za najlepsze rozwiązanie?

A co do:

 

Nie wszystkie gettery i settery są bezczelnymi akcesorami zmiennych. Na przykład metoda setBackgroundColor może po prostu odnosić się do funkcji OpenGL, która zmienia kolor tekstury. Zmienna Background Color może nawet nie istnieć.

Drugi przykład getCollisionBody. W tym przypadku mamy właściwie pewność, że zmienna CollisionBody nawet nie istnieje, a sama metoda przeprowadza zaawansowane operacje.

Wszystko ok, ale zauważ, że "collector" to prosta gierka konsolowa, w której nie ma po prostu potrzeby przeprowadzać zaawansowanych operacji w getterach czy setterach.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+5 głosów
1 odpowiedź 948 wizyt
+1 głos
2 odpowiedzi 589 wizyt
0 głosów
0 odpowiedzi 182 wizyt
pytanie zadane 28 sierpnia 2019 w C# przez pewien_programista Obywatel (1,070 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,962 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...