Advertisement
Loan198

Untitled

May 17th, 2020
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.68 KB | None | 0 0
  1. #include "commonfuntion.h"
  2. #include "BaseObject.h"
  3. #include "game_map.h"
  4. GameMap game_map_;
  5. BaseObject g_background;
  6. Box box;
  7. Direction img;
  8. bool InitData()
  9. {
  10. bool success = true;
  11. int rect = SDL_Init(SDL_INIT_VIDEO);
  12. if (rect< 0) return false;
  13. SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "1");
  14. g_windows = SDL_CreateWindow("Game SDL 2.0",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
  15. if ( g_windows == NULL)
  16. success = false;
  17. else {
  18. g_screen = SDL_CreateRenderer(g_windows,-1,SDL_RENDERER_ACCELERATED);
  19. if ( g_screen == NULL) success = false;
  20. else {
  21. SDL_SetRenderDrawColor(g_screen, RENDER_DRAW_COLOR,RENDER_DRAW_COLOR,RENDER_DRAW_COLOR,RENDER_DRAW_COLOR);
  22. int ImgFlags = IMG_INIT_JPG;
  23. if ( ! IMG_Init(ImgFlags) && ImgFlags)
  24. success = false;
  25. }
  26. }
  27. return true;
  28. }
  29.  
  30. bool LoadBackground()
  31. {
  32. bool ret = g_background.Load_Image("anhgame//background.png", g_screen);
  33. if ( !ret) return false;
  34. return true;
  35. }
  36. void close()
  37. {
  38. g_background.Free();
  39. SDL_DestroyRenderer(g_screen);
  40. g_screen = NULL;
  41. SDL_DestroyWindow(g_windows);
  42. g_windows = NULL;
  43. IMG_Quit();
  44. SDL_QUIT;
  45. }
  46. bool endGameCondition(int BOARDGAME[], int KING[]){
  47. return ( !( BOARDGAME[0] + KING[0]) && !(BOARDGAME[6] + KING[1]) );
  48. }
  49. void printGameBoard(int BOARDGAME[],int KING[]){
  50. SDL_RenderClear(g_screen);
  51. g_background.Render(g_screen,NULL);
  52. game_map_.DrawMap(g_screen,BOARDGAME, KING);
  53. SDL_RenderPresent(g_screen);
  54. }
  55. void swapTurn(int& PLAYER){
  56. PLAYER = 1 - PLAYER;
  57. }
  58. bool scatterNewCondition( int BOARDGAME[], const int PLAYER){
  59. for (int i = 1; i<=5; i++){ // PLAYER 1 : 1 2 3 4 5
  60. if ( BOARDGAME[i + (PLAYER) *6] ) // PLAYER 2 : 11 10 9 8 7
  61. return false;
  62. }
  63. return true;
  64. }
  65. void scatterNew(int BOARDGAME[], int KING[], const int PLAYER, int SCORE[]){
  66. if (scatterNewCondition(BOARDGAME, PLAYER)){
  67. for (int i = 1; i<=5; i++)
  68. BOARDGAME[i + (PLAYER) *6]++;
  69. SCORE[PLAYER]-=5;
  70. printGameBoard(BOARDGAME, KING);
  71. }
  72. else return;
  73. }
  74. int collect(int BOARDGAME[], movement chosenTile){
  75. if (chosenTile.position == 0 || chosenTile.position == 6) { // if collecting from king tile, only get 1 stone
  76. BOARDGAME[chosenTile.position]--;
  77. return 1;
  78. }else{
  79. int stones = BOARDGAME[chosenTile.position];
  80. BOARDGAME[chosenTile.position] = 0;
  81. return stones;
  82. }
  83. }
  84. movement getNext(const movement chosenTile){
  85. movement nextTile;
  86. nextTile.position = (chosenTile.position + 12 + chosenTile.direction) % 12;
  87. nextTile.direction = chosenTile.direction;
  88. return nextTile;
  89. }
  90. movement scatter(int BOARDGAME[], int KING[], const int PLAYER, movement chosenTile)
  91. {
  92. movement nextTile = chosenTile;
  93. do
  94. {
  95. int stones = collect(BOARDGAME, nextTile);
  96. printGameBoard(BOARDGAME, KING);
  97. game_map_.WhileScattering(g_screen,BOARDGAME, KING, stones, PLAYER);
  98. SDL_RenderPresent(g_screen);
  99. SDL_Delay(1000);
  100. while(stones){
  101. nextTile = getNext(nextTile);
  102. BOARDGAME[nextTile.position]++;
  103. stones--;
  104. printGameBoard(BOARDGAME, KING);
  105. game_map_.WhileScattering(g_screen,BOARDGAME, KING, stones, PLAYER);
  106. SDL_RenderPresent(g_screen);
  107. SDL_Delay(1000);
  108. }
  109. nextTile = getNext(nextTile);
  110. } while(BOARDGAME[nextTile.position]);
  111. return nextTile;
  112. }
  113.  
  114. movement select(int BOARDGAME[], int KING[],const int PLAYER){
  115. movement chosenTile;
  116. if ( PLAYER == 1) box.y = 240;
  117. else if ( PLAYER == 0) box.y = 160;
  118. bool is_quit = false;
  119. while ( ! is_quit)
  120. {
  121. while ( SDL_PollEvent( &g_event) != 0)
  122. {
  123. if( g_event.type == SDL_QUIT)
  124. {
  125. is_quit = true;
  126. }
  127. }
  128. SDL_SetRenderDrawColor(g_screen, RENDER_DRAW_COLOR, RENDER_DRAW_COLOR, RENDER_DRAW_COLOR, RENDER_DRAW_COLOR);
  129. g_background.Render(g_screen,NULL);
  130. game_map_.DrawMap(g_screen, BOARDGAME, KING);
  131. SDL_Event e;
  132. while ( e.key.keysym.sym != SDLK_RETURN)
  133. {
  134. box.render(g_screen);
  135. SDL_RenderPresent(g_screen);
  136. if ( SDL_WaitEvent(&e) == 0) continue;
  137. if ( e.type == SDL_QUIT) break;
  138. if ( e.type == SDL_KEYDOWN)
  139. {
  140. switch (e.key.keysym.sym)
  141. {
  142. case SDLK_LEFT : box.turnleft(); break;
  143. case SDLK_RIGHT: box.turnright(); break;
  144. default: break;
  145. }
  146. }
  147. SDL_RenderClear(g_screen);
  148. g_background.Render(g_screen,NULL);
  149. game_map_.DrawMap(g_screen,BOARDGAME, KING);
  150. }
  151. img.Load_Image("anhgame//direction.png", g_screen);
  152. img.SetRect(box.x,box.y);
  153. img.Render(g_screen);
  154. chosenTile.position = box.x/80 - 1;
  155. if (PLAYER) chosenTile.position = 12 - chosenTile.position;
  156. if ( SDL_WaitEvent(&e) == 0) continue;
  157. if ( e.type == SDL_QUIT) break;
  158. if ( e.type == SDL_KEYDOWN)
  159. {
  160. if ( e.key.keysym.sym == SDLK_LEFT)
  161. {
  162. if (PLAYER) chosenTile.direction = 1;
  163. else chosenTile.direction = -1;
  164. is_quit = true;
  165. }
  166. else {
  167. if ( PLAYER) chosenTile.direction = -1;
  168. else chosenTile.direction = 1;
  169. is_quit = true;
  170. }
  171. }
  172. SDL_RenderPresent(g_screen);
  173. }
  174. return chosenTile;
  175. }
  176. int sum(int BOARDGAME[], int KING[], movement lastTile){ // second next Tile after the last tile of scattering
  177. int point = 0;
  178. movement nextTile = lastTile;
  179. while (true){
  180. nextTile = getNext(nextTile);
  181. if (nextTile.position == 0 && !KING[0] && BOARDGAME[0] == 0) break;
  182. if (nextTile.position == 6 && !KING[1] && BOARDGAME[6] == 0) break;
  183. if (nextTile.position != 0 && nextTile.position != 6 && BOARDGAME[nextTile.position] == 0) break;
  184. if (nextTile.position == 0 && KING[0])
  185. {
  186. point += 10;
  187. KING[0] = 0;
  188. }
  189. if (nextTile.position == 6 && KING[1])
  190. {
  191. point += 10;
  192. KING[1] = 0;
  193. }
  194. point += BOARDGAME[nextTile.position];
  195. BOARDGAME[nextTile.position] = 0;
  196. nextTile = getNext(nextTile);
  197. if (BOARDGAME[nextTile.position] != 0) break;
  198. }
  199. return point;
  200. }
  201.  
  202.  
  203. int main(int argc, char* argv[])
  204. {
  205. if ( !InitData()) return -1;
  206. if ( !LoadBackground()) return -1;
  207. int BOARDGAME[12], KING[2];
  208. for (int i = 0; i<12; i++) BOARDGAME[i] = 5;
  209. BOARDGAME[0] = 0;
  210. BOARDGAME[6] = 0;
  211. int SCORE[2] = {};
  212. KING[0] = 1; KING[1] = 1;
  213. game_map_.LoadTiles(g_screen);
  214. bool is_quit = false;
  215. box.x = 160;
  216. box.y = 160;
  217. int PLAYER = 0;
  218. SDL_RenderClear(g_screen);
  219. g_background.Render(g_screen,NULL);
  220. game_map_.DrawMap(g_screen, BOARDGAME, KING);
  221. while(!endGameCondition(BOARDGAME, KING)){
  222. scatterNew(BOARDGAME, KING, PLAYER, SCORE);
  223. movement chosenTile = select(BOARDGAME,KING, PLAYER);
  224. movement nextTile = scatter(BOARDGAME, KING, PLAYER, chosenTile);
  225. SDL_Delay(1000);
  226. SCORE[PLAYER] += sum(BOARDGAME, KING, nextTile);
  227. swapTurn(PLAYER);
  228. printGameBoard(BOARDGAME,KING);
  229. // printScore(SCORE);
  230. }
  231. SDL_RenderPresent(g_screen);
  232. close();
  233. return 0;
  234. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement