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/files/texts/mgt/html/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.13.1.193 • 2024.13.1.242
wydana 182 dni temu
LTS
2022.0.3.85 • 2022.0.3.99
wydana 317 dni temu
Beta
2024.1400.0.907 •
2024.1400.0.896
 0.17.0

wydana  2 dni temu
= IDE, = Runtime, = GMRT
Użytkownicy online
2 użytkowników aktywnych:
gości: 1, userów: 1
 gnysek
(~ostatnie 15 minut)
Discord
Shoutbox
gnysek (16:01, 16.10.25)
To już google decyduje. Mam wrażenie, ze po datach obcina stare treści.
S
Sutikku (10:42, 14.10.25)
Ja jeszcze trafiam na fora jak szukam konkretnych haseł (chociażby wczoraj zepsuty pendrive który się identyfikuje jako Phison 2307 Boot ROM). Teraz projekty opensource często mają społeczności na discordzie i tam jest tona przydatnych informacji ale niedostępna poza discordem. Fajnie by to było wyeksponować
Korodzik (04:24, 14.10.25)
A w sumie to forum się normalnie indeksuje w wyszukiwarkach? Bo ja stwierdziłem, że np. w Google ciężko znaleźć cokolwiek z gmclanowego forum. Większość tematów jest chyba nieindeksowana od dawna...
S
Sutikku (08:44, 13.10.25)
mam niedokończony projekt bota, którego dodaje się do discorda, a on synchronizuje wiadomości z discorda -> na readonly forum. Wtedy treści mogą być indeksowane z wyszukiwarek i łatwo dostępne bez logowania. No ale leży w czyśćcu i czeka.
Wojo (11:52, 11.10.25)
Może kiedyś powróci moda na fora internetowe. Pamiętam w sumie, że czasami aktywność rosła i malała, ale tak pusto to chyba jeszcze nigdy nie było i myślę, że ta cała migracja użytkowników jest zasługą Discorda i zmiany czasów. Po prostu lata dwudzieste spowodowały zmiany trendów w internecie
S
Sutikku (09:06, 08.10.25)
najwyższa pora zopensourcować kod gmclanu!
gnysek (10:33, 06.10.25)
Może tak zrobię :D Jak znajdę czas :D
I am Lord (10:49, 01.10.25)
Tutaj powinna być na głównej jakaś wielka informacja o tym że na Discordzie teraz wszystko jest
Wojo (20:34, 17.07.25)
Discordy i Facebooki pogrzebały erę forów internetowych...
gnysek (10:36, 04.07.25)
Bo wszyscy piszą na discordzie :)
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?