Игра на JS. Косяк с массивом
В общем у меня задание - написать игру на JS. Смысл игры:
На странице есть рабочая область 800х550 пикс. Внутри области рандомом расставляются БЛОКИ - картинки различной ширины и высоты, препятствующие движению объекта. . В нижней части области, при нажатии на кнопку СТАРТ появляется ОБЪЕКТ - отдельная картинка. Объект можно перемещать с помощью клавиш (стрелки). Цель «игры» - переместить объект от нижней границы до верхней, при этом не задев движущиеся блоки. Если блок задет, то объект начинает мигать и появляется надмись «game over», а также появляется кнопка restart. При клике на кнопку «старт» появляется «окошко» с предложением ввести кол-во блоков, скорость перемещения объекта. Вот код игры: var ball = document.getElementById('ball'); //Получаем объект "Колобок" var playground = document.getElementById('playground'); //Получаем игровое поле var enemyground = document.getElementById('enemyground'); //Получем поле передвижения врагов var info_zone = document.getElementById('info_zone'); //Получем поле вывода сообщений var attemptContainer = document.getElementById('attemptContainer'); //Получаем контейнер счетчика var startBtn = document.getElementById('start'); //Получаем кнопку "Старт" var resetBtn = document.getElementById('reset'); //Получаем кнопку обнуления попытки var positionXstart = 384; //Стартовая позиция колобка по горизонтали var positionYstart = 486; //Стартовая позиция колобка по вертикали var speed = 0; //Скорость колобка var blocks = 0; //Количество блоков var globalDeath = 0; var attempt = 1; //Количество попыток var en = []; //ID блоков var speedB = []; //Скорость блоков var getSpeed; //Переменная скорости колобка var getBlocks; //Переменная количества блоков var tempW = []; //Временная переменная ширины блока var tempH = []; //Временная переменная высоты блока var tempP = []; //Временная переменная вертикальной позиции блока var tempS = []; //Временная переменная скорости блока /* Выводим счетчик */ attemptContainer.innerHTML = 'Attempt: <span id="countAttempts" >' + attempt + '</span>'; var countAttempts = document.getElementById('countAttempts'); //Элемент "Счетчик" /* Задаем стартовые параметры положения */ ball.style.left = positionXstart; ball.style.top = positionYstart; /* Функция запроса скорости и количества блоков */ function startDialog(){ getSpeed = window.prompt("Your speed (Leave input line blank for default value - 2)", ""); if((getSpeed === "") || (getSpeed==null)) getSpeed = 2; getBlocks = window.prompt("Ammount of enemy blocks (Leave input line blank for default value - 3)", ""); if((getBlocks === "") || (getBlocks==null)) getBlocks = 3; } function lowOpacity(){ ball.style.opacity = 0; } function hightOpacity(){ ball.style.opacity = 1; } lowOpacity(); startDialog(); hightOpacity(); ball.style.visibility = "visible"; speed = parseInt(getSpeed); blocks = parseInt(getBlocks); var posiX = positionXstart; var posiY = positionYstart; /* Функция счетчика */ function nextAttempt(){ attempt++; attemptContainer.innerHTML = 'Attempt: <span id="countAttempts" >' + attempt + '</span>'; } /* Получение случайных величин */ function getRandomH(){ //Высота блока return parseInt(Math.random() * 60 + 20); } function getRandomW(){ //Ширина блока return parseInt(Math.random() * 170 + 20); } function getRandomVerPositition(){ //Вертикальная позиция блока return parseInt(Math.random() * 20 + 10); } function getRandomSpeedB() { //Скорость блока return parseInt(Math.random() * 5 + 10); } /* Отрисовка блоков на поле */ function drawBlocks(){ var i; var nameOfIteration; var dPosition = 40; for(i=0;i<getBlocks;i++){ enemyground.innerHTML += '<div id="en' + i + '"> </div>'; nameOfIteration = 'en' + i; en[i] = document.getElementById(nameOfIteration); en[i].style.position = 'relative'; en[i].style.background = '#000'; tempW[i] = getRandomW(); en[i].style.width = tempW[i]; tempH[i] = getRandomH(); en[i].style.height = tempH[i]; dPosition += getRandomVerPositition(); tempP[i] = dPosition; en[i].style.top = tempP[i]; tempS[i] = getRandomSpeedB(); speedB[i] = tempS[i]; } } /* Очистка поля передвижения врагов */ function removeBlocks() { enemyground.innerHTML = ''; } function moveBlocks() { var i = 0; var nameOfIteration; for(i=0;i<getBlocks;i++){ enemyground.innerHTML += '<div id="en' + i + '"> </div>'; nameOfIteration = 'en' + i; en[i] = document.getElementById(nameOfIteration); en[i].style.position = 'relative'; en[i].style.background = '#000'; en[i].style.width = tempW[i]; en[i].style.height = tempH[i]; en[i].style.top = tempP[i]; //if((posiY<=(tempP[i]+tempH[i]))&&(posiY>=tempP[i])){ // if((posiX>=speedB[i])&&(posiX<=(speedB[i]+tempW[i]))){ // alert(i); // alert(tempH[i]); // death(); // } //} if(speedB[i] >= 800){ tempS[i] = -tempS[i]; } else if(speedB[i] <= (0 - tempW[i])){ tempS[i] = -tempS[i]; } en[i].style.left = speedB[i]; speedB[i] = speedB[i] + tempS[i]; } } function updateBlocks(){ var j = 0; if(globalDeath==0){ for(j=0;j<getBlocks;j++){ if((posiY<=(tempP[j]+tempH[j]))&&(posiY>=tempP[j])){ if((posiX>=speedB[j])&&(posiX<=(speedB[j]+tempW[j]))){ alert(j); alert(tempH[j]); death(); } } } removeBlocks(); moveBlocks(); window.setTimeout('updateBlocks()', 50); } } /* Очистка инфо-зоны */ function clearInfo(){ info_zone.innerHTML = ''; } /* Смерть колобка */ function death(){ globalDeath = 1; removeBlocks(); var mnogo = 999999; var i = 0; info_zone.innerHTML = '<h1>Death!</h1>'; for(i=0;i<=mnogo;i++){ if(i%1000>=500){ lowOpacity(); } else { hightOpacity(); } } clearInfo(); } /* Функция кнопки Старт */ function startF(){ removeBlocks(); nextAttempt(); ball.style.visibility = "none"; ball.style.left = positionXstart; ball.style.top = positionYstart; posiX = positionXstart; posiY = positionYstart; globalDeath = 0; if (window.confirm("Do you want to use last settings?")) { ball.style.visibility = "visible"; removeBlocks(); drawBlocks(); } else { startDialog(); speed = parseInt(getSpeed); blocks = parseInt(getBlocks); ball.style.visibility = "visible"; removeBlocks(); drawBlocks(); } clearInfo(); } /* Функция обнуления попытки */ function resetF(){ ball.style.left = positionXstart; ball.style.top = positionYstart; posiX = positionXstart; posiY = positionYstart; ball.src = "img/ball.png"; } /* Победа */ function winGame(){ info_zone.innerHTML = '<h1>Win!</h1>'; ball.style.opacity = 0; } /* Функция движения колобка */ function moveBall(evt){ evt = (evt) ? evt : window.event; if(evt){ if(posiX <= 0) posiX = 0; if(posiX >= 736) posiX = 736; if(posiY >= 486) posiY = 486; if(posiY <= 0) posiY = 0; if(posiY == 0) winGame(); if(ball&&globalDeath==0){ var code = (evt.charCode)? evt.charCode : evt.keyCode; //alert(code); switch(code){ case 37: // left ball.style.left = (posiX - speed); posiX = (posiX - speed); ball.src = "img/ball_l.png"; break; case 38: // up ball.style.top = (posiY - speed); posiY = (posiY - speed); break; case 39: // right ball.style.left = (posiX + speed); posiX = (posiX + speed); ball.src = "img/ball.png"; break; case 40: // down ball.style.top = (posiY + speed); posiY = (posiY + speed); break; case 114: // R resetF(); break; case 115: // S startF(); break; } } } } document.onkeypress = moveBall; resetBtn.onclick = resetF; startBtn.onclick = startF; drawBlocks(); updateBlocks(); Проблема в том, что смерть работает только на 1-ый блок. На остальные он не реагирует. Помогите пожалуйста! http://ifolder.ru/24034082 Вот папка со всеми картинками и HTML и CSS файликом |
Часовой пояс GMT +3, время: 15:11. |