====== Pong ======
===== Pong? Warum Pong? =====
Das erste was man sich natürlich Fragen wird: "Warum Pong?"
Die Antwort ist simpel: Es ist ein Spiel mit wenig Grafikaufwand und einfacher Physik.
Machen wir uns einmal klar, was in Pong so alles passiert:
* Der Ball bewegt sich
* Der Spieler kann sich bewegen
* Ein zweiter Spieler oder eine KI kann sich bewegen
* Es treten Kollisionen auf
* Es gibt eine Siegbedingung
Aber alles zu seiner Zeit. Fangen wir erstmal mit einem Grundgerüst an.
----
===== Dateien =====
Ihr solltet euch folgendes im Vorfeld bereitstellen:
* Pong Bild
* Ball Bild
Denn das ist, was ihr im Endeffekt auf den Bildschirm strahlt. Dies sollte jeder selbst machen, denn es ist nicht schwer, ein bisschen weiß in Paint zu malen und es dann zu dimensionieren. Der Einfachheit halber, werde ich in diesem Tutorial nur mit 16-Bit BMP arbeiten, ihr könnt natürlich auch mit 32-Bit oder JPG(siehe [[sdl:image|SDL_image]]) arbeiten.
Nachdem die Bilder bereit stehen und jeder sich Verinnerlicht hat, was so etwa im Code für abfragen stattfinden müssen, geht es ans eingemachte.
===== Grundgerüst =====
Wenn ihr ein neues SDL Projekt erstellt, wird der erste Code erstmal wie folgt aussehen(oder zumindest so ähnlich):
#ifdef __cplusplus
#include
#else
#include
#endif
#ifdef __APPLE__
#include
#else
#include
#endif
int main ( int argc, char** argv )
{
// initialize SDL video
if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
printf( "Unable to init SDL: %s\n", SDL_GetError() );
return 1;
}
// make sure SDL cleans up before exit
atexit(SDL_Quit);
// create a new window
SDL_Surface* screen = SDL_SetVideoMode(640, 480, 16,
SDL_HWSURFACE|SDL_DOUBLEBUF);
if ( !screen )
{
printf("Unable to set 640x480 video: %s\n", SDL_GetError());
return 1;
}
// program main loop
bool done = false;
while (!done)
{
// message processing loop
SDL_Event event;
while (SDL_PollEvent(&event))
{
// check for messages
switch (event.type)
{
// exit if the window is closed
case SDL_QUIT:
done = true;
break;
// check for keypresses
case SDL_KEYDOWN:
{
// exit if ESCAPE is pressed
if (event.key.keysym.sym == SDLK_ESCAPE)
done = true;
break;
}
} // end switch
} // end of message processing
// DRAWING STARTS HERE
// DRAWING ENDS HERE
// finally, update the screen :)
SDL_Flip(screen);
} // end main loop
// all is well ;)
printf("Exited cleanly\n");
return 0;
}
Ich befasse mich erstmal mit diesem Teil:
#ifdef __cplusplus
#include
#else
#include
#endif
#ifdef __APPLE__
#include
#else
#include
#endif
Der Teil mit dem #include sollte jedem zu diesem Zeitpunkt bereits geläufig sein. Ich werde mal vorrausgreifen: Wir werden Objekte verwenden und deshalb müssen wir diese Stelle bereits etwas editieren. Und zwar zum folgenden:
#ifdef __cplusplus
#include
#else
#error A C++ Compiler is required for OOP!
#endif
#ifdef __APPLE__
#include
#else
#include
#endif