Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2012
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.61 KB | None | 0 0
  1. #include "SnakeGame.h"
  2. #include "Colors.h"
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. char Map[20][60] = {"###########################################################",
  7. "# #",
  8. "# #",
  9. "# #",
  10. "# #",
  11. "# #",
  12. "# #",
  13. "# #",
  14. "# #",
  15. "# #",
  16. "# #",
  17. "# #",
  18. "# #",
  19. "# #",
  20. "# #",
  21. "# #",
  22. "# #",
  23. "# #",
  24. "# #",
  25. "###########################################################"};
  26.  
  27. //Colors color;
  28. SnakeGame::SnakeGame(int StartX,int StartY,int Length,char SnakeChar, char FruitChar, char WallChar,
  29. int UpKey, int DownKey, int RightKey, int LeftKey)
  30. {
  31. Wallc = WallChar;
  32. Fruitc = FruitChar;
  33. PChar = SnakeChar;
  34.  
  35. Lkey = LeftKey;
  36. Rkey = RightKey;
  37. Ukey = UpKey;
  38. Dkey = DownKey;
  39.  
  40. Head_x = StartX;
  41. Head_y = StartY;
  42.  
  43. Dir = RIGHT;
  44.  
  45. if(Head_x > Length) // sprawdza zeby snake na starcie nie wchodzil w sciane
  46. {
  47. for(int i=0; i<Length; i++)
  48. {
  49. Lx.push_back(Head_x-i);
  50. Ly.push_back(Head_y);
  51. }
  52. }else
  53. {
  54. cout << "Pozycja X weza jest mniejsza niż jego dlugosc, popraw";
  55. ExitProcess(0);
  56. }
  57.  
  58. }
  59.  
  60.  
  61. void SnakeGame::DrawMap()
  62. {
  63. //color.green();
  64. for(unsigned short rows=0; rows < 20 ; rows++)
  65. cout << Map[rows] << "\n";
  66. //color.white();
  67. return ;
  68. }
  69. void SnakeGame::SnakeGrow(int n)
  70. {
  71. for(int i=0;i<n;i++)
  72. {
  73. Lx.push_front(Lx.front());
  74. Ly.push_front(Ly.front());
  75. }
  76. }
  77. void SnakeGame::DropRandFruit()
  78. {
  79. srand(GetTickCount());
  80. unsigned short Fruitx = rand() % 57 +1;
  81. unsigned short Fruity = rand() % 18 +1;
  82. //color.red();
  83. if(Map[Fruity][Fruitx] == PChar) //Patrzy czy owoc nie jest umieszczany na wezu
  84. {
  85. //color.red();
  86. DropRandFruit();
  87. //color.white();
  88. }
  89. else
  90. {
  91. //color.red();
  92. Map[Fruity][Fruitx] = Fruitc;
  93. //color.white();
  94. }
  95. //color.white();
  96. }
  97. bool SnakeGame::DropFruitXY(int x,int y)
  98. {
  99. //color.red();
  100. if(Map[y][x] == PChar) // Patrzy czy owoc nie jest umieszczany na wezu
  101. {
  102. DropRandFruit();
  103. return 0;
  104. }
  105. else
  106. {
  107. Map[y][x] = Fruitc;
  108. return 1;
  109. }
  110. //color.white();
  111. }
  112. void SnakeGame::HandleKeys()
  113. {
  114.  
  115. if(GetAsyncKeyState(Rkey) != 0)
  116. {
  117. if(Dir != LEFT)
  118. Dir = RIGHT;
  119. }
  120. else if(GetAsyncKeyState(Ukey) != 0)
  121. {
  122. if(Dir != DOWN)
  123. Dir = UP;
  124. }
  125. else if(GetAsyncKeyState(Dkey) != 0)
  126. {
  127. if(Dir != UP)
  128. Dir = DOWN;
  129. }
  130. else if(GetAsyncKeyState(Lkey) != 0)
  131. {
  132. if(Dir != RIGHT)
  133. Dir = LEFT;
  134. }
  135. return;
  136. }
  137. int SnakeGame::SnakeMove()
  138. {
  139. int ret = 1;
  140. if(Dir == RIGHT){
  141. if(Map[Head_y][Head_x+1] == Wallc || Map[Head_y][Head_x+1] == PChar) //Kolizja
  142. ret = 0;
  143. else
  144. {
  145. if(Map[Head_y][Head_x+1] == Fruitc) // Owoc
  146. {
  147. Map[Head_y][Head_x+1] = PChar;
  148. SnakeGrow(1);
  149. ret = 2;
  150. }
  151. Head_x++;
  152. }
  153.  
  154. }else if(Dir == LEFT){
  155. if(Map[Head_y][Head_x-1] == Wallc || Map[Head_y][Head_x-1] == PChar)
  156. ret = 0;
  157. else
  158. {
  159. if(Map[Head_y][Head_x-1] == Fruitc)
  160. {
  161. Map[Head_y][Head_x-1] = PChar;
  162. SnakeGrow(1);
  163. ret = 2;
  164. }
  165. Head_x--;
  166. }
  167.  
  168. }else if(Dir == DOWN){
  169. if(Map[Head_y+1][Head_x] == Wallc || Map[Head_y+1][Head_x] == PChar)
  170. ret = 0;
  171. else
  172. {
  173. if(Map[Head_y+1][Head_x] == Fruitc)
  174. {
  175. Map[Head_y+1][Head_x] = PChar;
  176. SnakeGrow(1);
  177. ret = 2;
  178. }
  179. Head_y++;
  180. }
  181.  
  182. }
  183. else if(Dir == UP){
  184. if(Map[Head_y-1][Head_x] == Wallc || Map[Head_y-1][Head_x] == PChar)
  185. ret = 0;
  186. else
  187. {
  188. if(Map[Head_y-1][Head_x] == Fruitc)
  189. {
  190. Map[Head_y-1][Head_x] = PChar;
  191. SnakeGrow(1);
  192. ret = 2;
  193. }
  194. Head_y--;
  195. }
  196. }
  197.  
  198. if(ret != 0)
  199. {
  200. Ly.push_back(Head_y);
  201. Lx.push_back(Head_x);
  202.  
  203. Map[Ly.back()][Lx.back()] = PChar;
  204. Map[Ly.front()][Lx.front()] = ' ';
  205.  
  206. Ly.pop_front();
  207. Lx.pop_front();
  208. }
  209.  
  210. return ret;
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement