ЖУРНАЛ ХАКЕР

Гама на 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