[C++] Gra "Wieża"

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
ODPOWIEDZ
Awatar użytkownika
Luminofor
Użytkownik
Posty: 1373
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

[C++] Gra "Wieża"

Post autor: Luminofor » 15 sty 2010, 17:24

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.

gjakubow
-
Posty: 13
Rejestracja: 19 lip 2007, 23:59
Lokalizacja: Sopot

Post autor: gjakubow » 15 sty 2010, 19:15

- 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ł :)

Awatar użytkownika
Luminofor
Użytkownik
Posty: 1373
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

Post autor: Luminofor » 16 sty 2010, 1:26

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

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 16 sty 2010, 10:35

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.

Awatar użytkownika
Luminofor
Użytkownik
Posty: 1373
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

Post autor: Luminofor » 16 sty 2010, 12:16

kayron, ja nie piszę w asm tylko w c++ ;)

Kuna
Użytkownik
Posty: 130
Rejestracja: 26 lip 2008, 11:03
Lokalizacja: w-wa

Post autor: Kuna » 16 sty 2010, 12:25

będę bardzo wdzięczny za wszelkie wskazówki.
Ciekawa prosta gierka, sam kiedyś podobną napisałem :) Zamieszczę kod źródłowy, może coś podejrzysz.

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 polega na znalezieniu wieży maga.

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.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 16 sty 2010, 12:37

Ale ja też nie pisałem w ASM, tylko w Pascalu. Da sie zrobić i tak i tak, może są niewielkie różnice w prędkości potem, ale przy prostych grach nie aż takie.

ODPOWIEDZ