#include #include #include #include #include #include using std::string; using std::vector; SDL_Surface* LoadImage(string); void ApplySurface(int, int, SDL_Surface*, SDL_Surface*); void Menu(); char* GetOption(int); const int ScreenWidth = 1000; const int ScreenHeight = 800; const int ScreenBPP = 32; int State = 0; SDL_Surface *Screen = NULL; int main(int argc, char *argv[]) { if(SDL_Init(SDL_INIT_EVERYTHING) == -1) return -1; else if(TTF_Init() == -1) return -1; Screen = SDL_SetVideoMode(ScreenWidth, ScreenHeight, ScreenBPP, SDL_SWSURFACE); if(Screen == NULL) return -1; while(true) { switch(State) { case 0: Menu(); break; } } } SDL_Surface* LoadImage(string Image) { SDL_Surface* LoadedImage = NULL; SDL_Surface* OptimizedImage = NULL; LoadedImage = IMG_Load(Image.c_str()); if(LoadedImage != NULL) { OptimizedImage = SDL_DisplayFormat(LoadedImage); SDL_FreeSurface(LoadedImage); } return OptimizedImage; } void ApplySurface(int XCoor, int YCoor, SDL_Surface *Source, SDL_Surface *Destination) { SDL_Rect Offset; Offset.x = XCoor; Offset.y = YCoor; SDL_BlitSurface(Source, NULL, Destination, &Offset); } void Menu() { bool Running = true; int Displace = 0, Counter; const int OptionCount = 4; SDL_Event Event; TTF_Font *Font = NULL; SDL_Color TextColor = {192, 192, 192}; SDL_Surface *Background = NULL; vector Button(OptionCount); vector Message(OptionCount); SDL_WM_SetCaption("Mirrors of Elixia :: Menu", NULL); Font = TTF_OpenFont("DragonFont.ttf", 28); Background = LoadImage("background.jpg"); Background = SDL_Resize(Background, ScreenWidth, ScreenHeight, false, 3); ApplySurface(0, 0, Background, Screen); for(Counter = 0; Counter < Button.size(); Counter++) { Message[Counter] = NULL; Message[Counter] = TTF_RenderText_Solid(Font, GetOption(Counter), TextColor); Button[Counter] = NULL; Button[Counter] = LoadImage("button.jpg"); Button[Counter] = SDL_Resize(Button[Counter], Button[Counter]->w / 2, Button[Counter]->h / 2, false, 3); ApplySurface(ScreenWidth - Button[Counter]->w - 10, 15 + Displace, Button[Counter], Screen); ApplySurface(ScreenWidth - Button[Counter]->w + 40, 45 + Displace, Message[Counter], Screen); Displace += Button[Counter]->h + 20; } if(SDL_Flip(Screen) == -1) return; while(Running) { while(SDL_PollEvent(&Event)) { if(Event.type == SDL_QUIT) Running = false; } } SDL_FreeSurface(Background); SDL_FreeSurface(Screen); SDL_Quit(); return; } char* GetOption(int Code) { switch(Code) { case 0: return "New Game"; break; case 1: return "Saved Game"; break; case 2: return "Settings"; break; case 3: return "Exit"; break; } }