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

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

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

if (window.navigator.userAgent.indexOf("MSIE")== -1) // Если в объекте информации о

// браузере userAgent нет строки MSIE, то это - не Internet Explorer!

alert ("Please use IE for this page!"); // Используем метод alert для предупреждения

} // Конец тела функции testbrowser

Реально эта функция запрашивает строку userAgent, возвращаемую браузером, и, если значение "MSIE" не найдено, выдается предупреждающее сообщение. Вызывается при загрузке страницы в теге <BODY onload = testbrowser()>.

Теперь разберемся с клавиатурой - ведь нужно, чтобы можно было управлять ракеткой с помощью стрелок влево-вправо (в следующем номере Х расскажу, как подключить к игре джойстик с Форс-Фидбэком). :)

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

if (window.event.keyCode==37 && racketpos>1) racketpos--;

// Если нажата кнопка влево, и ракетка не у левого края, двигаем ее влево

if (window.event.keyCode==39 && racketpos<15) racketpos++;

// Аналогично: нажата кнопка вправо, и ракетка не у самого края, двигаем ее вправо

} // Конец тела функции keyboard

Здесь мы запрашиваем код события (т.е. нажатой кнопки) в формате Unicode. В этом формате 37 соответствует "стрелке влево", а 39 - "стрелке вправо". Логическое И (&&) позволяет сдвигать ракетку (т.е. увеличивать или уменьшать на единицу ее координату), только если она не находится на краю поля. Так как ракетка занимает две позиции на поле (==), всего возможно только 15 ее положений (ширина поля равна 30).

Функция keyboard будет вызываться при каждом нажатии клавиши (<BODY onkeydown=keyboard()>).

Теперь, засучив рукава и приспустив штаны, приступим к основным функциям, первая из которых - definefield. Сначала давай прикинем, как она должна выглядеть в общих чертах.

Результатом ее работы будет строка длинною в 600 символов (TEXAREA я предлагаю задать 30х20), которая затем будет записана в наше основное текстовое поле. Поскольку последняя строка, содержащая "ракетку", не вполне обычна, логичным решением будет разбить функцию на два блока: первый отвечает за наполнение первых 570 значений (19 строк), а второй - только за последнюю строку. Таким образом, для первых 19 строк: если значения переменных "мячика" и поля по X и Y совпадают, то пишем "o" (это наш мячик), иначе - "." (точку, т.е. ничего нет). Для последней строки: если совпали координата X строки и переменная положения ракетки racketpos, то пишем "==" (ракетку), иначе - ".." (две точки - наш стандартный наполнитель поля). В конце функции необходимо осуществить вывод нашей переменной printscreen.

Вот как все это реализуется на практике:

Шаг 5: Функция definefield:

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

printscreen=""; // Обнуляем переменную, отвечающую за прорисовку поля

fieldx=fieldy=1; // Начинаем поиск мячика с левого верхнего угла поля

// Блок 1:

while (fieldy<20){ // Для каждой строки по 19-ю включительно:

for (fieldx=1; fieldx<31; fieldx++){ // Для каждого элемента строки сравниваем:

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

ttfb: 2.8939247131348 ms