Как корректно построить алгоритм?

284
09 мая 2017, 05:53

Хочу сделать "крестики-нолики" по сети (+socket.io). Схема: зашел - создал комнату - играешь с другим человеком.

  1. Когда человек создает комнату, сервер будет генерировать случайный набор символов, который будет прописываться в app.get("/randomlink", function()), при заходе на этот адрес двух человек начинается игра. Корректно ли так делать?
  2. Если по этой ссылке зайдет третий человек (если двое уже играют), ему выдаст ошибку. Т.е. когда на /randomlink заходит игрок, сервер добавляет его в список подключенных:

    let players = []; io.on("connection", function(socket){ players.push(socket); });

Но ведь комнат может быть много, а массив один на сервер. Как это сделать (как\где сохранять количество подключенных к определенной комнате)?

Также не понимаю, как\где сохранять промежуточный процесс игры (например, есть массив data, в котором указаны кто\где поставил x или o, чтобы генерировать поле и заполнять его). Без БД не обойтись?

Answer 1

Если планируется не очень большое количество комнат, то можно ограничиться хранением данных в массиве, но лучше все перенести в БД.

По хорошему, здесь надо делать несколько таблиц: таблица со списком комнат (там храним данные по участникам), таблица с состоянием игры (при подключении к комнате вытаскиваем из нее текущее состояние игры).

То же решение подойдет и для массивов (в одном храним список комнат с id участников, во втором - состояния игр с привязкой к game_id).

Решение с /randomlink более чем жизнеспособно, но введите на всякий случай проверку на уникальность значения (если сгенерированный /randomlink уже есть в массиве или БД с играми, то генерируем его повторно, пока не станет уникальным).

При заходе пользователя на /randomlink отслеживаем количество подключенных игроков, если уже есть 2, то выдаем ошибку или перекидываем на другой /randomlink (в зависимости от логики приложения).

READ ALSO
Замена подстроки

Замена подстроки

Почему не работает данный код?

277
А globalCompositeOperation воздействует на все слои контекста?

А globalCompositeOperation воздействует на все слои контекста?

Пытаюсь сделать маску для imageНо маска задевает не 2 последних слоя (как нужно), а все слои в контексте

378
Js, численное преобразование в объектах

Js, численное преобразование в объектах

ЗдравствуйтеИзучаю Js и остановился на одном моменте не могу понять об численном преобразовании объектов

249