Однако существует одна многопользовательская проблема, которой не было в крестиках-ноликах, которую мы должны обсудить в этом разделе. После прочтения всего этого, вы, возможно, подумаете «Ничего себе!», от меня потребуется шесть месяцев, чтобы понять это.
Синхронизация: проблема многопользовательских игр и решение
Представьте такую ситуацию. Фрэнк и Эстель играют в игру 9-шаров, созданную во Flash. Фрэнк имеет компьютер последней модели и самую быструю из возможных скорость доступа. Эстель, с другой стороны, использует старый компьютер, который она собрала в колледже. Он такой медленный, что она может запускать только одно или два приложения в одно время.
Фрэнк является Игроком 1, поэтому он разбивает. Он ударяет шаром-битком по рамке с большой силой. В течение примерно 30 секунд он кладет два шара (из трудного положения), а остальные шары катятся до остановки. Компьютер Эстель имеет проблемы с выполнением кода ActionScript с установленной скоростью кадров. Все действия будут рассчитаны так же точно, как на компьютере Фрэнка; просто они это займет в два-три раза больше времени. Пройдет около 1 минуты, прежде чем на компьютере Эстель остановятся катящиеся шары. Если ориентироваться на компьютер Фрэнка, после первых 30 секунд по-прежнему его очередь ходить и шары прекратили качение, так что он делает следующий удар. Вы видите проблему? Фрэнк лишь пытается сделать удар, прежде чем шары остановятся на компьютере Эстель. Если мы позволим этому случиться, то многопользовательская игра прекратится на этом месте. Во время удара Фрэнка (30 секунд после остановки), лишь один экран – Фрэнка – показывает правильное положение шаров. Если он ожидал целую минуту, то компьютер Эстель догнал бы его, и оба экрана показывали бы правильное положение шаров.
Только что описанная мной проблема синхронизации является ночным кошмаром для программиста игры. Я описал ситуацию, используя два компьютера с сильно отличающейся скоростью вычислений, чтобы выявить несоответствие