Ten artykuł został stworzony dla starszych wersji GameMakera i może nie być aktualny.

C++ Programowanie Gier - Część 1

Niedziela, 22 Listopada 2009, 00:52
Czas czytania 0 minut, 21 sekund
Jest to część pierwsza poradnika odnośnie pisania gier w języku C++.
W części pierwszej dowiemy się rzeczy teorii ogólnej, poznamy strukturę gry. Kolejne części planuję wydawać co tydzień lub dwa.
Poradnik jest w formacie PDF więc zapraszam do obejrzenia/pobrania go tutaj:
C++ Programowanie Gier - Część 1.pdf
Mam nadzieję, że przyda się nie jednej osobie i czegoś nowego się z tego poradnika dowiedzą :)
Projekt Visual C++ z kodem źródłowym lekcji znajdziecie tutaj:
ProtoGame1.zip
Komentarze (łącznie 37, wyświetlam 1 - 15):
S
Snake (Nie., 22 Lis. 09, 10:27)
#1

"Procedura ta musi być statyczna, po to byśmy mogli użyć jej przy opisywaniu klasy okna (chodzi o przypisywania wskaźnika na nią, co jest niemożliwe/problematyczne, gdy nie jest statyczna)"
Jest możliwe. Bardziej chodzi o to, że parametry funkcji nie będą się zgadzać (metody niestatyczne mają dodatkowy, niejawny parametr - wskaźnik "this" ), co prawdopodobnie skończyło by się crashem, gdyby posłużyła jako callback.
Co do wywoływania scen ze wskaźnika na funkcje... nie lepiej by było użyć polimorfizmu ?
I nie lepiej byłoby zamiast tego "while ( wykonuj == true )" zrobić pętlę nieskończoną i używać break do przerwania ? No chyba, że z jakiegoś powodu pętla musi być wykonywana do końca ;p

Art w sumie może być, na pewno komuś się przydadzą zawarte w nim informacje - dobra robota! :P

HuderLord (Nie., 22 Lis. 09, 11:43)
#2

Wiele rzeczy trzeba samemu sie domyślać. Bo te funkcje z winAPI słabo wytłumaczyłeś np:
MSG msg; // ostatni komunikat
HWND hwnd; // uchwyt okna
WNDCLASS wndc; // klasa okna
dlaczego taki jest zapis? co to jest MSG a msg/ HWND a hwnd itd.
domyślam się że to deklaracja zmiennych ale w takim razie skąd takie dziwne typy się biorą?

i dlaczego w funkcji poniżej odwołuje się do nich poprzedzając znakiem "&"
PeekMessage( &msg,[...] )

Will (Nie., 22 Lis. 09, 12:11)
#3

Ogólnie nie jest najgorzej. Taki artykuł trzeba skonsultować najpierw z kilkoma docelowymi czytelnikami. Jeśli już nie tworzy się kodu zgodnego z zasadami programowania obiektowego należy napisać, że jest to szkielet tylko poglądowy i czytelnik nie powinien używać go w większych projektach. Również używanie określeń w stylu: alarm, scena(a raczej jej wytłumaczenie)czy aktor nie jest dobrym pomysłem jeśli nie napiszesz, że jest to nazewnictwo używane przez Ciebie. Moim zdaniem powinieneś na początku przedstawić strukturę gry dla dużego projektu tak dla poinformowania, że czytający nauczą się tworzyć prosty szkielet dla bardzo prostych gier.

Tymon (Nie., 22 Lis. 09, 12:50)
#4

10 minut. :)

ZeroXbot (Nie., 22 Lis. 09, 13:23)
#5

No nareszcie dowiedziałem się o co chodzi z tymi kontenerami :P Prócz tego, to większość wiedziałem (główna pętla itp.) z tutoriali do SDL-a. Pozatym do eventów klawiatury czy myszki są odpowiednie funkcje w tej bibliotece (SDL) i ich używam. Z czego mam więc się uczyć korzystać?

HuderLord (Nie., 22 Lis. 09, 14:34)
#6

to wytłumaczy mi ktoś skąd się wzięły te typy: MSG HWND WNDCLASS jakie wartości przyjmują?

S
Snake (Nie., 22 Lis. 09, 14:40)
#7

Poczytaj o podstawach WinAPI: xion.org.pl/.../3_1.html albo darkcult.gamedev.pl/kursy/api1.html
BTW. W artykule należało by wspomnieć o tym, że wymagane są podstawy albo napisać więcej o programowaniu z użyciem WinAPI.

Roki (Nie., 22 Lis. 09, 15:17)
#8

Pobrałem kod, wrzucilem na Dev C++, a tu:

Kompilator: Default compiler
Wykonywanie g++.exe...
g++.exe "C:UsersPrzemekDesktopprotogame1main.cpp" -o "C:UsersPrzemekDesktopprotogame1main.exe" -I"C:AplikacjeDev-Cpplibgccmingw323.4.2include" -I"C:AplikacjeDev-Cppincludec++3.4.2backward" -I"C:AplikacjeDev-Cppincludec++3.4.2mingw32" -I"C:AplikacjeDev-Cppincludec++3.4.2" -I"C:AplikacjeDev-Cppinclude" -L"C:AplikacjeDev-Cpplib"
C:UsersPrzemekDesktopprotogame1main.cpp: In constructor `CInterface::CInterface()':
C:UsersPrzemekDesktopprotogame1main.cpp:34: error: `strcpy_s' undeclared (first use this function)
C:UsersPrzemekDesktopprotogame1main.cpp:34: error: (Each undeclared identifier is reported only once for each function it appears in.)

Wykonanie zakończone


Przy kompilacji :(

P
PsichiX (Nie., 22 Lis. 09, 15:40)
#9

Roki: Bo na końcu napisałem że to jest projekt Visual C++ a nie Dev C++ :P nie skompilujesz bez podmiany pewnych funkcji. Tak więc radzę porzucić deva ;)
Dzięki za krytykę, zawsze to drogowskaz. No i w sumie kolejne części będę konsultował z kilkoma osobami obeznanymi w temacie :)

Roki (Nie., 22 Lis. 09, 15:50)
#10

Fajnie, no to chyba se skombinuje Visuala :P
A tak ogólnie to tutorial miły, bardzo przydatny :D

koko123 (Pon., 23 Lis. 09, 18:39)
#11

Dlaczego 'X' nie działa? ;p

P
PsichiX (Pon., 23 Lis. 09, 18:45)
#12

mi dziala :0

gnysek (Pon., 23 Lis. 09, 21:01)
#13

@PsichiX: wiesz, artykuły można zawsze poprawiać. To nawet wskazane, bo zawsze za rok, za dwa umiesz coś więcej :)

Crack (Pon., 23 Lis. 09, 21:29)
#14

Fajne ;) postarałeś się, naprawdę.
Wszystko ładnie i bardzo dobrze, że cały kod jest w jednym pliku źródłowym, niektórzy mogliby się nie połapać ;)

XxMichałxX (Pią., 27 Lis. 09, 15:34)
#15

ja przeczytałem i rezygnuje z robienia gier w c++ jak narazie, jestem jeszcze za głupi żeby to wszystko obczaić ;d ogólnie dla mnie to idiotyzm z tymi wszystkimi funkcjami, jakby poprostu nie mogło być tak łatwo jak w gm, to nie kurcze int main, include, 50 razy wszystko inicjowac trzeba, jakieś chore nazwy..

Najnowsze wersje GameMakera:

Stabilna
2024.2.0.132 • 2024.2.0.163
wydana 25 dni temu
LTS
2022.0.2.51 • 2022.0.2.49
wydana 164 dni temu
Beta
2024.400.0.526 • 2024.400.0.547
wydana  2 dni temu
= IDE, = Runtime
Użytkownicy online
1 użytkownik aktywny:
gości: 1,
(~ostatnie 15 minut)
Discord
44 użytkownicy online na discordzie:
s..., Alice, Nitro Slav, Carl-bot, p..., Voytec, Grela, Wielki Druid, Add92, Kuzyn, OdrzuconyKrakers, fervi, m..., YoungKrystian, Sevitaus, Radek Ignatów, Kalor, r..., antek, 🧁Cupcake🧁, Uzjel, lethian, MKP (GEM), Arrekin, MagnusArias, Dyno, 🆅🅸🆃🅾74🅼, Deusald, ZYGZAK, 𝕳𝖚𝖌𝖔 𝕲𝖔𝖓𝖝𝖆𝖑𝖊𝖝, Miłosz, Marco, LeD, Ulti, m..., LadyLush, bagno, Mtax, DungeonFairy🧚, Alkapivo, Nikas, Shockah, Kandif, xVANiLL
Shoutbox
I am Lord (19:15, 17.03.24)
6h mam na to hmmm
I am Lord (19:06, 17.03.24)
Ale temat fajny
gnysek (01:33, 13.03.24)
Powinno działać, jest w kodzie sortowanie wg. najbliższego startu :)
Uzjel (21:59, 11.03.24)
Nie, ale za pierwszym razem zrobiłem fuckup, że było "Tura testowa" X_X
I am Lord (16:58, 11.03.24)
A co Uzjel już masz nawymyślane 100 tematów? 😅
Uzjel (20:08, 10.03.24)
@gnysek a jak bym dodał kilka lig na raz to walnie?
Uzjel (20:08, 10.03.24)
Liga będzie zawsze od piątku 16:00 do poniedziałku 23:59, zawsze w środku miesiąca.
gnysek (08:48, 10.03.24)
Tak, to też jest do poprawy X_X
Adriann (18:22, 09.03.24)
Tylko myślę czy nie leiej gdyby mówiło że zostało tyle i tyle dni i ileś godzin a nie tylko w godzinach ;d Albo konkretna data obok, byłoby czytelniej
I am Lord (15:08, 08.03.24)
o super z tą ligą :)
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?