Mario-Sokoban from the OpenClassroom C Lesson exercice.

level.c 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. //
  2. // level.c
  3. // Mario Sokoban
  4. //
  5. // Created by Benoit Sida on 2014-02-16.
  6. // Copyright (c) 2014 Benoit Sida. All rights reserved.
  7. //
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <SDL2/SDL.h>
  11. #include <SDL2_image/SDL_image.h>
  12. #include "constantes.h"
  13. int loadLevel(int line, int menu, int map[][NB_BLOCS_HAUTEUR])
  14. {
  15. FILE *level = NULL;
  16. char codeLevel[NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1] = {0};
  17. int i = 0, j = 0, k = 0, caracLu = 0, nbLevel = 1;
  18. switch (menu) {
  19. case 0:
  20. level = fopen("levels/menu.lvl", "r");
  21. break;
  22. case 1:
  23. level = fopen("levels/debutant.lvl", "r");
  24. break;
  25. case 2:
  26. level = fopen("levels/intermediaire.lvl", "r");
  27. break;
  28. case 3:
  29. level = fopen("levels/expert.lvl", "r");
  30. break;
  31. case 4:
  32. level = fopen("levels/level.lvl", "r");
  33. break;
  34. }
  35. if (level == NULL) {
  36. return 0;
  37. }
  38. do
  39. {
  40. caracLu = fgetc(level);
  41. if (caracLu == '\n')
  42. nbLevel++;
  43. } while(caracLu!= EOF);
  44. k = line;
  45. rewind(level);
  46. while (k > 0)
  47. {
  48. caracLu = fgetc(level);
  49. if (caracLu == '\n')
  50. k--;
  51. }
  52. fgets(codeLevel, NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1, level);
  53. for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
  54. {
  55. for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
  56. {
  57. switch (codeLevel[(i * NB_BLOCS_LARGEUR) + j])
  58. {
  59. case '0':
  60. map[j][i] = 0;
  61. break;
  62. case '1':
  63. map[j][i] = 1;
  64. break;
  65. case '2':
  66. map[j][i] = 2;
  67. break;
  68. case '3':
  69. map[j][i] = 3;
  70. break;
  71. case '4':
  72. map[j][i] = 4;
  73. break;
  74. case '5':
  75. map[j][i] = 5;
  76. break;
  77. }
  78. }
  79. } // Définit la map
  80. fclose(level);
  81. return nbLevel;
  82. }
  83. int saveLevel(int map[][NB_BLOCS_HAUTEUR])
  84. {
  85. FILE *level = NULL;
  86. int i = 0, j = 0;
  87. level = fopen("levels/level.lvl", "w+");
  88. if (level == NULL)
  89. return 0;
  90. for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
  91. {
  92. for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
  93. {
  94. fprintf(level, "%d", map[j][i]);
  95. }
  96. }
  97. fclose(level);
  98. return 1;
  99. }