Advertisement
Guest User

Untitled

a guest
Dec 15th, 2014
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.05 KB | None | 0 0
  1. #include <minix/drivers.h>
  2. #include "Arkanoid.h"
  3.  
  4. #include "Graphics.h"
  5. #include "Keyboard.h"
  6. #include "Mouse.h"
  7.  
  8.  
  9. const int FPS = 25;
  10. const int mouseFPSmult = 3;
  11.  
  12. void checkIfStateIsDone(Arkanoid* game);
  13. void deleteCurrentState(Arkanoid* game);
  14.  
  15. Arkanoid* startArkanoid(){
  16.  
  17. Arkanoid* arkanoid = (Arkanoid*) malloc(sizeof(Arkanoid));
  18. //subscribing devices
  19. arkanoid->IRQ_SET_KB = kbd_subscribe_int();
  20. arkanoid->IRQ_SET_TIMER = timer_subscribe_int();
  21. arkanoid->IRQ_SET_MOUSE = mouse_subscribe_int();
  22.  
  23. //reseting time freq
  24. timer_set_square(0, mouseFPSmult*FPS);
  25.  
  26. //other variables
  27. arkanoid->tempRecX = 10;
  28. arkanoid->scancode = 0;
  29. arkanoid->currentState = MAIN_MENU_STATE;
  30. arkanoid->state = newMainMenuState();
  31.  
  32.  
  33. //finishing initialization
  34. arkanoid->done = 0, arkanoid->draw = 1;
  35. arkanoid->timer = newTimer();
  36.  
  37.  
  38.  
  39. return arkanoid;
  40. }
  41.  
  42. void updateArkanoid(Arkanoid* arkanoid){
  43. int ipc_status, r = 0;
  44. message msg;
  45.  
  46. r = driver_receive(ANY,&msg,&ipc_status);
  47.  
  48. if(r != 0) //In case something wrong happened with driver communication report error msg
  49.  
  50. return;
  51.  
  52. if(is_ipc_notify(ipc_status))
  53. {
  54. switch (_ENDPOINT_P(msg.m_source))
  55. {
  56. case HARDWARE:
  57. if(msg.NOTIFY_ARG & arkanoid->IRQ_SET_KB) {
  58.  
  59.  
  60. arkanoid->scancode = kbc_read();
  61. /*
  62. switch (arkanoid->currentState) {
  63. case MAIN_MENU_STATE:
  64. updateMainMenuState(arkanoid->state, arkanoid->scancode);
  65. break;
  66. case GAME_STATE:
  67. updateGameState(arkanoid->state, arkanoid->scancode);
  68. break;
  69. default:
  70. break;
  71. }
  72.  
  73. arkanoid->scancode = 0;
  74. //update at 25 FPS
  75. arkanoid->tempRecX++;
  76. arkanoid->draw = 1; */
  77. }
  78. if(msg.NOTIFY_ARG & arkanoid->IRQ_SET_TIMER)
  79.  
  80. timerHandler(arkanoid->timer);
  81. if(msg.NOTIFY_ARG & arkanoid->IRQ_SET_MOUSE)
  82.  
  83. updateMouse();
  84. break;
  85.  
  86. default:
  87. break;
  88. }
  89.  
  90. }
  91.  
  92. if(arkanoid->scancode != 0){
  93. if (arkanoid->scancode == KEY_ESC)
  94. arkanoid->done = 1;
  95. }
  96.  
  97.  
  98. if(arkanoid->timer->ticked){
  99. getMouse()->draw = 1;
  100. //...
  101.  
  102. if(arkanoid->timer->counter % mouseFPSmult == 0)
  103. { /*
  104. switch (arkanoid->currentState) {
  105. case MAIN_MENU_STATE:
  106. updateMainMenuState(arkanoid->state, arkanoid->scancode);
  107. break;
  108. case GAME_STATE:
  109. updateGameState(arkanoid->state, arkanoid->scancode);
  110. break;
  111. default:
  112. break;
  113. } */
  114.  
  115. arkanoid->scancode = 0;
  116. //update at 25 FPS
  117. arkanoid->tempRecX++;
  118. arkanoid->draw = 1;
  119. }
  120. }
  121.  
  122. //checkIfStateIsDone(arkanoid);
  123. }
  124.  
  125.  
  126. void drawArkanoid(Arkanoid* arkanoid){
  127.  
  128. /*
  129. switch (arkanoid->currentState) {
  130. case MAIN_MENU_STATE:
  131. drawMainMenuState(arkanoid->state);
  132. break;
  133. case GAME_STATE:
  134. drawGameState(arkanoid->state);
  135. default:
  136. break;
  137. }*/
  138.  
  139. fillDisplay(BLUE);
  140. }
  141.  
  142. void stopArkanoid(Arkanoid* arkanoid){
  143.  
  144. deleteCurrentState(arkanoid);
  145. mouse_unsubscribe_int();
  146. kbd_unsubscribe_int();
  147. timer_unsubscribe_int();
  148. deleteTimer(arkanoid->timer);
  149. deleteMouse();
  150.  
  151.  
  152. free(arkanoid);
  153. }
  154.  
  155. void changeState(Arkanoid* game, State newState) {
  156.  
  157. deleteCurrentState(game);
  158.  
  159. game->currentState = newState;
  160.  
  161. switch (game->currentState) {
  162. case MAIN_MENU_STATE:
  163. game->state = newMainMenuState();
  164. break;
  165. case GAME_STATE:
  166. game->state = newGameState();
  167. break;
  168. }
  169.  
  170. game->draw = 1;
  171. }
  172.  
  173. void checkIfStateIsDone(Arkanoid* game) {
  174. switch (game->currentState) {
  175. case MAIN_MENU_STATE:
  176. if (((MainMenuState*) (game->state))->done) {
  177. int action = ((MainMenuState*) (game->state))->action;
  178.  
  179. switch (action) {
  180. case PLAY_CHOSEN:
  181. changeState(game, GAME_STATE);
  182. break;
  183. case EXIT_CHOSEN:
  184. game->done = 1;
  185. break;
  186.  
  187. }
  188. }
  189. break;
  190. case GAME_STATE:
  191. if (((GameState*) (game->state))->done) {
  192. changeState(game, MAIN_MENU_STATE);
  193. }
  194. break;
  195. default:
  196. break;
  197. }
  198. }
  199.  
  200. void deleteCurrentState(Arkanoid* game) {
  201. switch (game->currentState) {
  202. case MAIN_MENU_STATE:
  203. deleteMainMenuState(game->state);
  204. break;
  205. case GAME_STATE:
  206. deleteGameState(game->state);
  207. break;
  208. }
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement