Гама на JavaScript прямо в онлайне
Спецвыпуск хакер, номер #002, стр. 002-060-6
waitdelay=200; // Присваиваем значение по умолчанию
deltascore=0; // Нет игры - нет и отскоков
scoreboard.value="Score: "+score; //Записываем ноль в табло
main(); // Вызываем основную функцию
} //Конец блока if
} // Конец тела функции newgame
function main(){ // Объявляем функцию main без аргументов
if (errorflag!=1){ //Если ошибки нет, т.е. если мяч успешно отбит...
definefield(); // Вызываем функцию, отвечающую за прорисовку поля
definemovement(); // Вызываем функцию, отвечающую за движение объектов
onflag=1; // Обозначаем, что игра уже идет
setTimeout("main()",waitdelay); // Вызываем main через waitdelay миллисекунд
} //Конец блока if
else { //Ошибка! Мяч не был отбит!
printscreen="Вы жестоко ошиблись!!!!!"; // Формируем строку сообщения
battleForm.battleTA.value=printscreen; // Выводим сообщение
onflag=0; //Устанавливаем в состояние "игры нет"
} // Конец блока else
} // Конец тела функции main
function testbrowser(){ // Объявляем функцию testbrowser без аргументов
if (window.navigator.userAgent.indexOf("MSIE")== -1) // Если в объекте информации о
// браузере userAgent нет строки MSIE, то это - не Internet Explorer!
alert ("Please use IE for this page!"); // Используем метод alert для предупреждения
} // Конец тела функции testbrowser
function keyboard(){ // Объявляем функцию keyboard без аргументов
if (window.event.keyCode==37 && racketpos>1) racketpos--;
// Если нажата кнопка влево и ракетка не у левого края, двигаем ее влево
if (window.event.keyCode==39 && racketpos<15) racketpos++;
// Аналогично: нажата кнопка вправо и ракетка не у самого края, двигаем ее вправо
} // Конец тела функции keyboard
function definefield(){ // Объявляем саму функцию и в который раз без аргументов
printscreen=""; // Обнуляем переменную, отвечающую за прорисовку поля
fieldx=fieldy=1; // Начинаем поиск мячика с левого верхнего угла поля
// Блок 1:
while (fieldy<20){ // Для каждой строки по 19-ю включительно:
for (fieldx=1; fieldx<31; fieldx++){ // Для каждого элемента сравниваем:
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 "battleTA"
} // Конец функции definefield
function definemovement(){ // Объявляем функцию без аргументов
// Сразу самый сложный случай: мяч на последней горизонтали
if (objecty>18){ // Внимание! Мяч на предпоследней строке!
if (objectdx>0 && (racketpos*2-2==objectx || racketpos*2==objectx || racketpos*2-1==objectx))