====== Tic-Tac-Toe - Spielsteine Laden und Anzeigen ====== {{:sdl:tic-tac-toe:grid-with-tiles.png?nolink&300 |Spielfeld mit zwei Spielsteinen}} Nachdem wir bereits das Spielfeld gezeichnet haben wollen wir natürlich auch noch Spielsteine darauf anzeigen. In diesem Schritt werden wir deshalb die Spielsteine aus Bildern Laden und auf das Spielfeld zeichnen. ==== Bilder Laden ==== SDL_Surface* loadBMP( const char* file_name ) { SDL_Surface *tmp = SDL_LoadBMP(file_name); SDL_Surface *image = NULL; if( tmp ) { image = SDL_DisplayFormat(tmp); SDL_FreeSurface(tmp); if( !image ) { std::cerr << "Fehler beim konvertieren: " << SDL_GetError() << std::endl; return NULL; } SDL_SetColorKey ( image, SDL_SRCCOLORKEY | SDL_RLEACCEL, SDL_MapRGB(image->format, 0, 255, 255) ); } else { std::cerr << "Bild(" << file_name << ") konnte nicht geladen werden: " << SDL_GetError() << std::endl; } return image; } \\ // Symbole laden SDL_Surface *circle = loadBMP("circle.bmp"); SDL_Surface *cross = loadBMP("cross.bmp"); ==== Bilder anzeigen ==== Wie bereits [[sdl:load-and-blit-image-bmp#anzeigen|gelernt haben]] können wir Bilder mit [[sdl:lib:SDL_BlitSurface()]] anzeigen. Wir müssen also nur die Position der Spielsteine auf dem 3x3 Raster in Bildschirmkoordinaten umrechnen und können anschließend das Bild einfach in den Bildbuffer kopieren: int x = 0, y = 0; // Die Position des Spielsteines im 3x3 Raster // (x und y müssen jeweils 0, 1, oder 2 sein) // Die Position in Bildschirmkoordinaten umrechnen // 1. Zuerst verschieben wir an die linke obere Ecke des // Kästchen im Raster (x * SIZE/3., y * SIZE/3.) // 2. Jetzt verschieben wir noch das Bild aus den Linien // des Raster heraus (+LINE_WIDTH/2. -> die Linie // in beide benachbarte Kästchen zur Hälfte hinein) // 3. Am Ende addieren wir noch 0.5 um ein Runden der // möglicherweise nicht ganzen Zahlen zu erreichen. SDL_Rect position = { x * SIZE/3. + LINE_WIDTH/2. + 0.5, y * SIZE/3. + LINE_WIDTH/2. + 0.5 }; // Jetzt können wir wie bereits bekannt das Bild auf // die berechnete Position am Bildschirm kopieren. SDL_BlitSurface(cross, NULL, screen, &position); ---- ← **[[sdl:tic-tac-toe:main-and-grid|Grundgerüst und Raster]]** ← | ↑ **[[sdl:tic-tac-toe:start|Tic-Tac-Toe mit der SDL]]** ↑ | → **[[sdl:tic-tac-toe:game-logic|Spiellogik]]** →\\