Некоторое время назад, начав играть в эту с виду простенькую игру, взятую из стандартных репозиториев Ubuntu, обнаружил, что она довольно редко упоминается в Сети. Я попытался проанализировать игровой процесс, не имея описания правил, просто делая случайные ходы, но, к стыду своему, мне показалось более простым все-таки "загуглить". (Как всегда, все представлялось сложным именно потому, что было донельзя простым.)
Игровая доска - квадратное поле размером N x N ячеек. Ячейки могут быть трех разных цветов, изображающих различные состояния ячейки: нейтральное (никому не принадлежит) и занятое одним из игроков (ячейка закрашивается цветом игрока). На каждой ячейке имеется некоторое количество точек, таких, как на игральных костях. Количество точек на каждой ячейке, в обычном случае, соответствует граням шестигранной игральной кости: от 1 до 6.
Каждая ячейка имеет соседей: ячейки, примыкающие к ней по вертикали или горизонтали. В случае, если количество точек в ячейке превышает количество примыкающих к ней соседей, эта ячейка отдает по одной своей точке каждой соседней ячейке. То есть - в каждой соседней ячейке прибавляется по одной точке, в исходной ячейке остается одна точка. Ячейку, в которой точек больше, чем у нее соседей, называют переполненной.
Собственно игровой процесс заключается в занятии нейтральных ячеек и наращиванию мощности своих. Каждый щелчок по ячейке, будь то нейтральная ячейка или ячейка игрока - но не ячейка противника! - прибавляет к имеющимся в ней точкам еще одну. Если игрок нажмет на нейтральную ячейку, то она закрасится его цветом и в ней появится еще одна точка.
В случае, если переполненная ячейка граничит с нейтральной - она отдаст одну свою точку нейтральной, после чего та закрасится цветом игрока. Если такая ячейка граничит с ячейкой противника - произойдет то же самое (в этом, собственно, и заключается суть игрового процесса).
Если переполненная ячейка отдает свою точку соседней ячейке и та становится тоже переполненной - то начинается цепная реакция и процесс продолжается, пока все ячейки игрока, сделавшего ход, не будут иметь меньше точек, чем соседей. Это может быть Ваша ячейка или ячейки, в которые Вы "вложили" несколько дополнительных точек перед этим, а может быть заполненная большим количеством точек ячейка противника, которую он имел неосторожность подставить под удар.
Хорошая стратегия игры подразумевает, что игрок старается не заполнять до предела свои ячейки, граничащие с ячейками противника, и, наоборот, старается переполнять свои ячейки, граничащие с максимально заполненными ячейками противника. В таком случае количество захваченных ячеек за один ход значительно возрастает - на последних ходах, особенно при не слишком осторожной игре, бывает, что половина доски таким образом переходит из рук в руки.
Немного простой тактики.
Количество соседей у клетки на краю доски - 3, в отличие от клетки, находящейся в середине (и имеющей 4 соседей). Переполнить ее поэтому легче.
Количество соседей у угловой ячейки еще меньше - 2, так что именно угловые и крайние ячейки стоит занимать в первую очередь. Кроме того, из угловой ячейки бывает удобно запускать "цепную реакцию" - накопив множество точек в ячейках вокруг нее.
Теперь о том, что, собственно, побудило меня написать эту "статью". Вообще, игра имеет настраиваемый размер доски: от 5х5 до 10х10.
В начале, когда я начинал играть, я проигрывал и на самом малом размере доски, однако теперь, когда свободного времени без КJumpingCube в университетском буфете я представить не могу, мне не хватает и большой доски.
Само собой, можно взять исходники игры и, не мудрствуя лукаво, модифицировать их так, чтобы играть можно было на доске размером 3х3 или 20х20, ввести третью сторону на доску и т.п. Однако для этого, разумеется, нужно быть хоть немножечко программистом (чем больше, тем лучше!). Между тем, игра предоставляет недокументированную возможность слегка изменить правила даже для рядового пользователя. Разумеется, гораздо более ограниченные, но все же интерес они могут представлять.
Например:
1) Можно изменить размер доски на, фактически, любой - хоть 1х1, если это будет представлять для кого-то интерес
2) Можно ввести своеобразную "третью сторону" в игру - это могут быть нейтральные ячейки, которые нельзя будет занять прямым образом, а только захватив их
3) Можно добавить на поле своеобразные "бонусные ресурсы", то есть нейтральные ячейки с большим количеством точек, которые нельзя будет занять, а только захватить. Количество точек в ячейке, вообще говоря, может быть сколь угодно большим (ограниченным лишь длиной переменной), но игра поддерживает корректное отображение только максимум восьми точек на ячейке - хоть при обычной игре пользователь этого, скорее всего, не увидит. Таким образом, при захвате такой ячейки игрок получит ячейку с 9 точками, которые будут распределены на ближайшие 4-5 ячеек, сделав их достаточно "развитыми" при этом. (Однако, игра не будет корректно отображать 9 точек на ячейке, заменяя их цифрой "9", к тому же не всегда отображаемой в центре ячейки.)
КJumpingCube хранит данные о сохраненных играх в, по сути, текстовых файлах. Они имеют расширение .kjc и заполнены строками, описывающими:
1) Состояние всех ячеек игровой доски
2) Размерность матрицы игровой доски
3) Текущий ход (т.е., кто из игроков будет делать ход первым после загрузки сохраненной игры)
Все это описывается банальными строками, вот в таком виде:
Dim - размерность матрицы, здесь - 10 на 10 ячеек. Turn - чей ход, здесь - ход игрока 1.
При этом все эти данные поддаются редактированию, против чего игра практически никак не протестует. То есть, я могу изменить значение Dim на 20, сделав доску в два раза больше максимально возможного размера, выставляемого в настройках игры - правда, после этого мне придется восполнить количество недостающих строк в той части файла, которая описывает состояние доски.
Разумеется, кто-то может справедливо назвать это ересью и шаманством со своей, несомненно, весомой точки зрения матерого программиста (овладевшего, действительно, в совершенстве языком Mata). Несомненно, проще взять именно исходники и подстраивать игру в режиме "свободного полета", а может быть, даже сделать свою версию, ведь игра, насколько я помню, подчиняется свободной лицензии GNU. Но пока - можно взять, например, файл сохранения, содержащий только чистую доску с нестандартным размером и играть.
Кроме того, анализ системы игры "снаружи" тоже достаточно интересен. Например, из ее поведения ясно, что функция, распределяющая точки из переполненных ячеек, запускается не в конце каждого хода, а только тогда, когда во время хода была "вручную" (т.е. щелчком курсора) переполнена ячейка игрока. То есть, если в файле сохранения, например, описать ячейку, содержащую в себе 8 точек и принадлежащую игроку 1, при этом указав, что право первого хода после загрузки принадлежит игроку 1 - после того, как игра загрузится, и даже если игрок сделает первый ход, просто заняв нейтральную ячейку, "экспансия" имеющейся переполненной ячейки не произойдет.
В общем и целом, эта статья призвана популяризировать игру KJumpingCube, а также...
Невзирая на многих "снобов из снобов", сиречь арчефагов и иже с ними, пользуюсь моментом, чтобы популяризировать заодно систему Linux, к семейству которой относится и Ubuntu, которой я пользуюсь и репозиториям которой я благодарен за знакомство, в том числе, и с вышеописанной игрой.:)
В Сети я нашел действительно мало упоминаний этой логической игры, и over 9000 их было на английском. Это не послужило препятствием мне, но - хотя бы в качестве творческого эксперимента - я бы хотел, чтобы в Сети было на одно описание КJumpingCube больше. Это действительно увлекательная, хоть и простая, игра.
Вот что говорится в проектном документе одной из первых текстовых версий игры (в переводе с английского):
KJumpingCube - простая настольная игра для двоих игроков. Это исключительно стратегическая игра, без каких-либо случайных факторов.
Игровая доска - квадратное поле размером N x N ячеек. Ячейки могут быть трех разных цветов, изображающих различные состояния ячейки: нейтральное (никому не принадлежит) и занятое одним из игроков (ячейка закрашивается цветом игрока). На каждой ячейке имеется некоторое количество точек, таких, как на игральных костях. Количество точек на каждой ячейке, в обычном случае, соответствует граням шестигранной игральной кости: от 1 до 6.
Каждая ячейка имеет соседей: ячейки, примыкающие к ней по вертикали или горизонтали. В случае, если количество точек в ячейке превышает количество примыкающих к ней соседей, эта ячейка отдает по одной своей точке каждой соседней ячейке. То есть - в каждой соседней ячейке прибавляется по одной точке, в исходной ячейке остается одна точка. Ячейку, в которой точек больше, чем у нее соседей, называют переполненной.Собственно игровой процесс заключается в занятии нейтральных ячеек и наращиванию мощности своих. Каждый щелчок по ячейке, будь то нейтральная ячейка или ячейка игрока - но не ячейка противника! - прибавляет к имеющимся в ней точкам еще одну. Если игрок нажмет на нейтральную ячейку, то она закрасится его цветом и в ней появится еще одна точка.
В случае, если переполненная ячейка граничит с нейтральной - она отдаст одну свою точку нейтральной, после чего та закрасится цветом игрока. Если такая ячейка граничит с ячейкой противника - произойдет то же самое (в этом, собственно, и заключается суть игрового процесса).
Если переполненная ячейка отдает свою точку соседней ячейке и та становится тоже переполненной - то начинается цепная реакция и процесс продолжается, пока все ячейки игрока, сделавшего ход, не будут иметь меньше точек, чем соседей. Это может быть Ваша ячейка или ячейки, в которые Вы "вложили" несколько дополнительных точек перед этим, а может быть заполненная большим количеством точек ячейка противника, которую он имел неосторожность подставить под удар.Хорошая стратегия игры подразумевает, что игрок старается не заполнять до предела свои ячейки, граничащие с ячейками противника, и, наоборот, старается переполнять свои ячейки, граничащие с максимально заполненными ячейками противника. В таком случае количество захваченных ячеек за один ход значительно возрастает - на последних ходах, особенно при не слишком осторожной игре, бывает, что половина доски таким образом переходит из рук в руки.
Количество соседей у клетки на краю доски - 3, в отличие от клетки, находящейся в середине (и имеющей 4 соседей). Переполнить ее поэтому легче.
Количество соседей у угловой ячейки еще меньше - 2, так что именно угловые и крайние ячейки стоит занимать в первую очередь. Кроме того, из угловой ячейки бывает удобно запускать "цепную реакцию" - накопив множество точек в ячейках вокруг нее.
Теперь о том, что, собственно, побудило меня написать эту "статью". Вообще, игра имеет настраиваемый размер доски: от 5х5 до 10х10.
В начале, когда я начинал играть, я проигрывал и на самом малом размере доски, однако теперь, когда свободного времени без КJumpingCube в университетском буфете я представить не могу, мне не хватает и большой доски.
Вот такой:
Само собой, можно взять исходники игры и, не мудрствуя лукаво, модифицировать их так, чтобы играть можно было на доске размером 3х3 или 20х20, ввести третью сторону на доску и т.п. Однако для этого, разумеется, нужно быть хоть немножечко программистом (чем больше, тем лучше!). Между тем, игра предоставляет недокументированную возможность слегка изменить правила даже для рядового пользователя. Разумеется, гораздо более ограниченные, но все же интерес они могут представлять.
Например:
1) Можно изменить размер доски на, фактически, любой - хоть 1х1, если это будет представлять для кого-то интерес
2) Можно ввести своеобразную "третью сторону" в игру - это могут быть нейтральные ячейки, которые нельзя будет занять прямым образом, а только захватив их
3) Можно добавить на поле своеобразные "бонусные ресурсы", то есть нейтральные ячейки с большим количеством точек, которые нельзя будет занять, а только захватить. Количество точек в ячейке, вообще говоря, может быть сколь угодно большим (ограниченным лишь длиной переменной), но игра поддерживает корректное отображение только максимум восьми точек на ячейке - хоть при обычной игре пользователь этого, скорее всего, не увидит. Таким образом, при захвате такой ячейки игрок получит ячейку с 9 точками, которые будут распределены на ближайшие 4-5 ячеек, сделав их достаточно "развитыми" при этом. (Однако, игра не будет корректно отображать 9 точек на ячейке, заменяя их цифрой "9", к тому же не всегда отображаемой в центре ячейки.)КJumpingCube хранит данные о сохраненных играх в, по сути, текстовых файлах. Они имеют расширение .kjc и заполнены строками, описывающими:
1) Состояние всех ячеек игровой доски
2) Размерность матрицы игровой доски
3) Текущий ход (т.е., кто из игроков будет делать ход первым после загрузки сохраненной игры)
Все это описывается банальными строками, вот в таком виде:
0,0=1,2Здесь строка вида "n,m=p,s" - строка, хранящая данные о принадлежности nm-ой ячейки и количестве точек в ней (p = {0,1,2}, 0 - нейтральная, 1 - игрок 1, 2 - игрок 2; s = {1,2,3,4,5,6,7,8,...}).
0,1=1,3
0,2=2,4
...
9,9=0,1
Dim = 10
Turn = 1
Dim - размерность матрицы, здесь - 10 на 10 ячеек. Turn - чей ход, здесь - ход игрока 1.
При этом все эти данные поддаются редактированию, против чего игра практически никак не протестует. То есть, я могу изменить значение Dim на 20, сделав доску в два раза больше максимально возможного размера, выставляемого в настройках игры - правда, после этого мне придется восполнить количество недостающих строк в той части файла, которая описывает состояние доски.
Разумеется, кто-то может справедливо назвать это ересью и шаманством со своей, несомненно, весомой точки зрения матерого программиста (овладевшего, действительно, в совершенстве языком Mata). Несомненно, проще взять именно исходники и подстраивать игру в режиме "свободного полета", а может быть, даже сделать свою версию, ведь игра, насколько я помню, подчиняется свободной лицензии GNU. Но пока - можно взять, например, файл сохранения, содержащий только чистую доску с нестандартным размером и играть.
Кроме того, анализ системы игры "снаружи" тоже достаточно интересен. Например, из ее поведения ясно, что функция, распределяющая точки из переполненных ячеек, запускается не в конце каждого хода, а только тогда, когда во время хода была "вручную" (т.е. щелчком курсора) переполнена ячейка игрока. То есть, если в файле сохранения, например, описать ячейку, содержащую в себе 8 точек и принадлежащую игроку 1, при этом указав, что право первого хода после загрузки принадлежит игроку 1 - после того, как игра загрузится, и даже если игрок сделает первый ход, просто заняв нейтральную ячейку, "экспансия" имеющейся переполненной ячейки не произойдет.В общем и целом, эта статья призвана популяризировать игру KJumpingCube, а также...
Невзирая на многих "снобов из снобов", сиречь арчефагов и иже с ними, пользуюсь моментом, чтобы популяризировать заодно систему Linux, к семейству которой относится и Ubuntu, которой я пользуюсь и репозиториям которой я благодарен за знакомство, в том числе, и с вышеописанной игрой.:)









No comments:
Post a Comment
Анонимус-сан, будь добр и твое добро вернется к тебе.