Kompleksowa ocena mojego zbioru trzech gier

1

Witam, proszę o kompleksową ocenę mojego małego projektu, dodam tylko że jest to projekt hobbistyczny w którym założeniem jest aby nauczyć się budować aplikację/silnik/to coś a nie korzystać z gotowych silników itp.
Po prawie roku pomyślałem żeby oddać to do oceny i zjechania za :)
Filmik jak to wygląda:
Github: https://github.com/ArturKnopik/Game

PS :Arkanoid - za mało FPS sprawia że kulka nie jest w stanie uciec z obiektu z którym koliduje(widać na filmiku) - wina prostego algorytmu wykrywania kolizji i reakcji na nią (ah ta matemtyka)
Mario jest zepsute, wykrywanie kolizji a raczej reakcja na nią sprawia że mario tkwi w klocku

1

8 tysięcy linii kodu to nie jest mały projekt (i prawie 20 tys. linii XML?). Powinieneś powkładać te pliki do osobnych katalogów, bo teraz jest niezły burdel. Idealnie to te gry powinny być w osobnych repozytoriach, a silnik w osobnym. No i po co pisać takie proste gry w C++?

Jak zrobiłem kiedyś grę to problem kolizji rozwiązałem sprawdzając pośrednie miejsca, w których obiekt się znajdował. Najpierw sprawdzałem, co by się wydarzyło w połowie drogi, potem w 1/4 lub 3/4 itd. (coś jak przeszukiwanie binarne) aż różnica między położeniem bez kolizji i z kolizją nie była rzędu jednego piksela. Co prawda to nie działało w sytuacji jak obiekt się za szybko poruszał, ale na to też potem znalazłem patent.

2

Widzę, że jesteś zwolennikiem mieszania wszystkiego ze wszystkim. Nie dość, że jeden projekt obejmuje n gier jednocześnie, to klasy mieszają warstwę danych z warstwą prezentacji. Np. TibiaPlayer przechowuje HP postaci i jej nazwę, ale też ją rysuje, zbiera eventy z klawiatury i kręci bączki.

animationRight.addFrame(sf::IntRect(64, 64, 32, 32));
rect.setOutlineColor(sf::Color(100,30,60,130));

Tutaj jakieś magic numbers, które nic nikomu nie mówią. Co będzie jak zechcesz zmienić wymiary klatki? Będziesz szukał w każdym pliku "32", sprawdzał czy to "32" to akurat to, o które ci chodzi i podmieniał?

Znaczy ogólnie to popieram i szanuję. W pewien sposób robi wrażenie, ale myślę, że powinieneś troszkę pomyśleć nad strukturą tego wszystkiego. No i 12 commitów jak na taki duży projekt to też wskazówka, że coś jest nie tak z twoim kontrolowaniem wersji ;) Po to masz gita, żeby nie trzymać zakomentowanego kodu w repozytorium (https://github.com/ArturKnopik/Game/blob/master/Learn_Game/Mario_LevelController.cpp#L6)

1

co do wielu gier w jednym projekcie to jest zagranie celowe, pomaga ogarnąć polimorfizm, wymuszając tworzenie kilku gamestate w jednym projekcie, oczywiście mogłem zrobić grę, pauzę, menu i też to samo by wyszło

1

Akurat pomysł robienia kilku gier w jednym projekcie jest dobry, bo pomaga ulepszać architekturę.
Ja teraz robię apkę w Three.js (ten edytor map, o którym pisałem na mikroblogu) i niedawno zacząłem w tym samym repo tworzyć na tym samym silniku drugi nieco inny edytor - i architektura polepszyła mi się niezmiernie, bo od razu widać jak na dłoni rzeczy, które są specyficzne dla danej apki (i które trzeba wywalić z core'a), a które są wspólne. Architektura się hartuje. I to nie pierwszy raz zresztą, kiedy coś takiego robię - jedna apka-silnik - i kilka pod-apek, które mogę sobie łatwo przełączać.

Oczywiście można się spierać, czy należy to robić wszystko w jednym repo Git (podejście monorepo), czy może lepiej wydzielić bibliotekę i ją importować z kolejnych projektów, ale to już jest oddzielny problem.

Tylko, że ja akurat wydzieliłem kod do odpowiednich folderów, nadałem temu strukturę.

Tutaj jednak struktury nie widzę, napaćkane jest luzem ileś plików. A przecież zamiast Arkanoid_Block.cpp itp. można zrobić folder Arkanoid
https://github.com/ArturKnopik/Game/blob/master/Learn_Game/

Poza tym dobrze jest, jak projekty mają podobną strukturę wewnętrzną. A tutaj znowu - mamy plik ArkanoidPlayingGameState.cpp ale nie ma już TibiaPlayingGameState.cpp.(edit: chociaż jak patrzę, to inne projekty mają same GameState, bez Playing, czyli niby jest pewna konsekwencja).

Jest za to TibiaAnimationController.cpp, ale już ArkanoidAnimationController.cpp nie ma.
Czyli mogę się domyślać, że każdą grę tworzysz całkowicie inaczej i mogę przypuszczać, że nie wykorzystujesz dobrze wspólnego core'a (domyślać, bo patrzę po nazwach plików, nie wnikałem w kod).

Swoją drogą Tibia, Mario - nie wiem, czy to dobry pomysł nazywać swoje projekty tak samo jak te istniejące. Arkanoid niby też, ale ta nazwa jakoś stała się bardziej pospolita niczym Tetris.

0

próba oddzielenia warstwy danych od warstwy prezentacji była w arkanoidzie i z czystym sumieniem mogę napisać ze jest to do niczego...
ps: wszystko co pisze oczywiście przedstawia mój tok myślenia podczas pisania apki, niekoniecznie musi być to słuszne :)

2

Z jednej strony frontend to nie moja bajka, ale jak widzę coś takiego, to aż mnie skręca:
title

To jest OBRZYDLIWE! Nie wiem już co gorsze - te kolory, czy brak wyśrodkowania..

1 użytkowników online, w tym zalogowanych: 0, gości: 1