Advertisement
zero50x

Мой арканоид

May 27th, 2016
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2.   "http://www.w3.org/TR/html4/loose.dtd">
  3. <html>
  4. <head>
  5.   <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  6.   <title>JavaScript</title>
  7.  
  8. <style type="text/css">
  9. #layer2 {
  10.     position: absolute; background: #33FFCC;
  11.     top: 500px;     left: 500px;
  12.     width: 10px;    height: 10px;
  13. }
  14. #board {
  15.     position: absolute;
  16.     bottom: 15px;
  17.     left: 0px;
  18.     width: 60px;
  19.     height: 10px; background: #CC3300;
  20. }
  21. body{
  22.   overflow-x: hidden;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27.  
  28. <div id="area"></div>
  29.  
  30. <br><br><br><br><br>
  31. <div id="echo"></div>
  32. <div id="echo2"></div>
  33. <div id="echo3"></div>
  34. <div id="echo4"></div>
  35.  
  36. <div id="layer2"></div>
  37. <div id="board"></div>
  38. <div id="collision"></div>
  39. <div id="collision_test1"></div>
  40. <div id="c_test2"></div>
  41.  
  42. <script type="text/javascript">
  43. var CoordObj;
  44. var Nleft;
  45. var Ntop;
  46.  
  47. // Размер вьюпорта по вертикали и горизонтали
  48. var DispHeight = document.documentElement.clientHeight;
  49. var DispWidth = document.documentElement.clientWidth;
  50.  
  51. //Случайно выбираем в какой угол запускать шар
  52. var A =  Math.random();
  53. if      (A >= 0    && A <= 0.25){ var Way = 1; }
  54. else if (A >= 0.25 && A <= 0.5) { var Way = 2; }
  55. else if (A >= 0.5  && A <= 0.75){ var Way = 3; }
  56. else if (A >= 0.75 && A <= 1)   { var Way = 4; }
  57.  
  58. // Получим первоначальные координаты шара
  59. CoordObj = layer2.getBoundingClientRect();
  60. Top = CoordObj.top;
  61. Left = CoordObj.left;
  62. //console.dir(CoordObj);
  63. //console.log(Top);
  64. var angle = 35;
  65.  
  66.  
  67. //######### DIV строим начало #########
  68. var DisplayWidth = document.documentElement.clientWidth;
  69. var DisplayHeight = document.documentElement.clientHeight;
  70.  
  71. var Rows = 5; // Сколько строк
  72. var Cols = 10; // Сколько колонок
  73. var Blocks = Rows * Cols; // Сколько блоков всего
  74. var Column = Math.floor(DisplayWidth/Cols); // Ширина одной колонки
  75.     Column = +Column - 7;
  76.  
  77. var StartRow = []; var Add = ''; var i = ''; var reset = '';
  78. for (i = 1; i < Rows; i++) {
  79.     Add = Cols * i;
  80.     StartRow.push(Add);
  81. }
  82.  
  83. var FillDiv = '';
  84. var Ot = 0.2; // Отступ между блоками в %
  85. var OtPix = 6; // Отступ между блоками в пикселях
  86. var BlockHeight = 10; // Отступ между блоками в пикселях
  87. var Of = 0; // Зададим переменную отступа между блоками
  88. var topO = 0; // Зададим переменную отступа сверху
  89. var Bl = 4; // Ширина одного блока в %
  90. var Line = ''; // Номер линии сверху
  91. var J = 0; // J - это номер блока в строчке для первого (нулевого) не отображается
  92.  
  93. // Цикл генерации блоков
  94. for (i = 0; i < Blocks; i++) {
  95.   //Проверка на сброс строки
  96.   var tt = StartRow.indexOf(i);
  97.  
  98.   // Если есть то это новая строка
  99.   if(tt != -1){ reset = 1;
  100.     J = 0;
  101.     topO = +topO + +BlockHeight +4; // это отступ сверху
  102.   }
  103.   // else{ reset = 0; } Если этой tt нет в массиве StartRow то работаем как обычно
  104.  
  105.     if(J == 0){ Of = 0; } // если это первый элемент в строке - отступ слева = 0
  106.     else{ Of = J*(+Column + +OtPix); } // если не первый то зададим отступ
  107.  
  108.   FillDiv+='<div id="tn'+i+'" style="position: absolute; top: '+topO+'px; left: '+Of+'px; width: '+Column+'px; height: '+BlockHeight+'px; border: solid 1px black; background: #FFCC33;"></div>';
  109.   J++;
  110. }
  111. document.getElementById('area').innerHTML=FillDiv;
  112. //######### DIV строим конец #########
  113.  
  114.  
  115. // ПЕРЕМЕЩЕНИЕ ДОСКИ
  116. var block;
  117. // получим значение длины доски из CSS
  118. block = document.getElementById("board");
  119. var Width = window.getComputedStyle(block,null).getPropertyValue("width");
  120. Width = Width.replace("px", "");
  121. // слушаем мышку
  122. document.addEventListener("mousemove", function()
  123. {
  124.     block = document.getElementById("board");
  125.     var ThisMax = +event.clientX + +Width;
  126.     if(ThisMax > DispWidth){
  127.         var overhead = 'больше';
  128.         block.style.left = +DispWidth - +60 +'px';
  129.     }
  130.     else{ block.style.left = event.clientX+'px'; }
  131. });
  132.  
  133.  
  134.  
  135. // ИНТЕРВАЛ
  136. var CoordBoard;
  137. var timerId = setInterval(function() {
  138.  
  139.     if(Way == 1){Top -= Math.sin(angle * Math.PI / 180); Left -= Math.cos(angle * Math.PI / 180); GTop=3; GBok=2; }
  140.     if(Way == 2){Top -= Math.sin(angle * Math.PI / 180); Left += Math.cos(angle * Math.PI / 180); GTop=4; GBok=1; }
  141.     if(Way == 3){Top += Math.sin(angle * Math.PI / 180); Left -= Math.cos(angle * Math.PI / 180); GNiz=1; GBok=4; }
  142.     if(Way == 4){Top += Math.sin(angle * Math.PI / 180); Left += Math.cos(angle * Math.PI / 180); GNiz=2; GBok=3; }
  143.  
  144.     // Просмотр координат угла
  145.     //document.getElementById('echo4').innerHTML='Топ: '+Top+' Лефт '+Left;
  146.  
  147.     // Заного снимаем координаты шарика
  148.     CoordObj = layer2.getBoundingClientRect();
  149.     Bottom = CoordObj.bottom;
  150.     Right = CoordObj.right;
  151.    
  152.  
  153.    
  154.     if(Bottom >= DispHeight && Way == 3){ Way = 1; }
  155.     if(Bottom >= DispHeight && Way == 4){ Way = 2; }
  156.    
  157.     if(Left <= 0 && Way == 1){ Way = 2; }
  158.     if(Left <= 0 && Way == 3){ Way = 4; }
  159.  
  160.     if(Top <= 0 && Way == 2){ Way = 4; }
  161.     if(Top <= 0 && Way == 1){ Way = 3; }
  162.  
  163.     if(Right >= DispWidth && Way == 2){ Way = 1; }
  164.     if(Right >= DispWidth && Way == 4){ Way = 3; }
  165.    
  166.     // Заного снимаем координаты доски
  167.     CoordBoard = board.getBoundingClientRect();
  168.     // Назначаем размеры объектов для поиска коллизии
  169.     var CBall = {x1: CoordObj.left, x2: CoordObj.right, x3: CoordObj.bottom, x4: CoordObj.top}
  170.     var CBoar = {y1: CoordBoard.left, y2: CoordBoard.right, y3: CoordBoard.top}
  171.  
  172.     if(CBall.x2 >= CBoar.y1 && CBall.x1<=CBoar.y2)
  173.     {  
  174.         if(CBall.x3 >= CBoar.y3 && Way == 3){ Way = 1; }
  175.         if(CBall.x3 >= CBoar.y3 && Way == 4){ Way = 2; }
  176.         //document.getElementById('collision_test1').innerHTML='ТЕСТ 1 ПРОЙДЕН';
  177.     }
  178.     //else { document.getElementById('collision_test1').innerHTML=''; }
  179.    
  180. // Цикл проверки столкновения с блоками
  181. for (i = 0; i < Blocks; i++) {
  182.     IDblock = 'tn'+i;
  183.     MicroBlock = window[IDblock].getBoundingClientRect();
  184.  
  185.  
  186. if(Way == 1 || Way == 2){
  187.     if(CBall.x4 <= MicroBlock.bottom && CBall.x2 >= MicroBlock.left && CBall.x1 <= MicroBlock.right){
  188.         //Way = 1;
  189.         document.getElementById('c_test2').innerHTML='Столкновение снизу с шаром: '+i;
  190.         Way = GTop;
  191.         window[IDblock].style.left = '-200px';
  192.         window[IDblock].style.top = '-200px';
  193.     }
  194.     else{ document.getElementById('collision_test1').innerHTML='ничего вверх'; }
  195. }
  196.  
  197.    
  198. if(Way == 3 || Way == 4){
  199.     if(CBall.x3 >= MicroBlock.top && CBall.x2 >= MicroBlock.left && CBall.x1 <= MicroBlock.right && CBall.x4 < MicroBlock.top){
  200.         //Way = 1;
  201.         document.getElementById('c_test2').innerHTML='Столкновение сверху с блоком: '+i;
  202.         Way = GNiz;
  203.     }
  204.     else{ document.getElementById('collision_test1').innerHTML='ничего вниз'; }
  205. }
  206.  
  207.    
  208.    
  209.     //document.getElementById('collision_test1').innerHTML='Микроблок: '+MicroBlock.left+' '+MicroBlock.top+' '+MicroBlock.right+' '+MicroBlock.bottom;
  210. }
  211.    
  212.     document.getElementById('echo3').innerHTML='Правый край: '+DispWidth+' Правый шара '+Right;
  213.  
  214.     layer2.style.top = Top+'px';
  215.     layer2.style.left = Left+'px';
  216.  
  217. }, 4);
  218.  
  219.  
  220. // остановить повторы
  221. setTimeout(function() {
  222.   clearInterval(timerId);
  223.   //alert( 'стоп' );
  224.   document.getElementById('echo').innerHTML='стоп';
  225. }, 3000000);
  226.  
  227. </script>
  228. </body>
  229. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement