Автор: Paulus
Дата: 28-10-06 03:25
Упс... поймите меня правильно, мое сообщение (в том числе несколько эмоциональная последняя фраза) была не насчет хлопнуть дверью, а о том, что, к сожалению, играть толком не получается. Я пока не вижу причин бросать регулярные топики, а если вдруг увижу - постараюсь отдать в хорошие руки.
10-минутки все только усугубляют - к сожалению, время, ушедшее на "возможно, разорвалась связь" игрой не возвращается (собственно, я не настаиваю на том, что его НАДО возвращать - в этом варианте, увы, появятся возможности для мухлежа). Потерять ни за что ни про что 5 минут на 15-минутке я еще могу себе позволить, а на 10-минутке - вряд ли.
С 11-м словом история, видимо, вот какая. Сначала дисклеймер - я излагаю довольно упрощенно, на самом деле все несколько сложнее, но я отдаю себе отчет в этих сложностях и знаю достаточно простые для них решения. Итак, когда вы отправляете слово, "ваша" Балда (клиентская программа, открытая у вас в браузере) ждет подтверждения от сервера, прежде чем что-то вам ответить (это может быть появление у вас слова и очков либо сообщение "слово не найдено", "слово уже использовалось"). Если за разумный срок (30 секунд?) подтверждение не приходит, вы видите "повторите отправку хода - возможно, разорвалась связь".
Здесь один важный момент - подтверждение может не прийти по двум причинам - в необъятных сетевых просторах потерялось то, что вы послали серверу, или же там же потерялось само подтверждение. В первом случае особой беды, помимо потерянного времени, нет - вы эн раз повторяете отправку и рано или поздно слово проходит.
Хохмы начинаются, когда потерялось подтверждение. Сервер принял ваше слово, сообщил о нем сопернику, соперник думает. Вы, ничего об этом не зная, снова пытаетесь отправить слово. Сервер же от вас ничего не ждет и, когда ваше слово до него доходит, отправляет обратно ответ, который клиент интерпретирует как "слово не найдено". В этот момент - особенно если вы отправили заведомо корректное слово - надо понять, что произошло, и срочно попытаться выйти на связь с соперником. Текущая ситуация вот какая:
- до тех пор, пока соперник не сделает ход, вы будете получать "слово не найдено", какие бы правильные слова вы не ставили (отсюда, вероятно, ряд сообщений в словаре Даля)
- вы никак не узнаете о том, что соперник сделал ход, поскольку ваш клиент полагает, что ход-то за вами, и будет игнорировать сообщения сервера о ходе соперника
- однако после того, как соперник сделал ход, сервер примет слово, которое вы в данный момент пытались ввести (если это не очередная попытка ввода того слова, на котором все сломалось - тогда сервер совершенно справедливо ответит***, что "слово уже использовалось", ведь он вам это слово уже засчитал), после чего ваш клиент покажет и доселе скрытую от вас пару ходов - ваш и соперника
- ваши часы все это время будут идти
Таким образом, если вы не поняли, что происходит, но не бросили игру и продолжаете пробовать разные слова, рано или поздно одно из них пройдет(возможно, совершенно неподобающее игровой ситуации - я легко представляю себе игрока, у которого не приняли КОВЕРКОТ и который в изумлении пытается пропихнуть слова попроще - КОВЕР, а потом и КОТ). Если при этом вы ставите букву на место той, которую невидимо для вас уже принял от вас сервер (или той, которую невидимо для вас поставил соперник), буква эта перед изумленным соперником поменяется на вновь введенную, а в игре появится лишнее слово.
Если вы поняли и установили связь с соперником, то в принципе можно принять во внимание все вышеизложенное и продолжить игру (при условии, что оба согласны, что игра ведется не на корову). В противном случае лучше бросить, слишко много несправедливостей - время, затраченное на ход соперником, шло и у вас; вы никак не можете использовать поставленную соперником букву, даже если он вам о ней сообщил (ваш клиент ее пока "не видит"); очень легко породить одиннадцатое слово, если специально не ограничивать себя (нечестно и то, и другое).
Наконец, если вы все поняли, связи с соперником нет, а поиграть хочется, попробуйте вводить слово, на котором "возможно, разорвалась связь", пока сообщение "слово не найдено" не поменяется на "слово уже использовалось" - это будет означать, что соперник сходил, теперь поставленное вами НОВОЕ слово будет принято. ***Внимание, эта рекомендация до конца не проверена.
Естественно, что ничего естественного во всем вышеописанном нет - это именно кривое сетевое программирование, как я изначально и написал. Я точно не знаю, какие именно возможности предоставляет API Flash, но, если он не полностью идиотский, что маловероятно, то правильно написанная "Балда" должна была бы:
- либо использовать нумерованные сообщения/подтверждения и чинить ситуацию при любых сбоях в нумерации (достоинство этого способа - в том, что он позволяет корректно обработать любые потери или задержки в доставке пакетов)
- либо, как минимум, распознавать ситуацию, когда от сервера к клиенту или от клиента к серверу приходит неожиданное сообщение, и опять же пытаться такую ситуацию чинить
Очевидно, нынешняя реализация "Балды" не делает ни того, ни другого.
|
|