Как реализуется контроль передвижений персонажа на сервере или на клиенте?
На клиенте вычислять передвижения на каждом кадре (например при VSync это будет каждые 16 мс), а на сервере это будет вычисляться при каждом запросе (пусть, если с WebSockets, то это будет примерно каждые 100 мс) и синхронизироваться на клиенте. Главное, чтобы достоверная позиция определялась на сервере путем вычисления по ускорению и направлению, передаваемых от клиента (или другим параметрам, зависит от специфики игры), а клиенту передавать полученную позицию
Чем контролируется может ли персонаж пройти по этому месту или нет. Сервером или клиентом?
Обнаружение столкновений . И сервером, и клиентом. Первым, для того, чтобы не было подмены позиции (читинга), вторым, чтобы это определялось ближе к реальному времени.
Моей фантазии хватает лишь на то чтоб прописать все координаты где не может пройти персонаж
Есть 2 варианта:
1. Сцена будет состоять из строгой сетки (как в Bomberman), тогда и информацию о объектах можно хранить в виде двумерного массива (для сцены 10х10) это будет занимать 100 элементов, и проверить столкновение будет просто. Если, например, персонаж находится в (8, 3) и хочет пойти вправо, тогда нужно проверить, есть ли объект на позиции (9, 3)
2. Использовать примитивы (линии, полигоны, окружности) для описания сцены в вещественных координатах. Здесь уже посложнее. Стоит применить такие библиотеки как Box2D