В этой статье объясняется, как запрограммировать Cypherpoker на автоматическое открытие двух экземпляров, настройку игры в покер и присоединение к игре обоих игроков. Эта конфигурация значительно ускоряет процесс разработки для фронтенд-разработчика. Это руководство было создано мной с помощью Патрика Бэя.

Эта статья расширяет первое руководство Cypherpoker о настройках конфигурации.

Первый шаг

Сначала мы настроим протокол быстрого обмена сообщениями на автоматический запуск при запуске клиентов Cypherpoker. Оттуда нам нужно автоматизировать открытие второго экземпляра Cypherpoker, что даст нам двух игроков для нашего тестирования. Оттуда мы автоматически заполняем настройки игры и создаем таблицу. Наконец, мы настраиваем обоих игроков на автоматическое присоединение к игре. Небольшое предостережение: мы должны помнить, что для некоторых настроек, таких как открытие нового экземпляра Cypherpoker, мы хотим, чтобы родитель (наш первый экземпляр) открывал окно, иначе мы застрянем в цикле, поскольку наше новое окно откроет новое окно, которое откроет новое окно и так далее.

Когда мы закончим, Cypherpoker откроется после выполнения и автоматически запустится и присоединится к игре для развлечения между двумя игроками, что позволит разработчикам отлаживать изменения значительно быстрее, чем раньше.

Автоматическое включение протокола быстрого обмена сообщениями

Наша первая задача — настроить автоматическое включение конфигурации для протокола быстрого обмена сообщениями. Мы можем найти инициализацию переключателя подключения в классе org.cg.widgets.ConnectivitySelectorWidget.

В settings.xml узел, который ссылается на переключатель, выглядит следующим образом:

<widget class=”org.cg.widgets.ConnectivitySelectorWidget” vpadding=”20">

<toggleswitch instance=”connectToggle”>
<height>49</height>
<x>320</x>
<y>30</y>
</toggleswitch>

В настройках по умолчанию файла settings.xml мы добавляем наш узел настроек по умолчанию:

<defaults>

<! --Auto Enables Fast Messaging if true -->
<fastmessagingautostart>
<enabled>true</enabled>
</fastmessagingautostart>

Затем мы пытаемся вызвать настройки по умолчанию в функции инициализации ConnectivitySelectorWidget.as после добавления импорта для глобальных настроек:

import org.cg.GlobalSettings
override public function initialize():void {

/// initial defualt setting isenabled to set fast msging to
/// auto run
try {
DebugView.addText(“Looking for Fast Messaging Auto-Start”);
var fastMessagingEnabled:Boolean = GlobalSettings.toBoolean(GlobalSettings.getSetting(“defaults”, “fastmessagingautostart”).enabled);
} catch (err:*) {
fastMessagingEnabled = false;
}
if (fastMessagingEnabled == true) {
DebugView.addText(“Fast Messaging Auto-Start is Enabled.”);
this.connectToggle.isSelected = true;
this.onConnectTogglelick(null);
}

Мы просто проверяем значение по умолчанию для fastmessagingautostart и, если оно есть, вызываем функцию, соответствующую событию нажатия тумблера.

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

Автоматическое открытие второго инстанса Cypherpoker

Второе изменение заключается в том, что мы призываем нашего клиента открыть еще один экземпляр Cypherpoker. Обычно для этого требуется 2 щелчка мыши, чтобы перейти к панели окна над открывающейся панелью, а затем влево, где игроки обычно могут изменить свое имя экрана и выбрать значок игрока.

Сначала мы добавляем наш параметр начальной конфигурации в файл settings.xml:

<!-- Starts another window, will add support for multiple windows eventually -->
<opennewwindow>
<enabled>true</enabled>
</opennewwindow>

Далее мы добавляем наш код в функцию инициализации класса NewWindowWidget (после добавления строки импорта глобальных настроек):

import org.cg.GlobalSettings
override public function initialize():void {

/// look for user requested additional windown
/// instances
try {
DebugView.addText(“Check for user requested new window instances.”);
var openNewWindowIsEnabled:XML = GlobalSettings.getSetting(“defaults”, “opennewwindow”);
var openNewWindowIsEnabledBool:Boolean = Boolean(openNewWindowIsEnabled);
} catch (err:*) {
DebugView.addText(“No user requests detected for new windows.”);
}
if (openNewWindowIsEnabledBool == true) {
if (lounge.isChildInstance) {
//this is a new window
}
else {
DebugView.addText(“New window requested in default settings. Opening new window.”);
onOpenNewWindowClick(null);
}

Код почти такой же, как и в конфигурации fastmessaginprotocol , за исключением одного важного дополнения, а именно: мы должны убедиться, что второй экземпляр также не создает новый экземпляр при запуске, иначе мы создадим бесконечный петля. Таким образом, клиент проверит, является ли он дочерним экземпляром, если (lounge.isChildInstance), ничего не сделает, если это так, и создаст второй экземпляр, если это не так (т. е. это родительский или первый экземпляр, который мы создали).

Теперь мы должны быть в состоянии скомпилировать и проверить этот параметр конфигурации (и мы можем закомментировать наш if/else и проверить бесконечный цикл таблиц, если мы хотим для удовольствия!).

Автоматическое создание и новая таблица

Создание и присоединение к новой таблице выполняется в два этапа, и первый шаг также включает в себя заполнение параметров таблицы.

Заполнение полей настроек таблицы

В классе TableManagerWidget под заголовком функции инициализации и в конце тела мы инициализируем текстовые поля поля ввода текста следующим образом:

this.create_buyInAmount.text = “100”;
this.create_bigBlindAmount.text = “2”;
this.create_smallBlindAmount.text = “1”;

Бай-ин (игровые деньги) для каждого игрока составит 100 фишек, а большой блайнд и малый блайнд будут установлены на 2 и 1 соответственно.

Также в той же функции инициализации мы инициализируем вариант веселой игры группы радио, добавив последнюю строку кода ниже (где-то после первых двух строк):

this.create_contractGameRadio.toggleGroup = this._gameTypeRadioGroup;
this.create_funGameRadio.toggleGroup = this._gameTypeRadioGroup;
this.create_funGameRadio.toggleGroup = this._gameTypeRadioGroup;

this._gameTypeRadioGroup.selectedItem = this.create_funGameRadio;

Теперь, если игра создается автоматически, она автоматически становится игрой для развлечения на 100 фишек с большим блайндом в 2 фишки и малым блайндом в 1 фишку.

1 игрок создает игру (родитель), и оба игрока присоединяются

Чтобы убедиться, что соединение установлено, прежде чем мы попытаемся создать игру, мы настроим прослушиватель для события Cliqueconnect. В той же функции, что и выше, мы добавим:

this.lounge.addEventListener(LoungeEvent.NEW_CLIQUE, this.onCliqueConnect);

Когда событие NEW_CLIQUE срабатывает, функция onCliqueConnect запускает прослушиватель для однорангового узла и после обнаружения переходит в процесс, проверяющий, включено ли автоматическое создание новой таблицы.

Сначала мы должны добавить параметр к нашим значениям по умолчанию в settings.xml.

<! — auto creates a table when enabled →
<createtable>
<enable>true</enable>
</createtable>

Снова проверяем, являемся ли мы родителем, так как для начала игры нужен только один игрок:

if (lounge.isChildInstance) {
//this is a new window
}
else {
try {
DebugView.addText(“Checking for Auto Create Table”);
var createTableIsEnabled:XML = GlobalSettings.getSetting(“defaults”, “createtable”);
var createTableIsEnabledBool:Boolean = Boolean(createTableIsEnabled);
//var enabledchild:XML = openNewWindowIsEnabled.child(“enabled”)[0];
} catch (err:*) {
//break?
DebugView.addText(“No Auto Create Table Enabled”);
}
DebugView.addText(“create table is enabled: “ + createTableIsEnabledBool);
if (createTableIsEnabledBool == true) {
ShowCreateTable(null);
setTimeout(onCreateTableClick, 2000, null);
}
}

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

private function onNewTableCreated(eventObj:TableManagerEvent):void {

this._currentSelectedGameListItemData = tableInfoObj;
this.onJoinTableClick(null);
tableInfoObj.table.announce();
lounge.tableManager.enableTableBeacons();

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

this._currentSelectedGameListItemData = tableInfoObj;
this.onJoinTableClick(null);

Наконец, мы добавляем импорт:

import org.cg.events.LoungeEvent;
import p2p3.events.NetCliqueEvent;
import flash.utils.setTimeout;

Это оно!

Теперь, если мы скомпилируем успешно, мы должны увидеть выполнение Cypherpoker, подключиться к протоколу быстрого обмена сообщениями, открыть новое окно (которое также подключается к протоколу быстрого обмена сообщениями), родительский экземпляр создаст новую игру с заданными нами настройками, и оба игрока присоединиться к игре.

Одним щелчком мыши (скомпилировать) мы теперь готовы играть в покер один на один против себя или тестировать и отлаживать любые изменения в разработке!