Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.53 KB | None | 0 0
  1. var figures = {
  2. ih : {one : {x : 0, y : 3}, two : {x : 0, y : 4}, three : {x : 0, y : 5}, four : {x : 0, y : 6}, name : 'ih'},
  3. iv : {one : {x : 0, y : 4}, two : {x : 1, y : 4}, three : {x : 2, y : 4}, four : {x : 3, y : 4}, name : 'iv'},
  4. jv : {one : {x : 0, y : 5}, two : {x : 1, y : 5}, three : {x : 2, y : 5}, four : {x : 2, y : 4}, name : 'jv'},
  5. jrv : {one : {x : 0, y : 5}, two : {x : 0, y : 6}, three : {x : 1, y : 5}, four : {x : 2, y : 5}, name : 'jrv'},
  6. jr : {one : {x : 0, y : 4}, two : {x : 1, y : 4}, three : {x : 1, y : 5}, four : {x : 1, y : 6}, name : 'jr'},
  7. jl : {one : {x : 0, y : 4}, two : {x : 0, y : 5}, three : {x : 0, y : 6}, four : {x : 1, y : 6}, name : 'jl'},
  8. lv : {one : {x : 0, y : 4}, two : {x : 1, y : 4}, three : {x : 2, y : 4}, four : {x : 2, y : 5}, name : 'lv'},
  9. lrv : {one : {x : 0, y : 4}, two : {x : 0, y : 5}, three : {x : 1, y : 5}, four : {x : 2, y : 5}, name : 'lrv'},
  10. lr : {one : {x : 1, y : 4}, two : {x : 0, y : 4}, three : {x : 0, y : 5}, four : {x : 0, y : 6}, name : 'lr'},
  11. ll : {one : {x : 1, y : 4}, two : {x : 1, y : 5}, three : {x : 1, y : 6}, four : {x : 0, y : 6}, name : 'll'},
  12. o : {one : {x : 0, y : 4}, two : {x : 0, y : 5}, three : {x : 1, y : 4}, four : {x : 1, y : 5}, name : 'o'},
  13. sv : {one : {x : 0, y : 4}, two : {x : 1, y : 4}, three : {x : 1, y : 5}, four : {x : 2, y : 5}, name : 'sv'},
  14. sh : {one : {x : 1, y : 3}, two : {x : 1, y : 4}, three : {x : 0, y : 4}, four : {x : 0, y : 5}, name : 'sh'},
  15. tv : {one : {x : 0, y : 3}, two : {x : 0, y : 4}, three : {x : 0, y : 5}, four : {x : 1, y : 4}, name : 'tv'},
  16. trv : {one : {x : 1, y : 3}, two : {x : 1, y : 4}, three : {x : 1, y : 5}, four : {x : 0, y : 4}, name : 'trv'},
  17. tr : {one : {x : 0, y : 5}, two : {x : 1, y : 5}, three : {x : 2, y : 5}, four : {x : 1, y : 4}, name : 'tr'},
  18. tl : {one : {x : 0, y : 4}, two : {x : 1, y : 4}, three : {x : 2, y : 4}, four : {x : 1, y : 5}, name : 'tl'},
  19. zv : {one : {x : 0, y : 3}, two : {x : 0, y : 4}, three : {x : 1, y : 4}, four : {x : 1, y : 5}, name : 'zv'},
  20. zh : {one : {x : 0, y : 4}, two : {x : 1, y : 3}, three : {x : 1, y : 4}, four : {x : 2, y : 3}, name : 'zh'}
  21. };
  22.  
  23. var figure = null;
  24. var stop = false;
  25. var cron = null;
  26. var wall = [];
  27.  
  28. var one = '';
  29. var two = '';
  30. var three = '';
  31. var four = '';
  32.  
  33. var keydown = null;
  34.  
  35. function drawPolygon() {
  36. var i = 0;
  37. var polygonTable = '';
  38. var squareId = '';
  39. while(i<=19){
  40. var x = 0;
  41. polygonTable += '<tr>';
  42. while(x<=9){
  43. squareId = i+'/'+x;
  44. polygonTable += '<td id="'+squareId+'">'
  45. //+squareId+ //отобразить индекс блока
  46. '</td>';
  47. x++;
  48. }
  49. polygonTable += '</tr>';
  50. i++;
  51. }
  52. var element = document.getElementById('polygon');
  53. element.innerHTML = polygonTable;
  54. }
  55.  
  56. function drawWall() {
  57. if(wall.length !== 0){
  58. for (var id in wall) {
  59. var element = document.getElementById(wall[id]);
  60. element.style.backgroundColor = 'slateblue';
  61. }
  62. }
  63. }
  64.  
  65. function drawFigure(figure){
  66. for (var key in figure) {
  67. if(key !== 'name'){
  68. var xy = figure[key];
  69. var id = xy.x + '/' + xy.y;
  70. var element = document.getElementById(id);
  71. element.style.backgroundColor = 'slateblue';
  72. }
  73. }
  74. }
  75.  
  76. function moveFigure(figure) {
  77. ++figure.one.x;
  78. ++figure.two.x;
  79. ++figure.three.x;
  80. ++figure.four.x;
  81.  
  82. drawPolygon();
  83. drawWall();
  84.  
  85. for (var key in figure) {
  86. if(key !== 'name') {
  87. var xy = figure[key];
  88. var id = xy.x + '/' + xy.y;
  89. var element = document.getElementById(id);
  90. element.style.backgroundColor = 'slateblue';
  91. }
  92. }
  93. return figure;
  94. }
  95.  
  96. function randomFigure() {
  97. var res = Object.keys(figures);
  98. var figure = figures[res[Math.floor(Math.random()*(Object.keys(figures).length)+0)]];
  99. return figure;
  100. }
  101.  
  102. function newFigure() {
  103. figure = randomFigure();
  104. drawFigure(figure);
  105. process();
  106. }
  107.  
  108. function control() {
  109. /*Функция для контроля за передвижением фигуры, чтобы она не выходила за пределы поля и останавливалась на построенном*/
  110. if(figure.one.x == 19 || figure.two.x == 19 || figure.three.x == 19 || figure.four.x == 19){
  111. return true;
  112. }else {
  113. one = (figure.one.x + 1) + '/' + figure.one.y;
  114. two = (figure.two.x + 1) + '/' + figure.two.y;
  115. three = (figure.three.x + 1) + '/' + figure.three.y;
  116. four = (figure.four.x + 1) + '/' + figure.four.y;
  117. for (var id in wall) {
  118. if(one === wall[id] || two === wall[id] || three === wall[id] || four === wall[id]){
  119. return true;
  120. }
  121. }
  122. return false;
  123. }
  124. }
  125.  
  126. function process() {
  127. cron = setInterval(function () {
  128. stop = control();
  129. if(!stop){
  130. moveFigure(figure);
  131. }else{
  132. clearInterval(cron);
  133. wall.push(
  134. figure.one.x + '/' + figure.one.y,
  135. figure.two.x + '/' + figure.two.y,
  136. figure.three.x + '/' + figure.three.y,
  137. figure.four.x + '/' + figure.four.y
  138. );
  139. wall = unique(wall);
  140. controlWall(wall);
  141. figure = null;
  142.  
  143. return newFigure();
  144. }
  145. }, 1000);
  146. }
  147.  
  148. function unique(arr) {
  149.  
  150. /*Функция, которая оставляет только уникальные значения в массиве
  151. * from learn.javascript.ru
  152. * */
  153.  
  154. var obj = {};
  155.  
  156. for (var i = 0; i < arr.length; i++) {
  157. var str = arr[i];
  158. obj[str] = true; // запомнить строку в виде свойства объекта
  159. }
  160.  
  161. return Object.keys(obj); // или собрать ключи перебором для IE8-
  162. }
  163.  
  164. function driveFigure() {
  165. keydown = event.keyCode;
  166.  
  167. one = (figure.one.x + 1) + '/' + figure.one.y;
  168. two = (figure.two.x + 1) + '/' + figure.two.y;
  169. three = (figure.three.x + 1) + '/' + figure.three.y;
  170. four = (figure.four.x + 1) + '/' + figure.four.y;
  171.  
  172. if(!stop){
  173. switch (keydown){
  174. case 39: //key right //todo сделать невозможным движение вправо влево через фигуры
  175. if(figure.one.y !== 9 && figure.two.y !==9 && figure.three.y !== 9 && figure.four.y !== 9){
  176. ++figure.one.y;
  177. ++figure.two.y;
  178. ++figure.three.y;
  179. ++figure.four.y;
  180. drawPolygon();
  181. drawWall();
  182. drawFigure(figure);
  183. break;
  184. }
  185. else break;
  186. case 37: //key left
  187. if(figure.one.y > 0 && figure.two.y > 0 && figure.three.y > 0 && figure.four.y > 0) {
  188. --figure.one.y;
  189. --figure.two.y;
  190. --figure.three.y;
  191. --figure.four.y;
  192. drawPolygon();
  193. drawWall();
  194. drawFigure(figure);
  195. break;
  196. }
  197. else break;
  198. case 40: //key down
  199. if(wall.indexOf( one ) == -1 && wall.indexOf( two ) == -1 && wall.indexOf( three ) == -1 && wall.indexOf( four ) == -1){
  200. if(figure.one.x !== 19 && figure.two.x !== 19 && figure.three.x !== 19 && figure.four.x !== 19){
  201. moveFigure(figure);
  202. break;
  203. }
  204. break;
  205. }
  206. else break;
  207. case 78: //key n
  208. newFigure();
  209. break;
  210. case 38: //key up
  211. figure = rotateFigure(figure.name);
  212. drawPolygon();
  213. drawWall();
  214. drawFigure(figure);
  215. break;
  216. }
  217. }
  218. else return console.log('stop');
  219. }
  220.  
  221. function rotateFigure(name) {
  222. switch (name){
  223. case 'ih':
  224. ++figure.two.x;
  225. --figure.two.y;
  226. figure.three.x += 2;
  227. figure.three.y += -2;
  228. figure.four.x += 3;
  229. figure.four.y += -3;
  230. figure.name = 'iv';
  231. break;
  232. case 'iv':
  233. --figure.two.x;
  234. ++figure.two.y;
  235. figure.three.x += -2;
  236. figure.three.y += 2;
  237. figure.four.x += -3;
  238. figure.four.y += 3;
  239. figure.name = 'ih';
  240. break;
  241. case 'jv':
  242. --figure.one.y;
  243. --figure.two.y;
  244. --figure.three.x;
  245. --figure.four.x;
  246. figure.four.y += 2;
  247. figure.name = 'jr';
  248. break;
  249. case 'jr':
  250. ++figure.one.y;
  251. --figure.two.x;
  252. figure.two.y += 2;
  253. ++figure.four.x;
  254. --figure.four.y;
  255. figure.name = 'jrv';
  256. break;
  257. case 'jrv':
  258. ++figure.one.x;
  259. --figure.one.y;
  260. ++figure.two.x;
  261. --figure.two.y;
  262. ++figure.three.y;
  263. ++figure.four.y;
  264. figure.name = 'jl';
  265. break;
  266. case 'jl':
  267. --figure.one.x;
  268. ++figure.one.y;
  269. ++figure.three.x;
  270. --figure.three.y;
  271. figure.four.y -= 2;
  272. figure.name = 'jv';
  273. break;
  274. case 'lv':
  275. figure.one.x += 2;
  276. --figure.one.y;
  277. --figure.two.y;
  278. --figure.three.x;
  279. --figure.four.x;
  280. figure.name = 'lr';
  281. break;
  282. case 'lr':
  283. figure.one.x -= 2;
  284. --figure.two.x;
  285. ++figure.two.y;
  286. ++figure.four.x;
  287. --figure.four.y;
  288. figure.name = 'lrv';
  289. break;
  290. case 'lrv': //todo fix problem
  291. figure.one.y += 2;
  292. ++figure.two.x;
  293. --figure.two.y;
  294. --figure.four.x;
  295. ++figure.four.y;
  296. figure.name = 'll';
  297. break;
  298. case 'll':
  299. --figure.one.y;
  300. ++figure.two.y;
  301. ++figure.three.x;
  302. ++figure.four.x;
  303. figure.name = 'lv';
  304. break;
  305. case 'sv':
  306. ++figure.one.x;
  307. ++figure.two.y;
  308. --figure.three.x;
  309. figure.four.x -= 2;
  310. ++figure.four.y;
  311. figure.name = 'sh';
  312. break;
  313. case 'sh':
  314. --figure.one.x;
  315. --figure.two.y;
  316. ++figure.three.x;
  317. figure.four.x += 2;
  318. --figure.four.y;
  319. figure.name = 'sv';
  320. break;
  321. case 'zv':
  322. --figure.one.x;
  323. ++figure.one.y;
  324. --figure.two.y;
  325. --figure.three.x;
  326. figure.four.y -= 2;
  327. figure.name = 'zh';
  328. break;
  329. case 'zh':
  330. ++figure.one.x;
  331. --figure.one.y;
  332. ++figure.two.y;
  333. ++figure.three.x;
  334. figure.four.y += 2;
  335. figure.name = 'zv';
  336. break;
  337. case 'tv':
  338. ++figure.one.y;
  339. ++figure.two.x;
  340. figure.three.x += 2;
  341. --figure.three.y;
  342. --figure.four.y;
  343. figure.name = 'tr';
  344. break;
  345. case 'tr':
  346. ++figure.one.x;
  347. --figure.one.y;
  348. --figure.three.x;
  349. ++figure.three.y;
  350. --figure.four.x;
  351. ++figure.four.y;
  352. figure.name = 'trv';
  353. break;
  354. case 'trv':
  355. --figure.one.x;
  356. ++figure.one.y;
  357. ++figure.three.x;
  358. --figure.three.y;
  359. ++figure.four.x;
  360. ++figure.four.y;
  361. figure.name = 'tl';
  362. break;
  363. case 'tl':
  364. ++figure.one.x;
  365. --figure.one.y;
  366. --figure.three.x;
  367. ++figure.three.y;
  368. ++figure.four.x;
  369. --figure.four.y;
  370. figure.name = 'tv';
  371. break;
  372. }
  373. return figure;
  374. }
  375.  
  376. function controlWall(wall){
  377. var lines = [];
  378. var slash_position = null;
  379. var string_number = null;
  380. if(wall.length !== 0){
  381. for (var value in wall) {
  382. slash_position = wall[value].indexOf("/");
  383. string_number = wall[value].substring(0, slash_position);
  384. lines[string_number] ? lines[string_number]++ : lines[string_number] = 1;
  385. if (lines[string_number] == 10)
  386. {
  387. console.log('line '+string_number+' is ready'); // здесь должна уничтожаться линия и вся постройка выше этой линии сдвигаться вверх по "y", то есть вниз по стакану
  388. var line = [];
  389. var element = '';
  390. for (var i = 0; i <= 9; i++) {
  391. element = string_number+'/'+i;
  392. line.push(element);
  393. }
  394. for (var line_element in line) {
  395. // console.log(line_element);
  396. console.log(wall.indexOf(line_element));
  397. // delete
  398. }
  399. }
  400. }
  401. }
  402. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement