Гама на JavaScript прямо в онлайне

Спецвыпуск хакер, номер #002, стр. 002-060-4

if (objectx==fieldx && objecty==fieldy) printscreen+="o";

// Если совпали координаты, то на этом месте - мячик

else printscreen+="."; // Иначе - пусто

} // Конец цикла for - вся строка просмотрена в поисках мячика

fieldy++; // Берем следующую строку и все сначала, пока не исчерпаем все 19 строк

} // Конец цикла while - все 19 строк пройдены

// Блок 2 для последней 20-ой строки:

for (fieldx=1; fieldx<16; fieldx++){ // Для каждого второго элемента (Всего 15 позиций!)

if (racketpos==fieldx) printscreen+="=="; // Если совпали, значит рисуем ракетку

else printscreen+="..";// Иначе - пусто

} // Конец цикла for - где-то нарисовали ракетку

battleForm.battleTA.value=printscreen; // Рисуем наше поле в TEXTAREA

} // Конец функции definefield

Теперь осталось рассмотреть последнюю функцию definemovement, которая отвечает за изменение состояния всех объектов, т.е. их движение. Каждый раз, когда мы обращаемся к этой функции, мячик, ясный пень, должен двигаться. Иными словами, координата мячика изменяется по X и Y. Если, например, он движется вниз и вправо, то обе координаты возрастают. Если вверх и влево - убывают. Ясно, что возможны и два комбинированных случая (вправо вверх и влево вниз).

Таким образом, чтобы задать передвижение мяча, необходимо изменить на противоположное направление его приращения в четырех пиковых границах - вблизи стен нашей коробки. С тремя стенками все просто - только и дела что проверить координату мяча и изменить знак у objectdx или objectdy. Четвертый случай (когда необходимо отслеживать и позицию ракетки) более сложен:

Ракетка занимает два элемента поля и, следовательно, имеет 15 возможных положений на нем. Будем считать, что ракетка может отражать мяч своими "углами". Допустим, что положение ракетки сейчас равно 7. Тогда занимаемые ею поля, как ты шаришь, 13 и 14. Теперь займемся отражением "углами". Если мяч падает на ракетку слева, то он должен отражаться и в колонке 12 (это и будет похоже на то, что ракетка отразила мяч своим левым углом). Соответственно, если он падает справа, то правый угол будет в колонке 15. Следовательно, условие отражения мяча может быть задано нами в виде: если мяч движется вправо и X-координата мяча равна позиции ракетки, умноженной на два, или позиции ракетки, умноженной на два - 1, или позиции ракетки, умноженной на два - 2, то мяч надо отразить. Используя логическое ИЛИ ( оператор || ) получаем: if (objectdx > 0 && ( racketpos*2-2 == objectx || racketpos*2 - 1 == objectx || racketpos*2 == objectx )) objectdy = -objectdy. Теперь направление изменено и мяч отразился. Вариант для движения мяча влево и остальной необходимый код приведен уже в самой функции:

Шаг 6: Функция definemovement:

function definemovement(){ // Объявляем функцию без аргументов

// Сразу самый сложный случай: мяч на предпоследней горизонтали

if (objecty>18){ // Внимание!

if (objectdx>0 && (racketpos*2-2==objectx || racketpos*2==objectx || racketpos*2-1==objectx))

// Если мяч движется вправо и находится в зоне ракетки

Назад на стр. 002-060-3  Содержание  Вперед на стр. 002-060-5

загрузка...
Cпец Хакер #075Cпец Хакер #074Cпец Хакер #073Cпец Хакер #072Cпец Хакер #071Cпец Хакер #070Cпец Хакер #069Cпец Хакер #068Cпец Хакер #067Cпец Хакер #066Cпец Хакер #065Cпец Хакер #064Cпец Хакер #063Cпец Хакер #062Cпец Хакер #061Cпец Хакер #060Cпец Хакер #059Cпец Хакер #058Cпец Хакер #057Cпец Хакер #056Cпец Хакер #055Cпец Хакер #054Cпец Хакер #053Cпец Хакер #052Cпец Хакер #051Cпец Хакер #050Cпец Хакер #049Cпец Хакер #048Cпец Хакер #047Cпец Хакер #046Cпец Хакер #045Cпец Хакер #044Cпец Хакер #043Cпец Хакер #042Cпец Хакер #041Cпец Хакер #040Cпец Хакер #039Cпец Хакер #038Cпец Хакер #037Cпец Хакер #036Cпец Хакер #035Cпец Хакер #034Cпец Хакер #033Cпец Хакер #032Cпец Хакер #031Cпец Хакер #030Cпец Хакер #029Cпец Хакер #028Cпец Хакер #027Cпец Хакер #026Cпец Хакер #025Cпец Хакер #024Cпец Хакер #023Cпец Хакер #022Cпец Хакер #021Cпец Хакер #020Cпец Хакер #019Cпец Хакер #018Cпец Хакер #017Cпец Хакер #016Cпец Хакер #015Cпец Хакер #014Cпец Хакер #013Cпец Хакер #012Cпец Хакер #011Cпец Хакер #010Cпец Хакер #009Cпец Хакер #008Cпец Хакер #007Cпец Хакер #006Cпец Хакер #005Cпец Хакер #004Cпец Хакер #003Cпец Хакер #002Cпец Хакер #001