- PVSM.RU - https://www.pvsm.ru -

Russian Minesweeper — мультиплеерная версия игры «Сапёр»

image

Здравствуйте, уважаемые читатели. Искренне надеюсь, что среди читателей Хабра найдутся любители такой замечательной игры как «Сапёр» [1].

Если верно помню, то впервые эта игра появилась на операционной системе Windows 3.1 [2] ещё в далеком 1994-ом году. В то время эта игра позиционировалась как средство для обучения использованию компьютерной мыши и в целом графическому интерфейсу ОС. Выглядела она примерно так:

image

Принцип игры согласно Wikipedia

Плоское или объёмное игровое поле разделено на смежные ячейки (квадраты, шестиугольники, кубы и т. п.), некоторые из которых «заминированы»; количество «заминированных» ячеек известно. Целью игры является открытие всех ячеек, не содержащих мины.
Игрок открывает ячейки, стараясь не открыть ячейку с миной. Открыв ячейку с миной, он проигрывает. Мины расставляются после первого хода, поэтому проиграть на первом же ходу невозможно. Если под открытой ячейкой мины нет, то в ней появляется число, показывающее, сколько ячеек, соседствующих с только что открытой, «заминировано» (в каждом варианте игры соседство определяется по-своему); используя эти числа, игрок пытается рассчитать расположение мин, однако иногда даже в середине и в конце игры некоторые ячейки всё же приходится открывать наугад. Если под соседними ячейками тоже нет мин, то открывается некоторая «не заминированная» область до ячеек, в которых есть цифры. «Заминированные» ячейки игрок может пометить, чтобы случайно не открыть их. Открыв все «не заминированные» ячейки, игрок выигрывает.

Однако, время идет, популярность сапера падает, и хочется внести новую жизнь и краски в эту игру. Именно так и родилась мультиплеерная версия игры, именованная как "Russian Minesweeper [3]", которая представляет собой браузерную онлайн игру. Заинтересовавшихся прошу под кат.

Характеристики игры

Разумеется, чтобы какое-то количество игроков смогли вместе играть в эту игру, правила придется каким-либо образом модернизировать и вообще видоизменять. Однако, главное правило — существенный принцип оставить как в оригинале.

Таким образом, собственно, и был разработан комплекс правил, чтобы позволить нескольким игрокам одновременно играть на одном и том же поле.

Основные правила игры следующие:

  1. Цель игры — первым пометить все мины флагами.
  2. У каждого игрока свои (локальные) флаги.
  3. У игроков одно и тоже (глобальное) поле с минами.
  4. Игроки ходят по очереди (однако, сейчас ведется разработка «параллельного» режима).
  5. Если игрок кликнет по мине, он проиграет, а его оппонент выиграет соответственно.
  6. Время на ход игрока ограничено (~25 сек.) — необходимо ходиться как можно быстрее.
  7. Если игрок пропустит ход три раза подряд, он проиграет, а его оппонент выиграет соответственно.
  8. Если игрок пропустит шесть ходов за все время игры, он проиграет, а его оппонент выиграет соответственно.
  9. Ничья невозможна. Один из игроков в любом случае выставит флаги корректным образом быстрее чем другой.
  10. Первый ход достается случайному игроку.
  11. Игрок может сдаться в любой момент игры.

Также был разработан ряд характеристик минного поля для игры:

  1. Подрыв при вскрытии первой клетки в начале игры невозможен.
  2. Мины равномерно распределены по игровому полю.
  3. Свойства «пустоты», открываемой при первом клике:
    1. Размер от A до B пустых клеток (0 мин вокруг).
    2. Пустота не должна представлять из себя линию открытых клеток только по одной из сторон ориентации.
  4. Процент минных клеток (тип регулятора — вещественный) и размер поля регулируются в настройках приложения.

Таким образом, при текущей конфигурации, при первом клике открывается «пустота» от 3 до 12 «нулевых» клеток, а поле размера 32x20.

Извиняюсь за огромное количество списков, однако, не могу не упомянуть, что игра помимо этого обладает следующим функционалом:

  • Аккорд — открытие более одной клетки за ход. Это возможно в случае клика (ЛКМ) по цифре в клетке на игровом поле, а кол-во флагов вокруг смежных клеток равно искомой цифре.
  • Помощь оппоненту — по средней кнопки мыши, либо [щелчок по нику оппонента сверху+клик по нужной клетке].
  • Чат — между игроками в режиме реального времени.
  • Nickname в игре.
  • Звуковое сопровождение в игре.

Технологии

Полный список технологий, используемых при разработке продукта, следующий:

  • C# .NET + ASP .NET – основа для веб-сервера.
  • HTML5 / CSS3 – для разработки интерфейса клиентской части.
  • JavaScript – для динамической работы клиентской части.
  • JSON – для сериализации/десераилизации пакетов клиент-сервер.
  • WebSocket – протокол используется как метод связи клиент-сервер.
  • HTML Canvas — технология для отрисовки минного поля.
  • jQuery – эффективное и быстрое взаимодействие между HTML и JS.
  • JSON Newton – библиотека для удобной работы с JSON.
  • Adobe Photoshop – для отрисовки графических элементов интерфейса.
  • GitHub – как удобная площадка для контроля версий проекта.
  • Microsoft Azure – для размещения веб-сервера в Интернете.
  • Яндекс.Метрика – статистика и анализ поведения игроков.
  • CloudFlare – в качестве CDN-прокси / SSL / Anti DDoS.
  • Microsoft Visual Studio – в качестве основной среды разработки.
  • Sublime Text – в качестве инструмента разработки под JavaScript.
  • Microsoft IIS – для разворачивания ASP. NET

image

Самими проблемными местами в проекте было нижеследующее:

  • Синхронизация игроков друг с другом^
    • Проблема: как быстро оповещать игроков об изменениях на поле?
      Варианты: long polling; websockets; cyclic polling; etc
    • Решение: использовать WebSocket

  • Отрисовка минного поля и прочих элементов игры:
    • Проблема: какие инструменты будут наиболее оптимальны?
      Варианты: HTML table/div; SVG; HTML5 Canvas; etc
    • Решение: HTML5 Canvas + JavaScript

Интересные цифры

  • 23 человека по меньшей мере принимали участие в тестировании.
  • 183 298 клика сделано по полю во время тестирования.
  • С 119-ой попытки минное поле было пройдено до конца.
  • Поле размером 32x20 наиболее оптимально для игры (эмпирическое наблюдение).
  • От 3 до 12 «нулевых» клеток лучше всего открывать при первом клике (эмпирическое наблюдение).

А также прикрепляю карту кликов от Яндекс.Метрики, по ней можно сделать ряд интересных умозаключений. Например очевидно, что основная область «битвы» это центр поля, а чат пользуется популярностью.

image

Планы на будущее

В будущем хочется доделать следующий функционал:

  • Реализовать комнату на N игроков.
  • Возможность создания «дружеской комнаты» и одиночного режима.
  • Оптимизация приложения под мобильные устройства.
  • Переход на более мощные сервера для реализации приложения в массы.
  • Создание баг-трекера.
  • Реализация удобной обратной связи с игроками.
  • Более детальная статистика использования приложения.

Заключение

image
В заключение хочу сказать следующее — будьте, пожалуйста, аккуратнее с сервером игры :)
Он получен бесплатно по подписке от Microsoft Azure и его мощности крайне скромны.
Искренне уповаю на то, что после этой статьи мы с вами вместе сможем насладиться этой игрой.
Напоминаю, что она доступна по адресу https://rmsweeper.tk [3], а также есть сообщество [4] во «ВКонтакте».

Спасибо за внимание,
с Вами был Петр.

Автор: ParadoxFilm

Источник [5]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/c-2/257878

Ссылки в тексте:

[1] «Сапёр»: https://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%BF%D1%91%D1%80_(%D0%B8%D0%B3%D1%80%D0%B0)

[2] Windows 3.1: https://ru.wikipedia.org/wiki/Windows_NT_3.1

[3] Russian Minesweeper: https://rmsweeper.tk

[4] сообщество: https://vk.com/rmsweeper

[5] Источник: https://habrahabr.ru/post/330910/