Russian Minesweeper — мультиплеерная версия игры «Сапёр»
Здравствуйте, уважаемые читатели. Искренне надеюсь, что среди читателей DTF найдутся любители такой замечательной игры как «Сапёр».
Если верно помню, то впервые эта игра появилась на операционной системе Windows 3.1 ещё в далеком 1994-ом году. В то время эта игра позиционировалась как средство для обучения использованию компьютерной мыши и в целом графическому интерфейсу ОС. Выглядела она примерно так:
Плоское или объёмное игровое поле разделено на смежные ячейки (квадраты, шестиугольники, кубы и т. п.), некоторые из которых «заминированы»; количество «заминированных» ячеек известно. Целью игры является открытие всех ячеек, не содержащих мины.
Игрок открывает ячейки, стараясь не открыть ячейку с миной. Открыв ячейку с миной, он проигрывает. Мины расставляются после первого хода, поэтому проиграть на первом же ходу невозможно. Если под открытой ячейкой мины нет, то в ней появляется число, показывающее, сколько ячеек, соседствующих с только что открытой, «заминировано» (в каждом варианте игры соседство определяется по-своему); используя эти числа, игрок пытается рассчитать расположение мин, однако иногда даже в середине и в конце игры некоторые ячейки всё же приходится открывать наугад. Если под соседними ячейками тоже нет мин, то открывается некоторая «не заминированная» область до ячеек, в которых есть цифры. «Заминированные» ячейки игрок может пометить, чтобы случайно не открыть их. Открыв все «не заминированные» ячейки, игрок выигрывает.
Однако, время идет, популярность сапера падает, и хочется внести новую жизнь и краски в эту игру. Именно так и родилась мультиплеерная версия игры, именованная как "Russian Minesweeper", которая представляет собой браузерную онлайн игру. Заинтересовавшихся прошу под кат.
Разумеется, чтобы какое-то количество игроков смогли вместе играть в эту игру, правила придется каким-либо образом модернизировать и вообще видоизменять. Однако, главное правило — существенный принцип оставить как в оригинале.
Таким образом, собственно, и был разработан комплекс правил, чтобы позволить нескольким игрокам одновременно играть на одном и том же поле.
Основные правила игры следующие:
- Цель игры — первым пометить все мины флагами.
- У каждого игрока свои (локальные) флаги.
- Игроки ходят по очереди (однако, сейчас ведется разработка «параллельного» режима).
- Если игрок кликнет по мине, он проиграет, а его оппонент выиграет соответственно.
- Время на ход игрока ограничено (
Также был разработан ряд характеристик минного поля для игры:
- Подрыв при вскрытии первой клетки в начале игры невозможен.
- Мины равномерно распределены по игровому полю.
- Свойства «пустоты», открываемой при первом клике: — Размер от A до B пустых клеток (0 мин вокруг). — Пустота не должна представлять из себя линию открытых клеток только по одной из сторон ориентации.
- Процент минных клеток (тип регулятора — вещественный) и размер поля регулируются в настройках приложения.
Таким образом, при текущей конфигурации, при первом клике открывается «пустота» от 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
Самими проблемными местами в проекте было нижеследующее:
- Синхронизация игроков друг с другом– Проблема: как быстро оповещать игроков об изменениях на поле?– Варианты: long polling; websockets; cyclic polling; etc– Решение: использовать WebSocket
- Отрисовка минного поля и прочих элементов игры– Проблема: какие инструменты будут наиболее оптимальны?Варианты: HTML table/div; SVG; HTML5 Canvas; etc– Решение: HTML5 Canvas + JavaScript
- 23 человека по меньшей мере принимали участие в тестировании.
- 183 298 клика сделано по полю во время тестирования.
- С 119-ой попытки минное поле было пройдено до конца.
- Поле размером 32x20 наиболее оптимально для игры (эмпирическое наблюдение).
- От 3 до 12 «нулевых» клеток лучше всего открывать при первом клике (эмпирическое наблюдение).
А также прикрепляю карту кликов от Яндекс.Метрики, по ней можно сделать ряд интересных умозаключений. Например очевидно, что основная область «битвы» это центр поля, а чат пользуется популярностью.