В строке 3 переменная initializedYet устанавливается в false. Это переменная, которая сообщает нам, находятся ли в комнате оба игрока. Мы начинаем со значением false, и затем, когда в первый раз player1 и player2 равны значениям «here», мы устанавливаем initializedYet в true. (Это то же самое, что мы видели в главе крестики-нолики.)
В строке 4 мы устанавливаем обработчик события onRoomVarChange для вызова roomVarChanged(), когда поступает информация переменной комнаты. Аналогично, в следующей строке мы устанавливаем обработчик события moveReceived для вызова функции moveReceived(), когда поступает информация о сделанном ходе. Теперь, когда все обработчики событий установлены, можно безопасно подключиться к игре. Мы делаем это в строке 6. Помните, что порядок, в котором вы делаете это, очень важен. Для меня важно упомянуть еще раз: если вы должны подключиться к игре до определения всех обработчиков событий, то вы бы избежали риска получения данных о комнате или вашем противнике до того, как вы сможете обработать это. В последней строке мы создаем переменную комнаты для вашего игрока и назначаем ей значение «here».
Мы собираемся рассмотреть все функции в этом кадре. Прежде чем мы сделаем это, я хочу напомнить о различных типах ходов в этой игре. Вы помните из главы крестики-нолики, что когда мы посылаем ход, мы посылаем объект нашему противнику. Мы добавляем свойство объекта с именем type, который хранит строчное значение вида хода move. В крестиках-ноликах мы имели лишь два типа «move» и «restart». Ниже перечислены виды ходов, которые мы имеем в игре 9-шаров:
Удар – Этот ход посылает вашему противнику информацию, которая скопирует ваш удар на ее экране, включая положение шара по x и y, скорость, с которой его ударили и угол удара.
Поставить_биток – Когда вы ставите шар-биток в случае шар-в-руке, этот ход посылается вашему противнику. Когда информация получена, положение шара-битка на экране вашего противника обновляется. В настоящее время этот ход посылается только после установки шара-битка