Задать вопрос
@denis_21321321

Реализация игры «Морской бой» на серверной части?

Хочу создать игру "Морской бой" по сети на сайте.

Решил сделать логику, проверку на сервере, а не на клиентской части, для безопасности. Сделать 200 столбцов в таблице базе данных (100 столбцов под карту 1-го игрока, 100 под 2-го). При ходе, идёт запрос на сервер, добавляет этот ход в те 100 столбцов и возвращает эти 100 столбцов из БД и проверяет, выиграл ли он.
Правильная ли реализация данный игры на сервере?

Или можно реализовать как-то более правильно, без создания этих 200 столбцов?
  • Вопрос задан
  • 303 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
I’d
Row
Column
UserId
State
Gameid
И никакого джисона
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Нужна таблица с состояниями полей, как описал Владимир Коротенко и таблица с общим состоянием игры (game_id, user1_id, user2_id, next_move_user_id).
0. Сервер генерирует новую игру и рассылает её id обоим игрокам.
1. Игрок расставляет на своём поле корабли и сообщает расстановку серверу.
2. Сервер проверяет корректность расстановки и сохраняет её в базу данных.
3. Когда расстановка обоих игроков сохранена, сервер выбирает, за кем будет первый ход, и посылает сообщение о начале игры.
4. Игрок присылает на сервер свой ход (id_игры, id_игрока, строка, столбец).
5. Сервер проверяет корректность и результат хода, сохраняет новое состояние и посылает результат хода обоим игрокам.
6. Повторять с 4 пункта до выигрыша какого-либо игрока.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
xez
@xez
TL Junior Roo
Я бы попробовал обойтись такой структурой:
Номер партии | время (если надо) | ход | id
123455 | 12:35:56 | b5 |
И просто каждый раз делал селект по номеру партии и каждый раз определял ее исход. Проблемы с производительностью (если будут) можно решить кешированием.
Ответ написан
Комментировать
@PapaStifflera
Родился, вырос...
Все ваши данные можно хранить в двух столбцах типа int.
Идите в библиотеку, берите учебники по школьному курсу информатики/алгебры. Ключевые слова: бит, матрица. Хотя тут можно и без матриц обойтись...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы