EN в Twitter EN В Контакте EN в Facebook
Предстоящие игры:
(#280) " Alю.com (корпоративная игра)"
командная игра,
01.10.2030 / 21:00:00
Игра: Схватка
Автор: Trot75

Реализация формата "Сапер"

3.11.2018 на домене chita.en.cx была проведена игра "Сапер". В этой статье опишу механику "сапера" в данной игре.

Игра на движке схватки, последовательность штурмовая. В игре использовалось поле 10х10 клеток, в них скрыто 14 бомб. Поле "сапера" для удобства промаркировано как в "морском бое" (А1, А2, ... ..., К9, К10).

Принцип игры - необходимо открыть все клетки "не бомбы". За каждую открытую бомбу - штраф 25 минут. За каждую неоткрытую "не бомбу" после закрытия уровня - штраф 20 минут. 

В поле было расписано 70 "точечных" кодов (по одному коду на адрес, без меток, локализация указывается в штабном уровне) и 30 "схваточных" (3 локации по 10 кодов, в штабном уровне указывается только адрес локации, метки с номером кода вида ENА3 ... ENК3). Все коды начинаются с номера ячейки (например: а1гармол).

В CSS, помимо стилей для сапера, были добавлены некоторые "эксперементы" с внешним видом движка - некоторым игрокам они не понравились. 

Внешний вид движка "с экспериментами":

В игре было 3 уровня - 1 штабной, 2 минное поле и 3 закрывашка.

 

Уровень "Штаб"

В штабном уровне в задании указывается информация об игре и подключается "эксперементальная" css (не обязательно). 

 

Подключение "эксперементальной" css:

 

<link rel="stylesheet" type="text/css" href="http://d1.endata.cx/data/games/63238/saper1.css" />

 

В случае использования "эксперементальной" CSS, тело отображаемых заданий, подсказок и бонусов нужно помещать в следующие тэги:

 

<div class="preview_wrapper">
<div class="preview block">

 

</div>
</div>

 

В бонусах этого уровня - штабные задания, в подсказках к ним - адреса и локализация полевых. Бонусы пронумерованы в соответствии с нумерацией клеток "сапера" (А1, Б1, ... , И10, К10). Бонусы доступны только на этом уровне.

 

Так же в штабном уровне выставлена подсказка (через 2 часа) со сливом адресов и локализаций всех полевых локаций. Практика показала, что при такой конфигурации поля "сапера", подсказку можно дать позже на 30-40 минут.

 

Уровень "Минное поле"

В этом уровне реализовано отображение игрового поля. Полевые коды вбиваются в этом уровне (в бонусах).

 

Внешний вид уровня:

 

В этом уровне в теле задания подключается отдельная таблица стилей:

 

<link rel="stylesheet" type="text/css" href="http://d1.endata.cx/data/games/63238/saper.css" />

 

Также в теле задания создается табличка игрового поля:

 

<center>
<div class="preview_wrapper">
<div class="preview block">
<div class="saperlayer">
<table id="sapertable">
<tr id="saperheader">
<td id="saperconer" class="sapertoptitle"></td>
<td class="sapertoptitle">А</td>
<td class="sapertoptitle">Б</td>
<td class="sapertoptitle">В</td>
<td class="sapertoptitle">Г</td>
<td class="sapertoptitle">Д</td>
<td class="sapertoptitle">Е</td>
<td class="sapertoptitle">Ж</td>
<td class="sapertoptitle">З</td>
<td class="sapertoptitle">И</td>
<td class="sapertoptitle">К</td>
</tr>
<tr id="saprow1" class="saperrow">
<td class="saperlefttitle">1</td>
<td id="sapr1c1" class="saperclosedcell"></td>
<td id="sapr1c2" class="saperclosedcell"></td>
<td id="sapr1c3" class="saperclosedcell"></td>
<td id="sapr1c4" class="saperclosedcell"></td>
<td id="sapr1c5" class="saperclosedcell"></td>
<td id="sapr1c6" class="saperclosedcell"></td>
<td id="sapr1c7" class="saperclosedcell"></td>
<td id="sapr1c8" class="saperclosedcell"></td>
<td id="sapr1c9" class="saperclosedcell"></td>
<td id="sapr1c10" class="saperclosedcell"></td>
</tr>
<tr id="saprow2" class="saperrow">
<td class="saperlefttitle">2</td>
<td id="sapr2c1" class="saperclosedcell"></td>
<td id="sapr2c2" class="saperclosedcell"></td>
<td id="sapr2c3" class="saperclosedcell"></td>
<td id="sapr2c4" class="saperclosedcell"></td>
<td id="sapr2c5" class="saperclosedcell"></td>
<td id="sapr2c6" class="saperclosedcell"></td>
<td id="sapr2c7" class="saperclosedcell"></td>
<td id="sapr2c8" class="saperclosedcell"></td>
<td id="sapr2c9" class="saperclosedcell"></td>
<td id="sapr2c10" class="saperclosedcell"></td>
</tr>
<tr id="saprow3" class="saperrow">
<td class="saperlefttitle">3</td>
<td id="sapr3c1" class="saperclosedcell"></td>
<td id="sapr3c2" class="saperclosedcell"></td>
<td id="sapr3c3" class="saperclosedcell"></td>
<td id="sapr3c4" class="saperclosedcell"></td>
<td id="sapr3c5" class="saperclosedcell"></td>
<td id="sapr3c6" class="saperclosedcell"></td>
<td id="sapr3c7" class="saperclosedcell"></td>
<td id="sapr3c8" class="saperclosedcell"></td>
<td id="sapr3c9" class="saperclosedcell"></td>
<td id="sapr3c10" class="saperclosedcell"></td>
</tr>
<tr id="saprow4" class="saperrow">
<td class="saperlefttitle">4</td>
<td id="sapr4c1" class="saperclosedcell"></td>
<td id="sapr4c2" class="saperclosedcell"></td>
<td id="sapr4c3" class="saperclosedcell"></td>
<td id="sapr4c4" class="saperclosedcell"></td>
<td id="sapr4c5" class="saperclosedcell"></td>
<td id="sapr4c6" class="saperclosedcell"></td>
<td id="sapr4c7" class="saperclosedcell"></td>
<td id="sapr4c8" class="saperclosedcell"></td>
<td id="sapr4c9" class="saperclosedcell"></td>
<td id="sapr4c10" class="saperclosedcell"></td>
</tr>
<tr id="saprow5" class="saperrow">
<td class="saperlefttitle">5</td>
<td id="sapr5c1" class="saperclosedcell"></td>
<td id="sapr5c2" class="saperclosedcell"></td>
<td id="sapr5c3" class="saperclosedcell"></td>
<td id="sapr5c4" class="saperclosedcell"></td>
<td id="sapr5c5" class="saperclosedcell"></td>
<td id="sapr5c6" class="saperclosedcell"></td>
<td id="sapr5c7" class="saperclosedcell"></td>
<td id="sapr5c8" class="saperclosedcell"></td>
<td id="sapr5c9" class="saperclosedcell"></td>
<td id="sapr5c10" class="saperclosedcell"></td>
</tr>
<tr id="saprow6" class="saperrow">
<td class="saperlefttitle">6</td>
<td id="sapr6c1" class="saperclosedcell"></td>
<td id="sapr6c2" class="saperclosedcell"></td>
<td id="sapr6c3" class="saperclosedcell"></td>
<td id="sapr6c4" class="saperclosedcell"></td>
<td id="sapr6c5" class="saperclosedcell"></td>
<td id="sapr6c6" class="saperclosedcell"></td>
<td id="sapr6c7" class="saperclosedcell"></td>
<td id="sapr6c8" class="saperclosedcell"></td>
<td id="sapr6c9" class="saperclosedcell"></td>
<td id="sapr6c10" class="saperclosedcell"></td>
</tr>
<tr id="saprow7" class="saperrow">
<td class="saperlefttitle">7</td>
<td id="sapr7c1" class="saperclosedcell"></td>
<td id="sapr7c2" class="saperclosedcell"></td>
<td id="sapr7c3" class="saperclosedcell"></td>
<td id="sapr7c4" class="saperclosedcell"></td>
<td id="sapr7c5" class="saperclosedcell"></td>
<td id="sapr7c6" class="saperclosedcell"></td>
<td id="sapr7c7" class="saperclosedcell"></td>
<td id="sapr7c8" class="saperclosedcell"></td>
<td id="sapr7c9" class="saperclosedcell"></td>
<td id="sapr7c10" class="saperclosedcell"></td>
</tr>
<tr id="saprow8" class="saperrow">
<td class="saperlefttitle">8</td>
<td id="sapr8c1" class="saperclosedcell"></td>
<td id="sapr8c2" class="saperclosedcell"></td>
<td id="sapr8c3" class="saperclosedcell"></td>
<td id="sapr8c4" class="saperclosedcell"></td>
<td id="sapr8c5" class="saperclosedcell"></td>
<td id="sapr8c6" class="saperclosedcell"></td>
<td id="sapr8c7" class="saperclosedcell"></td>
<td id="sapr8c8" class="saperclosedcell"></td>
<td id="sapr8c9" class="saperclosedcell"></td>
<td id="sapr8c10" class="saperclosedcell"></td>
</tr>
<tr id="saprow9" class="saperrow">
<td class="saperlefttitle">9</td>
<td id="sapr9c1" class="saperclosedcell"></td>
<td id="sapr9c2" class="saperclosedcell"></td>
<td id="sapr9c3" class="saperclosedcell"></td>
<td id="sapr9c4" class="saperclosedcell"></td>
<td id="sapr9c5" class="saperclosedcell"></td>
<td id="sapr9c6" class="saperclosedcell"></td>
<td id="sapr9c7" class="saperclosedcell"></td>
<td id="sapr9c8" class="saperclosedcell"></td>
<td id="sapr9c9" class="saperclosedcell"></td>
<td id="sapr9c10" class="saperclosedcell"></td>
</tr>
<tr id="saprow10" class="saperrow">
<td class="saperlefttitle">10</td>
<td id="sapr10c1" class="saperclosedcell"></td>
<td id="sapr10c2" class="saperclosedcell"></td>
<td id="sapr10c3" class="saperclosedcell"></td>
<td id="sapr10c4" class="saperclosedcell"></td>
<td id="sapr10c5" class="saperclosedcell"></td>
<td id="sapr10c6" class="saperclosedcell"></td>
<td id="sapr10c7" class="saperclosedcell"></td>
<td id="sapr10c8" class="saperclosedcell"></td>
<td id="sapr10c9" class="saperclosedcell"></td>
<td id="sapr10c10" class="saperclosedcell"></td>
</tr>
</table>
</div>
</div>
</div>
</center>

В данной таблице каждая игровая ячейка имеет идентификатор вида saprXcY, где X - номер строки, а Y - номер столбца. Тоесть ячейка А1 будет иметь идентификатор sapr1c1, Б1 - sapr1c2, А2 - sapr2c1.

Далее создаем бонусы для каждой игровой ячейки. Для удобства обозначаем в соответствии с нумерацией ячеек (А1, ..., К10). 

В игре "сапер" клетка может открываться не только по нажатию на нее - при попадании в пустую ячейку автоматом открываются все цифры вокруг нее и граничащих с ней пустых ячеек. На примере картинки выше - ячейка В1 может быть открыта попаданием в ячейки А1, Б1, А2, Б2 и попаданием в саму ячейку В1. Следовательно в ответы бонуса В1 нужно прописать 5 полевых кодов. Для удобства я для себя создал макет игрового поля в Excel с расставленными бомбами и цифрами и при забивке бонусов ориентировался по нему. За ячейку "не бомбу" назначается бонус 1 минута, за ячейку-бомбу - 1 секунда.

Задание бонуса оставляем пустым, в подсказку вставляем скрипт:

 

<script type="text/javascript">$('#saprXcY').toggleClass('class');</script>  

 

Где saprXcY - идентификатор ячейки, а class - тип ячейки.

 

Типы ячеек:

 

 

saperclosedcell - закрытая ячейка(по умолчанию), в бонусах не используется

saperemptycell - пустая ячейка без бомб и цифр

sapercell1 - цифра 1 

sapercell2 - цифра 2 

sapercell3 - цифра 3 

sapercell4 - цифра 4 

sapercellbomb - бомба

 

Чтобы не использовать "эксперементальный" дизайн, можно создать и подключить вместо предложенной свою таблицу стилей, в которой указать только важные для логики игры классы:

 

.saperclosedcell
{
width: 60px;
height: 60px;
background-size:cover;
background-image: url("http://d1.endata.cx/data/games/63238/bgcelltemplate1.jpg");
}
.saperemptycell
{
width: 60px;
height: 60px;
background-size:cover;
background-image: url("http://d1.endata.cx/data/games/63238/bgcellempty.jpg");
}
.sapercell1
{
width: 60px;
height: 60px;
background-size:cover;
background-image: url("http://d1.endata.cx/data/games/63238/bgcell1.jpg");
}
.sapercell2
{
width: 60px;
height: 60px;
background-size:cover;
background-image: url("http://d1.endata.cx/data/games/63238/bgcell2.jpg");
}
.sapercell3
{
width: 60px;
height: 60px;
background-size:cover;
background-image: url("http://d1.endata.cx/data/games/63238/bgcell3.jpg");
}
.sapercell4
{
width: 60px;
height: 60px;
background-size:cover;
background-image: url("http://d1.endata.cx/data/games/63238/bgcell4.jpg");
}
.sapercellbomb
{
width: 60px;
height: 60px;
background-size:cover;
background-image: url("http://d1.endata.cx/data/games/63238/bgcellbomb.jpg");
}

 

Так же желательно скрыть заголовки бонусов:

 

.content .color_bonus
{
visibility: hidden;
}
.content .color_correct
{
visibility: hidden;
}

 

Уровень "Закрывашка"

Во всех 3-х уровнях добавляем по одному основному коду, закрывающему уровень. В задании-закрывашке в подсказке (2 часа) выдаем адрес локации с этими кодами. По оформлению - все как в штабном уровне.

Так же на этом уровне можно реализовать чисто штабные бонусные задания.

Подсчет результатов

Смотрим статистику по уровню "минное поле", точнее бонусное время на этом уровне. В случае прошедшей игры (100 клеток, 14 бомб) за все правильно открытые клетки должен быть начислен бонус 86 минут (1 час 26 минут). Количество недостающих минут умножаем на 20 минут и начисляем штраф. Каждая секунда сверх целых минут - попадание в бомбу. Количество секунд умножаем на 25 минут и начисляем штраф.

 

Недостатки

Крайне сложно контролировать прохождение игры. Единственный способ - раздел "бонусы и штрафы".





26.04.2024 2:29:31
(UTC +9)

www.en.cx
EncounterTM Ltd.
2004-2024 ©

 

Владелец домена uran238 +7(914)457-67-33 Владелец домена.  
Организатор GeoFX +7(924)274-03-21 Организатор реальных игр  
       
html counterсчетчик посетителей сайта