jeu.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #include "jeu.h"
  2. bool jeu(std::string nomFichierNiveau)
  3. {
  4. /// [1] Lancement du jeu
  5. // [1.1] Création de l'écran
  6. SDL_Surface *screen = SDL_SetVideoMode(640, 480, 16,
  7. SDL_HWSURFACE|SDL_DOUBLEBUF);
  8. if ( !screen )
  9. {
  10. std::cout << "Unable to set 640x480 video: "<< SDL_GetError() << std::endl;
  11. return 1;
  12. }
  13. SDL_WM_SetCaption("Gravitation Game _ Play",NULL);
  14. // [1.2] Préparation des composants
  15. bool goMenu(false);
  16. Uint32 tempsPrecedent(0);
  17. Level *niveau(0);
  18. niveau = haveLevel(nomFichierNiveau);
  19. if (niveau==0)
  20. {
  21. //Erreur détectée, retour au menu
  22. std::cout << "Jeu.cpp: erreur détectée: niveau inexistant ou illisible" << std::endl;
  23. return true;//retour au menu
  24. }
  25. Balle* ball(haveBall(niveau));
  26. /// [2] Boucle principale évenementielle
  27. bool done = false;
  28. while (!done)
  29. {
  30. // [2.1] Gestion évènement
  31. SDL_Event event;
  32. while (SDL_PollEvent(&event))
  33. {
  34. switch (event.type)
  35. {
  36. case SDL_QUIT:
  37. done = true;
  38. goMenu = false;
  39. break;
  40. case SDL_KEYDOWN:
  41. switch (event.key.keysym.sym)
  42. {
  43. case SDLK_ESCAPE:
  44. done = true;
  45. goMenu = true;
  46. break;
  47. case SDLK_UP:
  48. ball->demarrage(HAUT);
  49. break;
  50. case SDLK_RIGHT:
  51. ball->demarrage(DROITE);
  52. break;
  53. case SDLK_DOWN:
  54. ball->demarrage(BAS);
  55. break;
  56. case SDLK_LEFT:
  57. ball->demarrage(GAUCHE);
  58. break;
  59. case SDLK_s:
  60. ball->statutConsole();
  61. break;
  62. }///switch keysym
  63. break;///keydown
  64. case SDL_KEYUP:
  65. switch (event.key.keysym.sym)
  66. {
  67. case SDLK_ESCAPE:
  68. done = true;
  69. break;
  70. case SDLK_UP:
  71. ball->arret(HAUT);
  72. break;
  73. case SDLK_RIGHT:
  74. ball->arret(DROITE);
  75. break;
  76. case SDLK_DOWN:
  77. ball->arret(BAS);
  78. break;
  79. case SDLK_LEFT:
  80. ball->arret(GAUCHE);
  81. break;
  82. case SDLK_BACKSPACE:
  83. ball->respawn();
  84. break;
  85. }///switch keysym
  86. break;///keyup
  87. } ///switch
  88. } ///while
  89. // [2.2] Calcul
  90. ball->calculMouvement();
  91. // [2.3] Dessin
  92. SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 120, 130, 228));
  93. ball->dessiner(screen);
  94. niveau->afficher(screen);
  95. SDL_Flip(screen);
  96. // [2.4] Gestion du temps
  97. while (30>SDL_GetTicks()-tempsPrecedent)//30ms normalement (3000 debug)
  98. {
  99. //ça bloque pendant 30 ms moins le temps de calcul
  100. }
  101. tempsPrecedent=SDL_GetTicks();
  102. } ///Boucle principale évenementielle
  103. /// [3] Nettoyage
  104. delete niveau;
  105. delete ball;
  106. SDL_FreeSurface(screen);
  107. /// [4] Fin de la partie
  108. std::cout << "Jeu.cpp: Partie terminée, pas d'erreur détectée." << std::endl;
  109. return goMenu;
  110. }///jeu()