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

загрузка...
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