Pong

Inhalt

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) 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 <cstdlib>
#else
    #include <stdlib.h>
#endif
#ifdef __APPLE__
#include <SDL/SDL.h>
#else
#include <SDL.h>
#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 <cstdlib>
#else
    #include <stdlib.h>
#endif
#ifdef __APPLE__
#include <SDL/SDL.h>
#else
#include <SDL.h>
#endif

Der Teil mit dem #include <SDL.h> 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 <cstdlib>
#else
    #error A C++ Compiler is required for OOP!
#endif
 
#ifdef __APPLE__
  #include <SDL/SDL.h>
#else
  #include <SDL.h>
#endif

Weiter geht es mit dem Bereitmachen von dem vorgegebenen SDL Code.