ЖУРНАЛ ХАКЕР

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

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


var objectx=2; // X-координата мячика

var objectdx=1; // Смещение мячика по оси X

var objecty=2; // Y-координата мячика

var objectdy=1; // Смещение мячика по оси Y

var racketpos=7; // Положение ракетки

var errorflag=0; // Если 0, то мяч отбит. Если единица, то мяч вовремя не отбит.

var score=0; // Набранные очки

var deltascore=1; // Количество отскоков

var waitdelay=200; // Задержка в миллисекундах между движениями мячика (скорость игры)

var onflag=0; // Если 0, то игра не начата. Единица, если уже идет.

var printscreen; // Главная переменная вывода

Теперь давай напишем вспомогательную функцию newgame, которая будет вызываться при нажатии кнопки "Start Game". Ее основная работа - проверка, не начата ли новая игра (т.е. удостовериться в том, что onflag равен 0), и в инициализации переменных для новой игры:

Шаг 2: Функция newgame:

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

if(onflag==0){ // Т.е. если игра не начата, то...

errorflag=0; // Сбрасываем в значение по умолчанию

score=0; // Очевидно, что очков пока нет

objectx=objecty=2; // Задаем начальные координаты для мяча

fieldx=fieldy=1; // Задаем начальные координаты для поля

waitdelay=200; // Присваиваем значение по умолчанию

deltascore=0; // Нет игры - нет и отскоков

scoreboard.value="Score: "+score; //Записываем ноль в табло

main(); // Вызываем основную функцию

} //Конец блока if

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

Теперь самое время определить функцию main. Это основная функция всей программы. Она проверяет, был ли правильно отбит мячик (т.е. значение errorflag), и если все в порядке, вызывает функции definefield (она наполняет главную переменную printscreen и выводит ее в текстовое поле) и definemovement (результатом работы которой является обсчет движения объектов - мячика и ракетки). Однако главное в main - рекурсивный вызов самой функции main через некоторый таймаут. Таким образом, весь процесс замыкается, и вся игра продолжается до момента ошибки игрока. Вот, короче, сама функция main:

Шаг 3: Функция main:

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

Перед описанием функций, выполняющих основную работу (definemovement и definefield), давай напишем еще пару вспомогательных для определения браузера и обработки клавиатуры:

Шаг 4: Вспомогательные функции:

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