menu.cpp 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #include "menu.h"
  2. std::string menu()
  3. {
  4. /// [1] Lancement du menu
  5. // [1.1] Para-fenêtre
  6. SDL_WM_SetCaption("Gravitation Game _ Menu", 0);
  7. // [1.2] Préparation de la fenêtre
  8. SDL_Surface* screen = SDL_SetVideoMode(640, 480, 16,
  9. SDL_HWSURFACE|SDL_DOUBLEBUF);
  10. if ( !screen )
  11. {
  12. std::cout << "menu.h: impossible de créer l'écran. Erreur: " << SDL_GetError();
  13. return "quitter";
  14. }
  15. // [1.3] Préparation des objets
  16. std::string retour("quitter");
  17. SDL_Surface *titre(0);
  18. SDL_Rect positionTitre;
  19. SDL_Color blanc = {255,255,255};
  20. Bouton quitButton(transform("Quit", 30), screen, screen->w-80, screen->h-50);
  21. quitButton.attribuerImg(transform("Quit", 30, blanc));
  22. // [1.4] Préparation du texte
  23. titre = transform("GRAVITATION GAME _ stage select", 40);
  24. positionTitre.x = screen->w/2-titre->w/2;
  25. positionTitre.y = 20;
  26. // [1.5] Préparation du gestionnaireNiveaux
  27. GestionnaireNiveaux interface(screen);
  28. /// [2] Boucle principale évenementielle
  29. bool done = false;
  30. while (!done)
  31. {
  32. // [2.1] Gestion évènements
  33. SDL_Event event;
  34. while (SDL_PollEvent(&event))
  35. {
  36. switch (event.type)
  37. {
  38. case SDL_QUIT:
  39. done = true;
  40. retour = "quitter";
  41. break;
  42. case SDL_KEYDOWN:
  43. if (event.key.keysym.sym == SDLK_ESCAPE)
  44. done = true;
  45. retour = "quitter";
  46. break;
  47. case SDL_MOUSEMOTION:
  48. quitButton.calculer(event.motion.x,event.motion.y);
  49. interface.calculer(event.motion.x,event.motion.y);
  50. break;
  51. case SDL_MOUSEBUTTONUP:
  52. if (event.button.button==SDL_BUTTON_LEFT)
  53. {
  54. if (quitButton.estClique(event.button.x,event.button.y))
  55. done = true;
  56. interface.clic(event.button.x,event.button.y);
  57. }
  58. break;
  59. } // end switch event type
  60. } // end of message processing
  61. // [2.2] Calculs
  62. if (interface.estChoisi())
  63. {
  64. done=true;
  65. retour=interface.getChoix();
  66. }
  67. // [2.3] Dessin des composants
  68. SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 128, 100, 255));
  69. interface.afficher();
  70. SDL_BlitSurface(titre, 0, screen, &positionTitre);
  71. quitButton.afficher();
  72. SDL_Flip(screen);
  73. } //fin bcl principale
  74. ///[4] Destruction des composants
  75. SDL_FreeSurface(titre);
  76. SDL_FreeSurface(screen);
  77. std::cout << "menu.cpp: Aucune erreur détectée." << std::endl;
  78. return retour;
  79. };