Utóbbi időben hobbiból apróbb 2D-s játékokat fejlesztgetek C++ nyelven. Miért C++? Azért erre esett a választásom, mert széles körben használt, rugalmas és gyors. Úgy döntöttem, hogy a következő ilyen apró játék alkotási folyamatát megosztom veletek, hátha más is rákap és hamarosan ellepik a magyar alkalmazások a PPA-kat. Ezzel a céllal írtam meg az első blogbejegyzésem.
Mivel a bejegyzés címében "bevezetés" áll, a játék, amit meg fogok írni (és remélhetőleg sokan mások velem együtt), és részletesen elmagyarázni, az egy elég egyszerűen kivitelezhető pong klón lesz. Két oldalt 1-1 "léccel" amik között egy labda pattog, a cél, hogy az egyik játékos gólt lőjön. Mindent megpróbálok a lehető legegyszerűbben és legérthetőbben megírni, és a lehető legjobb magyarázatot szolgáltatni a kódokhoz.
A sorozatban nem térek ki a programozás alapjaira, így aki alapfogalmakkal nincs tisztában, mint például változó, mutató, objektum, osztály annak ez a leírás nem feltétlen válik hasznára. Nem fogok kitérni a C++ nyelv sajátosságaira, de a nyelv behatóbb ismerete nem feltétlen lesz szükséges a leírás megértéséhez. Tehát elsősorban azoknak javaslom az olvasását, akik tisztában vannak a programozás alapjaival, szeretnének megismerkedni a C++-szal (ugyanakkor némi alapismeret az szükséges a nyelvel kapcsolatban) és/vagy a játékprogramozás alapjaival. Ha sok a pozitív visszajelzés, akkor lehetséges, hogy néhány nehezebb témát is érinteni fogok a sorozat végén, mint például hálózaton keresztüli több játékos mód.
Én a leírás során Code::Blocks nevű fejlesztői környezettel és gcc fordítóval fogok dolgozni, ezért a leírás olvasóinak is ezt ajánlom. Ha valaki régebb óta programozik C++-ban, akkor jó eséllyel vannak saját jól megszokott eszközei és elegendő tudása ahhoz, hogy az itt olvasottakat más fejlesztői környezetben is alkalmazni tudja. A játék fejlesztéséhez úgy döntöttem, hogy az SFML (Simple Fast Media Library) nevű függvénykönyvtárat fogom felhasználni. Ez hasonló az SDL-hez viszont vele ellentétben C++-ban íródott, ezért jobban beleillik a mi programunkba, valamint OpenGL renderert használ, ezért jobb teljesítményt érhetünk el vele. Az SFML segítségével fogjuk: létrehozni az ablakot, kirajzolni az alakzatokat, frissíteni a képernyőt, hangokat lejátszani. Emellett segít majd nekünk a koordinátákkal és a mozgással való számolásban. FIGYELEM: Sajnos az SFML jelenlegi stabil és tárolókban is megtalálható verziója (1.6) nem szereti az ATI kártyákat bináris driverrel, tehát ilyen kártyák esetén előfordulhat, hogy a program kifagy induláskor. A 2-es verzióban ez javítva lesz, ez azonban még nem jelent meg, valamint változott az API, tehát az én leírásom nem működik vele.
Na akkor a hosszú bevezető után kezdjünk is bele :)
Első feladatunk a szükséges csomagok telepítése.
Nyissunk meg egy terminált és írjuk be a következőket:
sudo aptitude install codeblocks build-essential libsfml-dev libsfml-doc libsfml1.6-dbg
Ezután Alkalmazások->Fejlesztés menüpont alatt megtaláljuk Code::Blocksot. Ha rákérdez a fordítóra bátran jelöljük be gcc-t és nyomjunk OK-ot. Ezután állítsuk be a felhasználói felületet a nekünk tetsző módon (a menüsor alatt áthúzással igazgathatunk a paneleken).
Mivel már így is elég hosszú ez a bejegyzés ezért az első rész csupán ennyit tartalmaz, de kis szerencsével még ma jöhet a folytatás.
Megjegyzés: Amennyiben az általunk írt alkalmazásban akadozó mozgást veszünk észre, próbáljuk meg a compiz vagy kwin kikapcsolása után is.
Szerk.: Amennyiben a program majd fordításkor GL/gl.h nevű fájlt hiányolna, telepítsétek a következő csomagot is: libglu1-mesa-dev. Valamint a MARS nevű játék ha telepítve van, akkor conflict léphet fel, mivel az az SFML 2 fejlesztői verzióját használja.