hexagon.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #include "fxlib.h"
  2. #include "MonochromeLib.h"
  3. #include "math.h"
  4. #include "ECode.h"
  5. #include "stdlib.h"
  6. #include "struct.h"
  7. #include "wall.h"
  8. #include "syscall.h"
  9. #define FPS 60
  10. #define FRAME_TIME 1/FPS
  11. Line lines[6] = {{0, NULL, 0},{1, NULL, 60},{2, NULL, 120},{3, NULL, 180},{4, NULL, 240},{5, NULL, 300}};
  12. int player_angle=0;
  13. Camera cam = {64, 32, 0};
  14. Wall *list = NULL;
  15. float dAngle = 10;
  16. void drawPlayer();
  17. void drawDiagonal(int nb);
  18. int AddIn_main(int isAppli, unsigned short OptionNum)
  19. {
  20. unsigned int fps = 0, frame = 0, tempsOrigine = RTC_GetTicks();
  21. unsigned char fps_text[8] = {0};
  22. srand(RTC_GetTicks());
  23. //list = addWall(list, 128, 8, 1, 1);
  24. while(KeyUp(K_EXIT)){
  25. //fps
  26. int current_frame_time = RTC_GetTicks();
  27. if(RTC_GetTicks() - tempsOrigine >= 32 )//1/4 seconds
  28. {
  29. fps = frame*4;
  30. frame = 0;
  31. tempsOrigine = RTC_GetTicks();
  32. }
  33. frame++;
  34. cam.angle = (int) (cam.angle + dAngle);
  35. if(cam.angle >= 360)cam.angle = cam.angle - 359;
  36. if(list != NULL){
  37. update(list);
  38. if(isColliding(list, player_angle) == true)
  39. {
  40. PrintMini(50, 0, "TOUCHE", MINI_OVER);
  41. }
  42. list = removeWall(list, 0);
  43. }
  44. if(rand() % 40 == 1)
  45. {
  46. list = addWall(list, 128, 8, 1, rand()%6);
  47. }else if(rand() % 70 == 1)
  48. {
  49. int emptyRow = rand()%6;
  50. int i = 0;
  51. for(i = 0; i < 6; i++)
  52. if(i != emptyRow)
  53. list = addWall(list, 128, 15, 1, i);
  54. }
  55. drawPlayer();
  56. drawDiagonal(1);
  57. drawDiagonal(2);
  58. drawDiagonal(3);
  59. intToStr(fps_text, fps);
  60. PrintMini(0, 0, fps_text, MINI_OVER);
  61. intToStr(fps_text, player_angle);
  62. PrintMini(116, 0, fps_text, MINI_OVER);
  63. if(list != NULL)
  64. show(list, &cam);
  65. ML_display_vram();
  66. ML_clear_vram();
  67. if(KeyDown(K_LEFT))
  68. {
  69. player_angle-=15;
  70. }
  71. if(KeyDown(K_RIGHT))
  72. {
  73. player_angle+=15;
  74. }
  75. if(KeyDown(K_PLUS))
  76. {
  77. dAngle += 0.2;
  78. }
  79. if(KeyDown(K_MINUS))
  80. {
  81. dAngle -= 0.2;
  82. }
  83. if(player_angle < 0)
  84. player_angle = 360 + player_angle;
  85. player_angle = player_angle % 360;
  86. if(player_angle > 360)
  87. {
  88. while(KeyUp(K_EXE))
  89. {}
  90. }
  91. //while
  92. Sleep(1/0.06);
  93. }
  94. return 1;
  95. }
  96. void drawPlayer()
  97. {
  98. int x[6];
  99. int y[6];
  100. int i = 0;
  101. for(i = 0; i++; i != 6)
  102. {
  103. int angle = i *60;
  104. x[i] = 16*cos(PI*angle/180) + cam.cX;
  105. y[i] = 16*sin(PI*angle/180) + cam.cY;
  106. }
  107. ML_filled_circle(cam.cX, cam.cY, 6, BLACK);
  108. ML_filled_circle(9*cos( PI*(player_angle + cam.angle)/180) + cam.cX, 9*sin( PI*(player_angle+cam.angle)/180) + cam.cY, 1, BLACK);
  109. }
  110. void drawDiagonal(int nb)
  111. {
  112. int tmp_angle = 0;
  113. float coeff = 0;
  114. int x1 = 0, y1 = 0, x2 = 0, y2 = 0;
  115. if(nb == 1)
  116. tmp_angle = cam.angle + 60;
  117. else if(nb == 2)
  118. tmp_angle = cam.angle;
  119. else if(nb == 3)
  120. tmp_angle = 300 + cam.angle;
  121. if(tmp_angle >= 360)tmp_angle = tmp_angle - 359;
  122. coeff = sin(PI*tmp_angle / 180)/cos(PI * tmp_angle / 180);
  123. x1 = -32/coeff;
  124. y1 = -32;
  125. x2 = 32/coeff;
  126. y2 = 32;
  127. if(abs(x1) > 64){
  128. x1 = -64;
  129. y1 = -64*coeff;
  130. x2 = 64;
  131. y2 = 64*coeff;
  132. }
  133. ML_line(x1 + cam.cX, y1 + cam.cY, x2 + cam.cX, y2 + cam.cY, BLACK);
  134. }
  135. #pragma section _BR_Size
  136. unsigned long BR_Size;
  137. #pragma section
  138. #pragma section _TOP
  139. int InitializeSystem(int isAppli, unsigned short OptionNum)
  140. {
  141. return INIT_ADDIN_APPLICATION(isAppli, OptionNum);
  142. }
  143. #pragma section