- •Алгоритм Художника, Тест 1
- •Алгоритм Художника, Тесты 3 и 4
- •Алгоритм Художника, Тест 5
- •Время выполнения Алгоритма Художника
- •Уравнение плоскости
- •Использование уравнения плоскости для вершин многоугольника
- •Определение значения наклона
- •Вычисление линий для генерации
- •Вычисление точки первого пересечения
- •Вычисление оставшихся пересечений
- •Вычисление расстояния
- •Вычисление масштаба
- •Гаснущее изображение
- •Вектор Номер Адресная функция
- •Раздел 1: Инициализация
- •Раздел 2: Игровой цикл
- •Раздел 3: Удаление объектов
- •Раздел 4: Получение входных данных и передача состояния дистанционно управляемой системе
- •Раздел 5: Перемещение объектов
- •Раздел 6: Распознавание столкновений
Раздел 1: Инициализация
В этой части программы мы загружаем все файлы со звуковыми эффектами И графикой для игры. Элементы изображения для танков берутся из загруженный файлов и размещаются в предварительно выделенной под буфер области памяти. Net-Tank использует технику дублирующей буферизации для исключения мерцания изображения. Напомню, это означает, что изображение вначале формируется в оперативной памяти и в уже полностью подготовленном виде копируется в видеопамять. Кроме того, во время инициализации структуры данных, описывающие все игровые объекты, обнуляются или устанавливаются в исходное положение.
Уже при инициализации возникает первый вопрос сетевой игры. Программы работающие на обоих машинах почти идентичны, но должна быть небольшая разница: ваш компьютер должен показать объект противника в том же месте, где он изначально расположен на другом ПК и наоборот. Это означает, что иные позиции игровых объектов должны быть жестко установлены. Этого можно добиться, задав позиции в качестве констант в тексте программы, загружая их из неизменяемого файла данных или задавая при старте программы определенному алгоритму. Способ, с помощью которого это делается, не важен. Однако при старте программы игрок, который с точки зрения одной машины является местным, будет удаленным с точки зрения другого компыотера наоборот. Это может привести к путанице с координатами и проблемам с синхронизацией.
Раздел 2: Игровой цикл
Следующая часть начинается с главного цикла. Обратите внимание, что в игре имеется два цикла: внешний и внутренний. Внешний игровой цикл используется для инициализации некоторых переменных. Затем начинается внутренний цикл. Именно в нем и происходит основное действие.
Заметьте, что игра различает, когда она находится в состоянии соединения, а когда - нет.
Раздел 3: Удаление объектов
Как вы узнали из предыдущих глав, посвященных графике, прежде чем рисовать спрайты на новом месте, мы должны удалить их из прежней позиции. Эта часть программы убирает с игрового поля все движущиеся объекты путем восстановления ранее сохраненного фона под ними.
Раздел 4: Получение входных данных и передача состояния дистанционно управляемой системе
Здесь начинается самое приятное. Эта часть программы подразделена на два фрагмента:
Первый из них принимает входные данные от локального игрока;
Другой принимает входные данные от удаленного игрока.
Любопытно то, что оба фрагмента делают практически одно и то же. Разница только в том, что второй фрагмент обращает больше внимания на то, что поступает из последовательного порта, а первый в основном интересуется клавиатурой. Давайте остановимся и чуть-чуть поговорим о том, как происходит соединение. Как я говорил несколькими страницами раньше, для осуществления соединения применяются два основных метода:
Можно передавать состояние игры в целом;
Вы можете посылать статус устройств ввода и трактовать это как прием данных от другого джойстика или клавиатуры.
В Net-Tank я применил второй метод. Один раз в течение цикла второй машине передаются все манипуляции игрока с клавиатурой. В это же время другой компьютер интерпретирует полученные по сети данные как действия со своей собственной клавиатурой.
Помните, чтобы этот технический прием работал, обе игры должны быть полностью детерминированы. Никаких случайностей быть не должно. В Net-Tank я полностью следовал этому правилу всюду, кроме фрагмента, изображающего взрыв. Обычно этого не сложно избежать, но иногда, после уничтожения одного из танков, игры теряют синхронизацию.
