Пример -не пример, а может просто баловство 
Интерфейс для игры двух игроков, один играет за "Х", второй - за "О".
Крестики начинают первыми.
Захват-1.png
Проект специально сделал без ГМ, используются только стандартные компоненты. Хотя с помощью ГМ можно было все упростить
Игровое поле - девять индикаторов "пусто-О-Х" в виде динамического текста, для каждого индикатора свой регистр PSW256..PSW264. В этих регистрах хранится информация о клетках игрового поля в виде:
0 -не занятая клетка, текст "пусто";
2 -в клетке находится "О";
8 -в клетке находится "Х".
Для отображения "О" и "Х" использую шрифт "Marlett". Для этого шрифта символ "r" соответствует "Х", а символ "n" соответствует "О"
Почему использую числа 2 и 8 объясню ниже.
Поверх индикаторов расположены функциональные кнопки, невидимые, хотя можно их не скрывать. Каждая кнопка имеет бит разрешения PSB256..PSB264.
Дополнительно используются два бита очередности хода игроков -PSB265 ход игрока "Х", PSB266 ход игрока "О", пришлось использовать два раздельных бита, т.к. ф.кнопки и ф.области не могут анализировать нулевое состояние управляющих битов, так же нельзя анализировать переход управляющего бита из "1" в "0".
Индикатор очередности хода(счетчик ходов) и результата игры - динамический текст с регистром управления PSW269.
Четыре регистра для анализа выигрышной комбинации для "Х" или "О":
PSW265 -в одной из трех строк;
PSW266 -в одном из трех столбцов;
PSW267 -в первой диагонали;
PSW267 -во второй диагонали.
При запуске экрана или при нажатии кнопки "Сброс" все биты разрешения кнопок PSB256..PSB264 устанавливаются в "1", PSB265=1, PSB266=0(ход "Х"), клетки игрового поля очищаются (PSW256..PSW264=0), счетчик ходов PSW269=0.
Теперь игрок "Х", может нажать любую из девяти кнопок, т.к. биты разрешения у кнопок в "1". В конце списка функций при нажатии любой кнопки(Pressing) стоят функции:-реверс бит очередности хода игроков (PSB265, PSB266), таким образом последующее нажатие другой кнопки будет обеспечивать ввод в другую клетку противоположного символа.
-сброс бита разрешения для этой же кнопки, таким образом нажатая кнопка будет скрыта и повторное нажатие на нее будет не возможно.
При отпускании кнопки(Releasing) происходит инкремент счетчика ходов, соответственно будет меняться надпись на индикаторе очередности ходов. При достижении счетчиком состояния 9, если не было выигрышных комбинаций, на индикаторе очередности хода будет надпись "Ничья" и так как все кнопки уже нажаты, то игра окончена и необходимо нажать кнопку "Сброс".
Теперь вернемся к списку функций при нажатии любой кнопки(Pressing),
Захват-1.png
полу схематично список можно представить так
- PSW265=Сумма чисел в клетках в этой строки, за исключением текущей клетки;
- PSW266=Сумма чисел в клетках в этом столбце, за исключением текущей клетки;
- PSW267=Сумма чисел в клетках на диагонали, за исключением текущей клетки. Только для кнопок на диагоналях и центральной кнопки;
- PSW268=Сумма чисел в клетках на второй диагонали, за исключением текущей клетки. Только для центральной кнопки;
- Записать в текущую клетку "8", если ход у "Х";
- Записать в текущую клетку "2", если ход у "О";
Функции 1, 2, 3 и 4 вычисляют выигрышные комбинации по строкам, столбцам и диагоналям игрового поля. Как это работает. Смотрим на функции 5 и 6. На предыдущих шагах эти функции могли записывать в клетки игрового поля или 2 или 8, или в клетках еще нет "О" и "Х" -значит будет число 0. И так, что мы можем получить в результате суммирования двух ячеек на текущих строке, столбце или диагонали?
Если в обоих ячейках находились "О", то сумма=4, что соответствует установленному второму биту в результате суммирования.
Если в обоих ячейках находились "Х", то сумма=16, что соответствует установленному четвертому биту в результате суммирования.
Если в обоих ячейках нет одинаковых символов, то нет ни второго ни четвертого бита.
Но если игрок в текущую клетку сейчас ставит "Х", то анализировать надо наличие четвертого бита в сумме чисел соседних клеток, а не второго. И наоборот, если игрок в текущую клетку сейчас ставит "О", то анализировать надо наличие второго бита в сумме чисел соседних клеток, а не четвертого.
Для этого, в зависимости от, очередности хода выполняются оставшиеся функции при нажатии любой кнопки(Pressing):Сбросить бит PSW265.2, если ход у "Х";
Сбросить бит PSW266.2, если ход у "Х";
Сбросить бит PSW267.2, если ход у "Х";
Сбросить бит PSW265.4, если ход у "О";
Сбросить бит PSW265.4, если ход у "О";
Сбросить бит PSW265.4, если ход у "О".
Примечание см.выше.
Осталось рассказать про фиксацию выигрышных комбинаций. Для этого используются четыре функциональные области для определения выигрыша "Х" и четыре функциональные области для определения выигрыша "О". В каждой из четырех ф.областей одни и те же функции, только запускаются они от разных бит. Это все по тому, что стандартными компонентами нельзя реализовать операцию ИЛИ.
В группе функций для определения выигрыша "Х" каждая запускается от четвертого бита сумм ячеек по строкам, столбцам и диагоналям.
Захват-1.png
Что они делают. Записывают в счетчик очередности ходов "10", что соответствует надписи Выигрыш "Х", биты разрешения для всех кнопок сбрасываются, что исключает возможность нажимать кнопки после завершения игры.
Аналогично и для группы функций для определения выигрыша "О", только надпись будет другая - Выигрыш "О".