Skocz do zawartości

Podstawy Pisania Gier W C++


Xarfron

Rekomendowane odpowiedzi

cze

 

więc tak nie mam pojęcia na jakiej pisze się grę w c++, parę razy próbowałem to zrozumieć ale jedyne co mi wychodzi to linearne wykonywanie kodu, np. do robienia prostych programów.

 

 

Nie chodzi mi tu też o żadne biblioteki np. allegro.

Chodzi oto jak to wszystko złożyć w jedną całości,

wiem ze jest jakaś pętla główna, ale w ogóle się w tym nie orientuje X.x

jako takie jeśli chodzi o c++ pojęcie mam, 

znaczy no np. nigdy jeszcze nie stosowałem ale wiem o dziedziczeniu mniej lub więcej

wskaźnikach,jak tworzyć własne funkcje itp.

ale brakuje mi umiejętności praktycznej (hmm może bardziej zrozumienia zasady działania), jaki schemat powinna mieć jakaś prosta gra, oczywiście chodzi o gry nie tekstowe, tą z zgadywaniem liczby już mam za sobą. -_-'

 

kurcze ciężko mi powiedzieć o co mi dokładnie chodź, ale ma nadzieje ze zrozumieliście :P 

Odnośnik do komentarza
Udostępnij na innych stronach

No zrób po kolei:

klasy(wcale nie muszą być) bohaterów potworów lub coś w tym rodzaju,

potem funkcje no... np. Ai potworów, przedmioty, jakieś inventory

przed pętlą główną inicjujesz np. plecak, dodajesz potwory, ustawiasz pozycje.

pętla główna: ai, dodawanie przedmiotów, wyrzucanie, bicie potwora, chodzenie bohatera itd...

(potrafię robić takie gry, rozumiem działanie ale nie chce mi się uczyć tych wszystkich OpenGLów i DirectX ehh to se odpuściłem te gierki na jakiś czas :D)

Odnośnik do komentarza
Udostępnij na innych stronach

(potrafię robić takie gry, rozumiem działanie ale nie chce mi się uczyć tych wszystkich OpenGLów i DirectX ehh to se odpuściłem te gierki na jakiś czas )

 

Dzięki za poprawę humoru.

 

Co do tematu. Każda gra jest na swój sposób inna i jak to zostanie poskładane w głównej mierze zależy od Ciebie. Spróbuj napisać coś w konsoli jakieś

KvK. Zastanów się co program ma robić, jakie akcje wykonywać, kiedy i w jaki sposób. Rozpisz sobie wszystko a następnie zastanów się jak to zrealizować. Co do budowy większych gier nie masz na razie co się przejmować z czasem i doświadczeniem dojdziesz i do tego.

Odnośnik do komentarza
Udostępnij na innych stronach

Jest to programowanie zorientowane obiektowo. Naprawdę przydatny wzorzec, jakby nie patrzeć. ;)

 

Możesz podać jakieś źródła do tego "wzorca" ?

 

to samo co wyżej mianowicie co to ?

 

Chodziło mi po prostu o popularną grę kółko vs krzyżyk w ostateczności jakieś statki.. Niby proste a wielu "pro" nie potrafi nawet tego. Z doświadczenia wiem, że na pewno rozjaśni to wiele wątpliwości.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...

Robiąc grę, w SDLu, Allegro, OpenGLu - czymkolwiek musisz pamiętać o głównej pętli programu oraz 5 podstawowych funkcjach. Jest to przydatny schemat, nie zrobi gówna w twoim kodzie. Wygląda to mniej więcej tak:

 

int main(){

 

Inicjalizacja();

 

while(Gramy){

ObslugaZdarzen();

AkcjePetli();

Wyswietlanie();

 

 

}

 

Sprzatanie();

 

}

 

Oczywiście dodajemy takie bajery jak sprawdzanie poprawności inicjalizacji i tak dalej, ale to wiadomo.

Teraz po krótce co robią te funkcję. Dodam też ang. nazwy których często się dla nich używa, sam cisne z tym schematem i jest klasa.

 

 

Inicjalizacja (bool onInit()) => w tej funkcji, jak sama nazwa wskazuje, zajmujesz się initem. Inicjalizujesz środowisko graficzne, wczytujesz czcionki, mapy, tekstury dla bohaterów. Typ funkcji najlepiej bool - łatwo powiedzieć programowi, że coś się spierdzieliło i szybko zakończyć pokaz.

 

<- PĘTLA GRY ->

 

Obsluga zdarzeń (void onEvent()) => w tej funkcji z kolei, przyjmuje się wszystkie zdarzenia...Czyli co? Ano np. kliknięcia myszką, wciśnięcie klawiszy. Jeżeli wykonamy jakąś akcję można odpalić inną funkcję, która odpowiednio zareaguje (np. na wciśnięcie ESCAPE, ustawisz zmienną Gramy na 0, czyli false).

 

Akcje petli (void onLoop()) => dziwnie to po polsku brzmi, ale całość jest prosta. W tej funkcji po prostu doliczamy wszelkie wartości. Np. chcesz zmienić klatkę postaci w każdej pętli, robisz ruch komputerem w kółko i krzyżyk - sprawdzasz, robisz to tutaj.

 

Wyswietlanie (void onRender()) => tutaj po prostu wyświetlasz na ekranik, wszystko to co ma się wyświetlić. Ta funkcja jest na końcu, wkońcu wcześniej musisz sprawdzić, czy nikt się nie bawił klawiaturką i nie ruszył się twoim bohaterem ;) Oczywiście double buffering obowiązkowy :P

 

<- KONIEC PĘTLI GRY ->

 

Sprzątanie (void onCleanUp()) => w tej ostatniej funkcji usuwasz wszelkie stworzone dynamicznie obiekty, powierzchnie graficzne, usuwasz z pamięci bzdety, a na samym końcu wyłączasz swoją graficzkę ;)

 

 

Dodatkowo polecam zrobić klasę główną na grę. Wtedy zamiast tych funkcji w main, dasz je w swojej klasie (a w main oddasz kontrolę nad programem dla niej). Będziesz miał wszystko w jednym miejscu. Do tego robisz klasę dla tzw. Entity (NPC, ruszających się bajerów, albo przedmiotów na mapię mających jakąś własność - np. kolce w Mario), a także klasę Player/Gracz, która po Entity dziedziczy. Wiadomo, że im ładniej sobie to podzielisz, tym łatwiej będzie się w kodzie poruszać.

 

Taką właśnie metodą zrobiłem nawet to kółko i krzyżyk w SDLu ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Możesz podać jakieś źródła do tego "wzorca" ?

Może źle zrozumiałem ale:

http://pl.wikipedia.org/wiki/Programowanie_obiektowe

paradygmat programowania

http://pl.wikipedia.org/wiki/Paradygmat_programowania

 

I nie wiem czemu wpadasz sobie tak na to forum żeby tak ponarzekać JACY to użytkownicy GMClanu są tępi na temat programowanie, szczególnie C++.

Odnośnik do komentarza
Udostępnij na innych stronach

Może źle zrozumiałem ale:

Źle zrozumiałeś.

I nie wiem czemu wpadasz sobie tak na to forum żeby tak ponarzekać JACY to użytkownicy GMClanu są tępi na temat programowanie, szczególnie C++.

Jak będziesz się uczył skakać ze spadochronem i instruktor zauważy błąd to znaczy, że uznaje Cię za debila? Teraz jakiś newbie przeczyta post progio gdzie jest kilka błędów i ma potem ciągle powielać błędne schematy?

Odnośnik do komentarza
Udostępnij na innych stronach

Jak będziesz się uczył skakać ze spadochronem i instruktor zauważy błąd to znaczy, że uznaje Cię za debila? Teraz jakiś newbie przeczyta post progio gdzie jest kilka błędów i ma potem ciągle powielać błędne schematy?

Nie o to chodzi, wg. wikipedii OOP to wzorzec, ja temu źródłowi wierzę.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie o to chodzi, wg. wikipedii OOP to wzorzec, ja temu źródłowi wierzę.

Ja tam wole wierzyć książką pisanym przez profesjonalistów i ludzią z wieloletnim stażem. Ale oczywiście nikt nie zabrania Ci wierzyć w to co chcesz.

 

Will, wiadomo że ów schemat jest tylko wieelkim ogólnikiem, i tak na prawdę trzeba go rozbudować do własnych potrzeb. Powiedz jednak, gdzie widzisz kilka błędów.

 

To było bardziej użyte w celu wytłumaczenia. Ale zastanowiłbym się nad kilkoma kwestiami : środowisko graficzne(co masz tutaj na myśli chodzi o biblioteke graficzną czy o środowisko systemu), tekstury dla bohaterów,ta w akcja/update sceny w pętli też jakoś tak nie bardzo jeśli chodzi ogólnie o gry. Jeszcze kilka innych błędów ale ogólnie ok jak dla mnie możesz to rozwinąć trochę, poprawić i napisać jakiś artykuł.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Wracając do wzorca, to zgodzę się z Willem. Od biedy można by to było tak nazwać, ale... wzorce projektowe w informatyce stosuje się do zupełnie innych kwestii. Dlatego też trzymajmy się określenia paradygmatu. Porządek być musi. :)

Odnośnik do komentarza
Udostępnij na innych stronach

To było bardziej użyte w celu wytłumaczenia. Ale zastanowiłbym się nad kilkoma kwestiami : środowisko graficzne(co masz tutaj na myśli chodzi o biblioteke graficzną czy o środowisko systemu), tekstury dla bohaterów,ta w akcja/update sceny w pętli też jakoś tak nie bardzo jeśli chodzi ogólnie o gry. Jeszcze kilka innych błędów ale ogólnie ok jak dla mnie możesz to rozwinąć trochę, poprawić i napisać jakiś artykuł.

 

 

 

Miałem na myśli odpowiednią bibliotekę. Po prostu inicjujesz sobie tryb graficzny w swojej ulubionej bibliotece. Tekstury - no, tu raczej wiadomo. Warto załadować wcześniej wszystkie potrzebne pliki do pamięci. A update w pętli jest "bardzo", jeżeli chodzi o gry. Czemu? A no to proste. Np. możemy tam obliczyć nową pozycję naszej postaci, gdy wcześniej nią ruszymy. Po prostu manipulujemy wszystkimi zmiennymi, i jeżeli trzeba to coś wyliczamy nowego ;S Można to zawrzeć w funkcjach, wywoływanych w onEvent, ale po co? Ja jestem zwolennikiem czytelnego kodu ;S

 

 

 

 

A na artykuł to brak czasu...

Odnośnik do komentarza
Udostępnij na innych stronach

Dobra chyba mnie nie zrozumiałeś xd Plik png czy jpg nie jest teksturą. Update jest najczęściej w funkcji OnUpdate a funkcja loop jest raczej na przetwarzanie komunikatów a jeśli ich nie ma przetwarzamy, renderujemy i updatujemy kolejna klatkę.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...