Advertisement
Guest User

Untitled

a guest
Jan 24th, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.94 KB | None | 0 0
  1. package com.javarush.test.level24.lesson14.big01;
  2.  
  3. import java.awt.event.KeyEvent;
  4. import java.util.ArrayList;
  5. import java.util.Iterator;
  6.  
  7. /**
  8. * Главный класс игры
  9. */
  10. public class Arcanoid
  11. {
  12. public static Arcanoid game;
  13.  
  14. //ширина и высота
  15. private int width;
  16. private int height;
  17.  
  18. //список кирпичей
  19. private ArrayList<Brick> bricks = new ArrayList<Brick>();
  20. //шарик
  21. private Ball ball;
  22. //подставка
  23. private Stand stand;
  24.  
  25. //игра закончена?
  26. private boolean isGameOver = false;
  27.  
  28. public Arcanoid(int width, int height)
  29. {
  30. this.width = width;
  31. this.height = height;
  32. }
  33.  
  34. public ArrayList<Brick> getBricks()
  35. {
  36. return bricks;
  37. }
  38.  
  39. public Ball getBall()
  40. {
  41. return ball;
  42. }
  43.  
  44. public void setBall(Ball ball)
  45. {
  46. this.ball = ball;
  47. }
  48.  
  49. public Stand getStand()
  50. {
  51. return stand;
  52. }
  53.  
  54. public void setStand(Stand stand)
  55. {
  56. this.stand = stand;
  57. }
  58.  
  59. /**
  60. * Рисуем на холсте границы и все объекты.
  61. */
  62. public void draw(Canvas canvas)
  63. {
  64. //отрисуй границы
  65. //отрисуй кирпичи
  66. //отрисуй шарик
  67. //отрисуй подставку
  68. drawBoders(canvas);
  69. for (Brick brick : game.bricks) {
  70. brick.draw(canvas);
  71. }
  72. game.ball.draw(canvas);
  73. game.stand.draw(canvas);
  74. }
  75.  
  76. /**
  77. * Рисуем на холсте границы
  78. */
  79. private void drawBoders(Canvas canvas)
  80. {
  81. //draw game
  82. for (int i = 0; i < width + 2; i++)
  83. {
  84. for (int j = 0; j < height + 2; j++)
  85. {
  86. canvas.setPoint(i, j, '.');
  87. }
  88. }
  89.  
  90. for (int i = 0; i < width + 2; i++)
  91. {
  92. canvas.setPoint(i, 0, '-');
  93. canvas.setPoint(i, height + 1, '-');
  94. }
  95.  
  96. for (int i = 0; i < height + 2; i++)
  97. {
  98. canvas.setPoint(0, i, '|');
  99. canvas.setPoint(width + 1, i, '|');
  100. }
  101. }
  102.  
  103. /**
  104. * Основной цикл программы.
  105. * Тут происходят все важные действия
  106. */
  107. public void run() throws Exception
  108. {
  109. //Создаем холст для отрисовки.
  110. Canvas canvas = new Canvas(width, height);
  111.  
  112. //Создаем объект "наблюдатель за клавиатурой" и стартуем его.
  113. KeyboardObserver keyboardObserver = new KeyboardObserver();
  114. keyboardObserver.start();
  115.  
  116. //Исполняем цикл, пока игра не окончека
  117. while (!isGameOver)
  118. {
  119. //"наблюдатель" содержит события о нажатии клавиш?
  120. if (keyboardObserver.hasKeyEvents())
  121. {
  122. KeyEvent event = keyboardObserver.getEventFromTop();
  123.  
  124. //Если "стрелка влево" - сдвинуть фигурку влево
  125. if (event.getKeyCode() == KeyEvent.VK_LEFT)
  126. stand.moveLeft();
  127. //Если "стрелка вправо" - сдвинуть фигурку вправо
  128. else if (event.getKeyCode() == KeyEvent.VK_RIGHT)
  129. stand.moveRight();
  130. //Если "пробел" - запускаем шарик
  131. else if (event.getKeyCode() == KeyEvent.VK_SPACE)
  132. ball.start();
  133. }
  134.  
  135. //двигаем все объекты
  136. move();
  137.  
  138. //проверяем столкновения
  139. checkBricksBump();
  140. checkStandBump();
  141.  
  142. //проверяем, что шарик мог улететь через дно.
  143. checkEndGame();
  144.  
  145. //отрисовываем все объекты
  146. canvas.clear();
  147. draw(canvas);
  148. canvas.print();
  149.  
  150. //пауза
  151. Thread.sleep(300);
  152. }
  153.  
  154. //Выводим сообщение "Game Over"
  155. System.out.println("Game Over!");
  156. }
  157.  
  158. /**
  159. * Двигаем шарик и подставку.
  160. */
  161. public void move()
  162. {
  163. //двигай шарик
  164. //двигай подставку
  165. game.ball.move();
  166. game.stand.move();
  167. }
  168.  
  169. /**
  170. * Проверяем столкновение с кирпичами.
  171. * Если столкновение было - шарик отлетает в случайном направлении 0..360 градусов
  172. */
  173. public void checkBricksBump()
  174. {
  175. //Тут проверь - столкнулся ли шарик с кирпичем.
  176. //Если да - кирпичь удалить, а шарик запустить в случайно направлении.
  177. Iterator<Brick> brickIterator = bricks.iterator();
  178. while (brickIterator.hasNext()) {
  179. if (ball.isIntersec(brickIterator.next())) {
  180. double angel = Math.random() * 360;
  181. ball.setDirection(angel);
  182. brickIterator.remove();
  183. }
  184. }
  185. }
  186.  
  187. /**
  188. * Проверяем столкновение с подставкой.
  189. * Если столкновение было - шарик отлетает в случайном направлении вверх 80..100 градусов.
  190. */
  191. public void checkStandBump()
  192. {
  193. //Тут проверь - столкнулся ли шарик с подставкой.
  194. //Если да - запустить шарик вверх на 80..100 градусов.
  195. if (ball.isIntersec(stand)) {
  196. double angel = 80 + Math.random()*20;
  197. ball.setDirection(angel);
  198. }
  199. }
  200.  
  201. /**
  202. * Проверяем - не улетел ли шарик через дно.
  203. * Если да - игра окончена (isGameOver = true)
  204. */
  205. public void checkEndGame()
  206. {
  207. //Если шарик улетел за нижнюю границы - игра окончена.
  208. if (ball.y > getHeight())
  209. isGameOver = true;
  210. }
  211.  
  212. public int getWidth()
  213. {
  214. return width;
  215. }
  216.  
  217. public int getHeight()
  218. {
  219. return height;
  220. }
  221.  
  222. public void setWidth(int width)
  223. {
  224. this.width = width;
  225. }
  226.  
  227. public void setHeight(int height)
  228. {
  229. this.height = height;
  230. }
  231.  
  232. public static void main(String[] args) throws Exception
  233. {
  234. game = new Arcanoid(20, 30);
  235.  
  236. Ball ball = new Ball(10, 29, 2, 95);
  237. game.setBall(ball);
  238.  
  239. Stand stand = new Stand(10, 30);
  240. game.setStand(stand);
  241.  
  242. game.getBricks().add(new Brick(3, 3));
  243. game.getBricks().add(new Brick(7, 5));
  244. game.getBricks().add(new Brick(12, 5));
  245. game.getBricks().add(new Brick(16, 3));
  246.  
  247. game.run();
  248. }
  249. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement