?
// SDL-, SDL_image-, SDL_mixer- und SDL_ttf-Header einbinden
#ifdef WIN32
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_mixer.h>
#include <SDL_ttf.h>
#else
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_mixer.h>
#include <SDL/SDL_ttf.h>
#endif
#include <iostream>
int main(int argc, char* argv[])
{
// SDL mit dem Grafik- und Audiosystem initialisieren.
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) == -1)
{
// Ups, das hat nicht funktioniert!
// Wir geben die Fehlermeldung aus.
std::cerr << "Konnte SDL nicht initialisieren! Fehler: " << SDL_GetError() << std::endl;
return -1;
}
// Hier erzeugen wir ein Fenster der Gr��e 800x600 Pixel mit 32-Bit Farbtiefe und Double Buffer.
// Wenn Vollbildmodus erw�nscht ist, f�gen wir noch das Flag SDL_FULLSCREEN mittels |-Operator hinzu.
SDL_Surface* screen = SDL_SetVideoMode(800, 600, 32, SDL_DOUBLEBUF);
if(!screen)
{
// Fehler! Fehlermeldung ausgeben und Programm beenden.
std::cerr << "Konnte SDL-Fenster nicht erzeugen! Fehler: " << SDL_GetError() << std::endl;
return -1;
}
// Nun setzen wir noch den Titel des Fensters.
SDL_WM_SetCaption("Game", "Game");
// Hier laden wir unser Bild mit SDL_image.
SDL_Surface* image = IMG_Load("ship.jpg");
SDL_Surface* background_a = IMG_Load("background_a.jpg");
if(!image)
{
// Fehler!
std::cerr << "Konnte das Bild nicht laden! Fehler: " << IMG_GetError() << std::endl;
return -1;
}
// SDL_mixer starten.
const int samplingFrequency = 44100; // 44100 Hz Abtastfrequenz
Uint16 audioFormat = AUDIO_S16SYS; // 16 Bits pro Sample
const int numChannels = 2; // 2 Kan�le = Stereo
const int chunkSize = 4096; // ein guter Wert ...
if(Mix_OpenAudio(samplingFrequency, audioFormat, numChannels, chunkSize) == -1)
{
std::cerr << "Konnte SDL_mixer nicht starten! Fehler: " << Mix_GetError() << std::endl;
return -1;
}
// WAV-Datei laden.
Mix_Chunk* sound = Mix_LoadWAV("SDL_Example_Sound.wav");
if(!sound)
{
std::cerr << "Konnte WAV-Datei nicht laden! Fehler: " << Mix_GetError() << std::endl;
return -1;
}
// OGG-Datei als Musik laden.
Mix_Music* music = Mix_LoadMUS("SDL_Example_Music.ogg");
if(!music)
{
std::cerr << "Konnte OGG-Datei nicht laden! Fehler: " << Mix_GetError() << std::endl;
return -1;
}
// Musik abspielen.
Mix_PlayMusic(music, -1);
// SDL_ttf initialisieren.
if(TTF_Init() == -1)
{
std::cerr << "Konnte SDL_ttf nicht initialisieren! Fehler: " << TTF_GetError() << std::endl;
return -1;
}
// Schriftart "FreeSans.ttf" laden.
TTF_Font* font = TTF_OpenFont("FreeSans.ttf", 12);
if(!font)
{
std::cerr << "Konnte Schriftart nicht laden! Fehler: " << TTF_GetError() << std::endl;
return -1;
}
// Einen Text zeichnen.
SDL_Color textColor = {255, 255, 1};
SDL_Surface* text = TTF_RenderText_Blended(font, "written by Patrick Ratz", textColor);
// In diesem Array merken wir uns, welche Tasten gerade gedr�ckt sind.
bool keyPressed[SDLK_LAST];
memset(keyPressed, 0, sizeof(keyPressed));
// Position des Bilds initialisieren.
SDL_Rect imagePosition;
imagePosition.x = 100;
imagePosition.y = 50;
SDL_Rect background_aPosition;
background_aPosition.x = 0;
background_aPosition.y = 0;
bool run = true;
// die Event-Schleife
while(run)
{
// Wir holen uns so lange neue Ereignisse, bis es keine mehr gibt.
SDL_Event event;
while(SDL_PollEvent(&event))
{
// Was ist passiert?
switch(event.type)
{
case SDL_QUIT:
// Das Programm soll beendet werden.
// Wir merken uns das und brechen beim n�chsten Mal die Schleife ab.
run = false;
break;
case SDL_KEYDOWN:
keyPressed[event.key.keysym.sym] = true;
if(event.key.keysym.sym == SDLK_SPACE)
{
// Sound abspielen
Mix_PlayChannel(-1, sound, 0);
}
break;
case SDL_KEYUP:
keyPressed[event.key.keysym.sym] = false;
break;
}
}
// Hier w�rden bei einem Spiel die eigentliche Spiellogik berechnet
// und Grafiken angezeigt werden.
// Bild je nach gedr�ckten Tasten bewegen.
if(keyPressed[SDLK_LEFT] && imagePosition.x > 0) --imagePosition.x; // Bild nach links bewegen.
if(keyPressed[SDLK_RIGHT] && imagePosition.x + image->w < screen->w) ++imagePosition.x; // Bild nach rechts bewegen.
if(keyPressed[SDLK_UP] && imagePosition.y > 0) --imagePosition.y; // Bild nach oben bewegen.
if(keyPressed[SDLK_DOWN] && imagePosition.y + image->h < screen->h) ++imagePosition.y; // Bild nach unten bewegen.
if(keyPressed[SDLK_ESCAPE]) run = false; // Programm beenden.
// Bildschirm mit Blau f�llen und dann das Bild zeichnen.
SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 255));
SDL_BlitSurface(background_a, 0, screen, &background_aPosition);
SDL_BlitSurface(image, 0, screen, &imagePosition);
// Den Text ausgeben.
SDL_Rect textPosition;
textPosition.x = 10;
textPosition.y = 50;
SDL_BlitSurface(text, 0, screen, &textPosition);
// Dann aktualisieren wir den Bildschirm, damit wir auch etwas sehen.
SDL_Flip(screen);
}
// Bild wieder freigeben
SDL_FreeSurface(image);
SDL_FreeSurface(background_a);
// Sound und Musik aufr�umen und SDL_mixer stoppen
Mix_FreeChunk(sound);
Mix_FreeMusic(music);
Mix_CloseAudio();
// Schriftart und gezeichneten Text freigeben und SDL_ttf herunterfahren
SDL_FreeSurface(text);
TTF_CloseFont(font);
TTF_Quit();
// SDL herunterfahren
SDL_Quit();
return 0;
}
Joa die wikkisammplung hats in sich
Hier mithilfe von copy/paste
Und einigen veränderungen ...
ein code der so in c4droid (wenn gekauft aus google store )
ausführbar ist:
Sdl, text, bitmap und ton + das steuern eines sprites
Code kann nur ausgeführt werden Wenn die ttf,t'bmp und wav datei im selben ordner sind ....