Здравствуйте, уважаемые читатели. Искренне надеюсь, что среди читателей DTF найдутся любители такой замечательной игры как «Сапёр».
Если верно помню, то впервые эта игра появилась на операционной системе Windows 3.1 ещё в далеком 1994-ом году. В то время эта игра позиционировалась как средство для обучения использованию компьютерной мыши и в целом графическому интерфейсу ОС. Выглядела она примерно так:
Однако, время идет, популярность сапера падает, и хочется внести новую жизнь и краски в эту игру. Именно так и родилась мультиплеерная версия игры, именованная как «Russian Minesweeper«, которая представляет собой браузерную онлайн игру. Заинтересовавшихся прошу под кат.
Характеристики игры
Разумеется, чтобы какое-то количество игроков смогли вместе играть в эту игру, правила придется каким-либо образом модернизировать и вообще видоизменять. Однако, главное правило — существенный принцип оставить как в оригинале.
Таким образом, собственно, и был разработан комплекс правил, чтобы позволить нескольким игрокам одновременно играть на одном и том же поле.
Основные правила игры следующие:
- Цель игры — первым пометить все мины флагами.
- У каждого игрока свои (локальные) флаги.
- Игроки ходят по очереди (однако, сейчас ведется разработка «параллельного» режима).
- Если игрок кликнет по мине, он проиграет, а его оппонент выиграет соответственно.
- Время на ход игрока ограничено (~25 сек.) — необходимо ходиться как можно быстрее.
- Если игрок пропустит ход три раза подряд, он проиграет, а его оппонент выиграет соответственно.
- Если игрок пропустит шесть ходов за все время игры, он проиграет, а его оппонент выиграет соответственно.
- Ничья невозможна. Один из игроков в любом случае выставит флаги корректным образом быстрее чем другой.
- Первый ход достается случайному игроку.
- Игрок может сдаться в любой момент игры.
Также был разработан ряд характеристик минного поля для игры:
- Подрыв при вскрытии первой клетки в начале игры невозможен.
- Мины равномерно распределены по игровому полю.
- Свойства «пустоты», открываемой при первом клике: — Размер от A до B пустых клеток (0 мин вокруг). — Пустота не должна представлять из себя линию открытых клеток только по одной из сторон ориентации.
- Процент минных клеток (тип регулятора — вещественный) и размер поля регулируются в настройках приложения.
Таким образом, при текущей конфигурации, при первом клике открывается «пустота» от 3 до 12 «нулевых» клеток, а поле размера 32×20.
Извиняюсь за огромное количество списков, однако, не могу не упомянуть, что игра помимо этого обладает следующим функционалом:
- Аккорд — открытие более одной клетки за ход. Это возможно в случае клика (ЛКМ) по цифре в клетке на игровом поле, а кол-во флагов вокруг смежных клеток равно искомой цифре.
- Помощь оппоненту — по средней кнопки мыши, либо [щелчок по нику оппонента сверху+клик по нужной клетке]. Отображается зеленым:
- Чат — между игроками в режиме реального времени.
- 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 «нулевых» клеток лучше всего открывать при первом клике (эмпирическое наблюдение).
А также прикрепляю карту кликов от Яндекс.Метрики, по ней можно сделать ряд интересных умозаключений. Например очевидно, что основная область «битвы» это центр поля, а чат пользуется популярностью.
Планы на будущее
В будущем планируется доделать следующий функционал:
- Реализовать комнату на N игроков.
- Возможность создания «дружеской комнаты» (игра с другом по ссылке) и одиночного режима.
- Регистрация игроков и таблица лидеров.
- «Баланс по скиллу» (чтобы игроки играли с равными себе по опыту).
- Оптимизация приложения под мобильные устройства.
- Переход на более мощные сервера для реализации приложения в массы.
- Создание баг-трекера.
- Реализация удобной обратной связи с игроками.
- Более детальная статистика использования приложения.
Заключение
В заключение хочу сказать следующее — искренне уповаю на то, что после этой статьи мы с вами вместе сможем насладиться этой игрой. Напоминаю, что она доступна по адресу https://rmsweeper.com/, а также есть сообщество во «ВКонтакте».
Спасибо за внимание, с Вами был Петр.
Источник: DTF