Tetris obiektowo

Odpowiedz Nowy wątek
2012-03-13 17:20

Rejestracja: 8 lat temu

Ostatnio: 7 lat temu

0

Witam wszystkich którzy zechcą mi udzielić paru rad.
Muszę napisać na czerwiec tetris obiektowo w C++, program ma wykorzystywać dziedziczenie i polimorfizm, wzorce, wyjątki, strumienie (dowolne jedno można pominąć) genrealnie moja przygoda z obiektówką się dopiero zaczyna. Od razu piszę, że nie proszę o kod, broń boże ! Chce sobie to sam napisać, jednak nie wiem jak się za to zabrać od strony obiektowej... Napisałem rok temu tetrisa w C, więc z logiką problemów mieć nie powinienem..
Bardzo proszę o pomoc. Jedyne co 'wiem' to tyle że można zrobić klasę klocek, i różne typy klocka mogą po niej dziedziczyć. Co dalej? W jakich fragmentach kodu można wykorzystać wymienione cechy obiektowe?

Pozostało 580 znaków

2012-03-13 17:35

Rejestracja: 11 lat temu

Ostatnio: 5 lat temu

1

To, ze nie prosisz o kod widac juz po tym, ze bierzesz sie do pracy teraz a nie pod koniec maja. Plus +.
Klasa klocek to jedno, ale druga klasa, to mapa na ktorej tp wszystko sie bedzie odbywalo, to juz dwie klasy. Mapa moglaby byc singletonem i wtedy wykorzystalbys wzorzec projektowy. Moglbys tez na punktacje zrobic kolejna klase, przeladowanie operatora wypisywaloby np liczbe uzyskanych punktow. Postaraj sie metody zamknac w tych klasach aby nie tworzyc funkcji globalnych. Wyjatkiem wyrzuconym mogloby byc zapelnienie mapy klockami


Gdy się nie wie, co się robi, to dzieją się takie rzeczy, że się nie wie, co się dzieje ;-)

Pozostało 580 znaków

2012-03-13 17:36

Rejestracja: 8 lat temu

Ostatnio: 1 rok temu

0

Ja widzę, że Ty nie masz jeszcze pojęcia czym jest obiektowość. Mnie robi się słabo jak pomyślę Sobie, że miałbym napisać tetrisa bez obiektowości, a Ty masz na odwrót. Chyba musisz zacząć czytać jakąś mądrą książkę dopóki Tobie nie zrobi się tak samo jak mi..

pisać o sobie z dużej litery - lmao - Visher 2012-03-13 18:04
Zazwyczaj z szacunku dla drugiego człowieka piszemy "Ty" z wielkiej litery, Ja być może podświadomie szanuję również Siebie, co nie uważam za śmieszne.. A w Angielskim jak piszesz "I"(Ja)?? - kopernik 2012-03-13 18:11
Pomijając już fakt, że piszesz w języku polskim: http://engleash.net/dlaczego-i-jest-zawsze-wielka-litera - Visher 2012-03-13 19:21
a skąd mam wiedzieć, że ten artykuł jest obiektywny? Tak czy siak dalej będę pisał Sobie, a Ty możesz pod każdym moim postem pisać tym slangiem dzieci neo. - kopernik 2012-03-13 19:28
z podświadomego szacunku dla samego siebie, w nadziei abyś nie pisał głupich postów w których nie potrafisz sam ocenić czy artykuł jest obiektywny czy nie, odetnij sobie kabel do internetu. - Visher 2012-03-13 19:49
ale pojechałeś, teksty widać młodszy brat Ci podrzuca.. - kopernik 2012-03-13 19:51

Pozostało 580 znaków

kucyyyk
2012-03-13 19:28
kucyyyk
1

Ja bym zrobił klasę klocek posiadającą mapę klocka. Największy klocek to 4 częściowa linia, więc mapa to 4x4. Pole 0 jest puste, pole zapełnione to klocek. Może to być flaga bitowa oznaczająca obecność, kolor albo nawet obrazek. Zachowanie klocków jest identyczne niezależnie od kształtu, tworzenie osobnych klas dla każdego typu klocka to absurd, ale można je zrobić, po prostu z inną domyślną mapą.
Metoda obrocLewo/obrocPrawo po prostu obraca mapę (kod taki sam dla każdego klocka) itd.

Za wszystko odpowiada główna klasa CGra, sprawdza czy ruch jest dozwolony, przesuwa klocek w dół co jakiś czas (można z tego zrobić osobny obiekt wysyłający powiadomienie - wzór obserwatora? albo bezpośrednio), usuwa pełne linie, wywołuje rysowanie wszystkiego i posiada mapę całej planszy. Do obsługi klawiatury nadaje się wzorzec obserwatora.
Jeszcze klasa do rysowania z ogólnymi metodami i dziedzicząca dla klasy specjalistycznej, która rysuje używając konkretnego api. Klasa dostawałaby mapę do rysowania wraz z współrzędnymi. Można do rysowania użyć wzorca mostu, niepotrzebny ale pasuje.

Można zastosować wzór mediatora dla połączenia funkcjonalności rysowania i logicznej obsługi gry. Można zrezygnować z wzoru obserwatora i włożyć tam też obsługę klawiatury. Zależy od filozofii czy traktujemy wejście jako zdarzenie czy jako stan który może się ew. zmienić.

Tak z grubsza tyle. Ten design umożliwia w prosty sposób różne kolory dla różnych klocków, w zależności od czasu powstania, typu, itd. Można pokombinować tworząć klasę CMapa i przerzucająć część obowiązków na nią...

Wyjątki - dla błędów, np. opengl/cośtam się nie chce zainicjalizować... nie podoba mi się pomysł używania wyjątku jako sygnału końca gry.

Strumienie... można czytać pliki z czymś, może z tablicą wyników?

Uważaj na naturalną pokusę tworzenia rozwiązań ogólnych które umożliwią przeróbkę tetrisa na strzelankę ;) tzw. overengineering. Ktoś kiedyś powiedział "programiści lubią rozwiązywać interesujące problemy więc je tworzą" :)
Tutaj można zastosować większość wzorów projektowych i napierdolić masę klas - tylko po co. Przykładem takiej masturbacji wzorcami byłoby np. użycie wzorca stanu dla obracania klocków :o

Pisząc po ludzku tutaj nie ma miejsca dla wzorców i oop w ogóle poza interakcją z api do rysowania/obsługi klawiatury, a i to tylko po to żeby łatwo było zmienić na inne, co nie ma tutaj żadnego sensu, bo po to są ogólne api jak allegro czy SDL. Kod jest tak prosty, że szybciej napisać całość bez zbędnego oop, bo wszystkiego jest jedna sztuka i nigdy nie będzie rozszerzane - tetris to tetris. Singletony bez dziedziczenia to tylko mądrzejsza nazwa dla zmiennych globalnych i funkcji, a co tu dziedziczyć z głównej gry?

' tutaj nie ma miejsca dla wzorców i oop " - To jest grubą przesadą. to, że można napisać, to bez oop nie oznacza, że nie ma dla nich miejsca. Zwłaszcza, że temp113 podał założenia. - kopernik 2012-03-13 20:04

Pozostało 580 znaków

kucyyyk
2012-03-13 21:29
kucyyyk
0

To jest grubą przesadą. to, że można napisać, to bez oop nie oznacza, że nie ma dla nich miejsca. Zwłaszcza, że temp113 podał założenia.

Napisałem cały post zgodnie z tymi założeniami, w przeciwieństwie do twojego burackiego odesłania do książek. Skończ z masturbacją do samego Siebie.

Masz racje, lepiej przepisać tu pół książki Eckela, chociaż i to było by mało, zwłaszcza, że rozwiązania nasuwają się od razu na myśl człowiekowi, który zna ten paradygmat. - kopernik 2012-03-13 21:38

Pozostało 580 znaków

Odpowiedz

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