Гама на 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: Вспомогательные функции: