====== Pong ====== ===== Inhalt ===== - [[sdl:pong:sdlready|SDL Vorlage editieren]] - [[sdl:pong:createobjects|Das Klassengerüst erstellen]] - [[sdl:pong:loadimages|Bilder laden und Koordinaten vergeben]] - [[sdl:pong:movement|Bewegungen hinzufügen]] - [[sdl:pong:physic|Physik und Kollisionskontrolle]] - More to come~ ===== 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 Weiter geht es mit dem Bereitmachen von dem [[sdl:pong:SDLready|vorgegebenen SDL Code]].