Witam, napisałem grę w C++ polegająca na dojściu od startu do mety.
Tryb tekstowy. Rozmiar planszy dowolny (ale może się krzaczyć wyświetlanie jak wpiszemy duży rozmiar planszy bo za małe okienko konsoli jest i brzydko to wygląda powyżej ok. 30). Program napisany obiektowo.
Plansza jest listą 4-kierunkową (np. pole wewnątrz planszy ma wskaźniki do lewego elementu, prawego, górnego i dolnego).
Sterowanie: WSAD, można wpisać całą sekwencję ruchów naraz (np sssdd oznacza 3 ruchy w dół i 2 w prawo), do gry dorobiłem drobną fabułę, przejścia między polami są punktowane (od każdego pola w 4 strony nie liczba skrajnych pól gdzie można iść w 2 lub 3 kierunkach). Jak wyjdziemy poza planszę, to game over. Jak 2 razy wejdziemy na to samo pole, to game over (jak w snake'u), ruchy w górę i w lewo są punktowane podwójnie (utrudnienie bo meta jest w prawym dolnym rogu i żeby zdobyć dużo pkt trzeba się trochę nakombinować).
Kod źródłowy
Binarka
Czekam na komentarze, oceny, uwagi, ogólnie chciałbym wiedzieć co robię źle, co można poprawić (może nie tyle w samej grze ale jeżeli chodzi o mój styl pisania bo wiem że jest daleki od ideału), będę bardzo wdzięczny za wszelkie wskazówki.
Pozdrawiam.
[C++] Gra "Wieża"
- funkcja WczytajRozmiarIPokazFabule, myślę że lepiej by było stworzyć dwie osobne funkcje, aby nie łamać reguły "zasady pojedyńczej odpowiedzialności",
http://wyprogramowanie.blogspot.com/200 ... lnoci.html
- a to tylko propozycja (jeśli oczywiście nie znasz) możesz spróbować dokumentować kod w formacie np. zgodnym z Doxygen http://www.stack.nl/~dimitri/doxygen/ pozwoli to na automatyczne generowanie dokumentacji
Jeśli nauczysz się pewnych nawyków przy małych projektach to przy dużych będzie jak znalazł
http://wyprogramowanie.blogspot.com/200 ... lnoci.html
- a to tylko propozycja (jeśli oczywiście nie znasz) możesz spróbować dokumentować kod w formacie np. zgodnym z Doxygen http://www.stack.nl/~dimitri/doxygen/ pozwoli to na automatyczne generowanie dokumentacji
Jeśli nauczysz się pewnych nawyków przy małych projektach to przy dużych będzie jak znalazł
Kilka poprawek:
- poprawione odświeżanie (czyszczenie ekranu po każdym ruchu);
- dodane pułapki na 10% pól;
- zapętlenie gry;
Kod źródłowy
Binarka
- poprawione odświeżanie (czyszczenie ekranu po każdym ruchu);
- dodane pułapki na 10% pól;
- zapętlenie gry;
Kod źródłowy
Binarka
Luminofor => może ci się przyda, kiedyś interesowałem się pisaniem gier na DOSa jeszcze. Otóż tak gry nie czyszczą ekranu, to straszna strata czasu, robi się to tak, że zamiast czyścić ekran dla każdej klatki w RAM jest bufor ekranu, i tam się rysuje całą nową klatkę i wysyła ją na ekran bez jego czyszczenia jak jest gotowa. Stosuje jeszcze wiele sztuczek, no ale nie wiem na jaki procesor piszesz i czy masz do dyspozycji DMA.
Ogólnie zasada jest taka że wszystko to co się da zrzuca się na sprzęt. Np. jeżeli wyświetlasz dajmy na to na wyświetlaczu z N3310, to jak użyjesz sprzętowego SPI i przerwań do wysyłania danych o następnej klatce do wyświetlacza, budując proste sprzętowo-programowe DMA w tym celu, to się okaże że między wysłaniem kolejnych danych masz ok 8 taktów zegara (wysłanie 1 bajtu przez SPI) dla siebie, w czasie których procesor może już obliczać następny ruch i klatkę (jeżeli masz 2 bufory graficzne w RAM), co przyśpieszy program ok 2 do 3x.
Odpowiednio kombinując można naprawdę sporo robić sprzętowo, o niebo szybciej, do odtwarzania dźwięku wykorzystać przerwania od jakiego Timera, aby wstawiać kolejne dane o melodii itd. Pamiętajmy że na C64 robiono wspaniałe gry mając 10x słabszy procesor od AVRa taktowanego 8MHz.
Ogólnie zasada jest taka że wszystko to co się da zrzuca się na sprzęt. Np. jeżeli wyświetlasz dajmy na to na wyświetlaczu z N3310, to jak użyjesz sprzętowego SPI i przerwań do wysyłania danych o następnej klatce do wyświetlacza, budując proste sprzętowo-programowe DMA w tym celu, to się okaże że między wysłaniem kolejnych danych masz ok 8 taktów zegara (wysłanie 1 bajtu przez SPI) dla siebie, w czasie których procesor może już obliczać następny ruch i klatkę (jeżeli masz 2 bufory graficzne w RAM), co przyśpieszy program ok 2 do 3x.
Odpowiednio kombinując można naprawdę sporo robić sprzętowo, o niebo szybciej, do odtwarzania dźwięku wykorzystać przerwania od jakiego Timera, aby wstawiać kolejne dane o melodii itd. Pamiętajmy że na C64 robiono wspaniałe gry mając 10x słabszy procesor od AVRa taktowanego 8MHz.
Ciekawa prosta gierka, sam kiedyś podobną napisałembędę bardzo wdzięczny za wszelkie wskazówki.
W mojej gierce, też jest plansza, z tym, że gracz nie widzi mapy, widzi tylko pola, obok których stoi - można powiedzieć, że potrzebna jest wyobraźnia
Gra: http://www.speedyshare.com/files/20362875/miniRPG.rar
Źródła: http://pastebin.pl/16783
PS. Co do uwag, to koniecznie dodaj losowe przeszkody na planszy, bo aktualnie opłaca się tylko jedna strategia.
Ostatnio zmieniony 16 sty 2010, 13:00 przez Kuna, łącznie zmieniany 1 raz.