Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var figures = {
- ih : {one : {x : 0, y : 3}, two : {x : 0, y : 4}, three : {x : 0, y : 5}, four : {x : 0, y : 6}, name : 'ih'},
- iv : {one : {x : 0, y : 4}, two : {x : 1, y : 4}, three : {x : 2, y : 4}, four : {x : 3, y : 4}, name : 'iv'},
- jv : {one : {x : 0, y : 5}, two : {x : 1, y : 5}, three : {x : 2, y : 5}, four : {x : 2, y : 4}, name : 'jv'},
- jrv : {one : {x : 0, y : 5}, two : {x : 0, y : 6}, three : {x : 1, y : 5}, four : {x : 2, y : 5}, name : 'jrv'},
- jr : {one : {x : 0, y : 4}, two : {x : 1, y : 4}, three : {x : 1, y : 5}, four : {x : 1, y : 6}, name : 'jr'},
- jl : {one : {x : 0, y : 4}, two : {x : 0, y : 5}, three : {x : 0, y : 6}, four : {x : 1, y : 6}, name : 'jl'},
- lv : {one : {x : 0, y : 4}, two : {x : 1, y : 4}, three : {x : 2, y : 4}, four : {x : 2, y : 5}, name : 'lv'},
- lrv : {one : {x : 0, y : 4}, two : {x : 0, y : 5}, three : {x : 1, y : 5}, four : {x : 2, y : 5}, name : 'lrv'},
- lr : {one : {x : 1, y : 4}, two : {x : 0, y : 4}, three : {x : 0, y : 5}, four : {x : 0, y : 6}, name : 'lr'},
- ll : {one : {x : 1, y : 4}, two : {x : 1, y : 5}, three : {x : 1, y : 6}, four : {x : 0, y : 6}, name : 'll'},
- o : {one : {x : 0, y : 4}, two : {x : 0, y : 5}, three : {x : 1, y : 4}, four : {x : 1, y : 5}, name : 'o'},
- sv : {one : {x : 0, y : 4}, two : {x : 1, y : 4}, three : {x : 1, y : 5}, four : {x : 2, y : 5}, name : 'sv'},
- sh : {one : {x : 1, y : 3}, two : {x : 1, y : 4}, three : {x : 0, y : 4}, four : {x : 0, y : 5}, name : 'sh'},
- tv : {one : {x : 0, y : 3}, two : {x : 0, y : 4}, three : {x : 0, y : 5}, four : {x : 1, y : 4}, name : 'tv'},
- trv : {one : {x : 1, y : 3}, two : {x : 1, y : 4}, three : {x : 1, y : 5}, four : {x : 0, y : 4}, name : 'trv'},
- tr : {one : {x : 0, y : 5}, two : {x : 1, y : 5}, three : {x : 2, y : 5}, four : {x : 1, y : 4}, name : 'tr'},
- tl : {one : {x : 0, y : 4}, two : {x : 1, y : 4}, three : {x : 2, y : 4}, four : {x : 1, y : 5}, name : 'tl'},
- zv : {one : {x : 0, y : 3}, two : {x : 0, y : 4}, three : {x : 1, y : 4}, four : {x : 1, y : 5}, name : 'zv'},
- zh : {one : {x : 0, y : 4}, two : {x : 1, y : 3}, three : {x : 1, y : 4}, four : {x : 2, y : 3}, name : 'zh'}
- };
- var figure = null;
- var stop = false;
- var cron = null;
- var wall = [];
- var one = '';
- var two = '';
- var three = '';
- var four = '';
- var keydown = null;
- function drawPolygon() {
- var i = 0;
- var polygonTable = '';
- var squareId = '';
- while(i<=19){
- var x = 0;
- polygonTable += '<tr>';
- while(x<=9){
- squareId = i+'/'+x;
- polygonTable += '<td id="'+squareId+'">'
- //+squareId+ //отобразить индекс блока
- '</td>';
- x++;
- }
- polygonTable += '</tr>';
- i++;
- }
- var element = document.getElementById('polygon');
- element.innerHTML = polygonTable;
- }
- function drawWall() {
- if(wall.length !== 0){
- for (var id in wall) {
- var element = document.getElementById(wall[id]);
- element.style.backgroundColor = 'slateblue';
- }
- }
- }
- function drawFigure(figure){
- for (var key in figure) {
- if(key !== 'name'){
- var xy = figure[key];
- var id = xy.x + '/' + xy.y;
- var element = document.getElementById(id);
- element.style.backgroundColor = 'slateblue';
- }
- }
- }
- function moveFigure(figure) {
- ++figure.one.x;
- ++figure.two.x;
- ++figure.three.x;
- ++figure.four.x;
- drawPolygon();
- drawWall();
- for (var key in figure) {
- if(key !== 'name') {
- var xy = figure[key];
- var id = xy.x + '/' + xy.y;
- var element = document.getElementById(id);
- element.style.backgroundColor = 'slateblue';
- }
- }
- return figure;
- }
- function randomFigure() {
- var res = Object.keys(figures);
- var figure = figures[res[Math.floor(Math.random()*(Object.keys(figures).length)+0)]];
- return figure;
- }
- function newFigure() {
- figure = randomFigure();
- drawFigure(figure);
- process();
- }
- function control() {
- /*Функция для контроля за передвижением фигуры, чтобы она не выходила за пределы поля и останавливалась на построенном*/
- if(figure.one.x == 19 || figure.two.x == 19 || figure.three.x == 19 || figure.four.x == 19){
- return true;
- }else {
- one = (figure.one.x + 1) + '/' + figure.one.y;
- two = (figure.two.x + 1) + '/' + figure.two.y;
- three = (figure.three.x + 1) + '/' + figure.three.y;
- four = (figure.four.x + 1) + '/' + figure.four.y;
- for (var id in wall) {
- if(one === wall[id] || two === wall[id] || three === wall[id] || four === wall[id]){
- return true;
- }
- }
- return false;
- }
- }
- function process() {
- cron = setInterval(function () {
- stop = control();
- if(!stop){
- moveFigure(figure);
- }else{
- clearInterval(cron);
- wall.push(
- figure.one.x + '/' + figure.one.y,
- figure.two.x + '/' + figure.two.y,
- figure.three.x + '/' + figure.three.y,
- figure.four.x + '/' + figure.four.y
- );
- wall = unique(wall);
- controlWall(wall);
- figure = null;
- return newFigure();
- }
- }, 1000);
- }
- function unique(arr) {
- /*Функция, которая оставляет только уникальные значения в массиве
- * from learn.javascript.ru
- * */
- var obj = {};
- for (var i = 0; i < arr.length; i++) {
- var str = arr[i];
- obj[str] = true; // запомнить строку в виде свойства объекта
- }
- return Object.keys(obj); // или собрать ключи перебором для IE8-
- }
- function driveFigure() {
- keydown = event.keyCode;
- one = (figure.one.x + 1) + '/' + figure.one.y;
- two = (figure.two.x + 1) + '/' + figure.two.y;
- three = (figure.three.x + 1) + '/' + figure.three.y;
- four = (figure.four.x + 1) + '/' + figure.four.y;
- if(!stop){
- switch (keydown){
- case 39: //key right //todo сделать невозможным движение вправо влево через фигуры
- if(figure.one.y !== 9 && figure.two.y !==9 && figure.three.y !== 9 && figure.four.y !== 9){
- ++figure.one.y;
- ++figure.two.y;
- ++figure.three.y;
- ++figure.four.y;
- drawPolygon();
- drawWall();
- drawFigure(figure);
- break;
- }
- else break;
- case 37: //key left
- if(figure.one.y > 0 && figure.two.y > 0 && figure.three.y > 0 && figure.four.y > 0) {
- --figure.one.y;
- --figure.two.y;
- --figure.three.y;
- --figure.four.y;
- drawPolygon();
- drawWall();
- drawFigure(figure);
- break;
- }
- else break;
- case 40: //key down
- if(wall.indexOf( one ) == -1 && wall.indexOf( two ) == -1 && wall.indexOf( three ) == -1 && wall.indexOf( four ) == -1){
- if(figure.one.x !== 19 && figure.two.x !== 19 && figure.three.x !== 19 && figure.four.x !== 19){
- moveFigure(figure);
- break;
- }
- break;
- }
- else break;
- case 78: //key n
- newFigure();
- break;
- case 38: //key up
- figure = rotateFigure(figure.name);
- drawPolygon();
- drawWall();
- drawFigure(figure);
- break;
- }
- }
- else return console.log('stop');
- }
- function rotateFigure(name) {
- switch (name){
- case 'ih':
- ++figure.two.x;
- --figure.two.y;
- figure.three.x += 2;
- figure.three.y += -2;
- figure.four.x += 3;
- figure.four.y += -3;
- figure.name = 'iv';
- break;
- case 'iv':
- --figure.two.x;
- ++figure.two.y;
- figure.three.x += -2;
- figure.three.y += 2;
- figure.four.x += -3;
- figure.four.y += 3;
- figure.name = 'ih';
- break;
- case 'jv':
- --figure.one.y;
- --figure.two.y;
- --figure.three.x;
- --figure.four.x;
- figure.four.y += 2;
- figure.name = 'jr';
- break;
- case 'jr':
- ++figure.one.y;
- --figure.two.x;
- figure.two.y += 2;
- ++figure.four.x;
- --figure.four.y;
- figure.name = 'jrv';
- break;
- case 'jrv':
- ++figure.one.x;
- --figure.one.y;
- ++figure.two.x;
- --figure.two.y;
- ++figure.three.y;
- ++figure.four.y;
- figure.name = 'jl';
- break;
- case 'jl':
- --figure.one.x;
- ++figure.one.y;
- ++figure.three.x;
- --figure.three.y;
- figure.four.y -= 2;
- figure.name = 'jv';
- break;
- case 'lv':
- figure.one.x += 2;
- --figure.one.y;
- --figure.two.y;
- --figure.three.x;
- --figure.four.x;
- figure.name = 'lr';
- break;
- case 'lr':
- figure.one.x -= 2;
- --figure.two.x;
- ++figure.two.y;
- ++figure.four.x;
- --figure.four.y;
- figure.name = 'lrv';
- break;
- case 'lrv': //todo fix problem
- figure.one.y += 2;
- ++figure.two.x;
- --figure.two.y;
- --figure.four.x;
- ++figure.four.y;
- figure.name = 'll';
- break;
- case 'll':
- --figure.one.y;
- ++figure.two.y;
- ++figure.three.x;
- ++figure.four.x;
- figure.name = 'lv';
- break;
- case 'sv':
- ++figure.one.x;
- ++figure.two.y;
- --figure.three.x;
- figure.four.x -= 2;
- ++figure.four.y;
- figure.name = 'sh';
- break;
- case 'sh':
- --figure.one.x;
- --figure.two.y;
- ++figure.three.x;
- figure.four.x += 2;
- --figure.four.y;
- figure.name = 'sv';
- break;
- case 'zv':
- --figure.one.x;
- ++figure.one.y;
- --figure.two.y;
- --figure.three.x;
- figure.four.y -= 2;
- figure.name = 'zh';
- break;
- case 'zh':
- ++figure.one.x;
- --figure.one.y;
- ++figure.two.y;
- ++figure.three.x;
- figure.four.y += 2;
- figure.name = 'zv';
- break;
- case 'tv':
- ++figure.one.y;
- ++figure.two.x;
- figure.three.x += 2;
- --figure.three.y;
- --figure.four.y;
- figure.name = 'tr';
- break;
- case 'tr':
- ++figure.one.x;
- --figure.one.y;
- --figure.three.x;
- ++figure.three.y;
- --figure.four.x;
- ++figure.four.y;
- figure.name = 'trv';
- break;
- case 'trv':
- --figure.one.x;
- ++figure.one.y;
- ++figure.three.x;
- --figure.three.y;
- ++figure.four.x;
- ++figure.four.y;
- figure.name = 'tl';
- break;
- case 'tl':
- ++figure.one.x;
- --figure.one.y;
- --figure.three.x;
- ++figure.three.y;
- ++figure.four.x;
- --figure.four.y;
- figure.name = 'tv';
- break;
- }
- return figure;
- }
- function controlWall(wall){
- var lines = [];
- var slash_position = null;
- var string_number = null;
- if(wall.length !== 0){
- for (var value in wall) {
- slash_position = wall[value].indexOf("/");
- string_number = wall[value].substring(0, slash_position);
- lines[string_number] ? lines[string_number]++ : lines[string_number] = 1;
- if (lines[string_number] == 10)
- {
- console.log('line '+string_number+' is ready'); // здесь должна уничтожаться линия и вся постройка выше этой линии сдвигаться вверх по "y", то есть вниз по стакану
- var line = [];
- var element = '';
- for (var i = 0; i <= 9; i++) {
- element = string_number+'/'+i;
- line.push(element);
- }
- for (var line_element in line) {
- // console.log(line_element);
- console.log(wall.indexOf(line_element));
- // delete
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement