WildMaN 30 декабря 2007 Комментариев: 9
Последние две недели года уходящего активно искали скриптеров разных, с уклоном в программинг и в геймдизайн. Давали две задачки на Model-Viewer-Controller и на Request-Response. Результаты не впечатлили.
Задачка первая: на земле лежит десять монеток. К ней подошли два игрока. У каждого клиента есть функция “взять ровно 8 монеток из кучи на земле”. Так сложилось, что они одновременно кликнули на кучку монеток. Что именно и в какой момент увидит первый игрок, второй и сервер. Сервер идеальный и запросы обрабатывает моментально.
На этой задаче 100% кандидатов с первого раза не учитывали world update. Один, правда, оговорился сам, что есть разница между 3D и браузеркой, и пресловутый апдейт неизвестно когда произойдет. Все кандидаты разводили пакеты по времени, что есть хорошо, но все почему-то считали пинг константой. На каверзных вопросах типа “может ли игрок А увидеть монеты раньше сообщения об ошибке” слетали все. В ответ на философский вопрос “честный ли алгоритм обработки вы предложили” узнали много нового, например, как “читит” мультиплеер в Ил-2
Задачка вторая: два игрока встретились на границе двух серверов. Один другому передает предмет. Напишите алгоритм корректной обработки этой транзакции.
Никто вообще не понял причем тут два сервера. Максимум что писали с первого раза - надо послать апдейт на второй сервер. Многие вводили дополнительные факторы, например массу предмета или расстояние между игроками, что гут. Более-менее правильный (даже без учета двух серверов) не написал никто с первого раза, и после наводящих вопросов только половина привела свой алгоритм до приемлемого состояния. Дальше следовал вопрос “допустим, игроки знают о таком алгоритме. Найдите эксплойты”. Результат интересный, во-первых после этого вопроса алгоритм преображался сильно в сторону правильного
Во-вторых, многие кандидаты подходили с разных сторон - SQL inject, перехват пакетов, интерфейсные эксплойты.