Как в беседе сделать игру «крестики-нолики» на Автопилоте
Всем привет! Меня зовут Климов Сергей.
Хотел написать короткую инструкцию — получилась максимально подробная. Кому не нужны подробности, можете смотреть только скрины команд
Для создания игры в крестики-нолики вам понадобится 2 ресурса, 1 список, 4 команды + 1 команда очистки поля.
Ресурсы
1 ресурс с номером 19385 нужен для создания поля 3х3 из кнопок
2 ресурс с номером 19545 нужен для записи:
— в содержимое, id и имя человека%subs_id% (%first_name%), чтоб можно было упомянуть человека в сообщении
— в примечание порядок ходов цифрами 1 и 2, чтоб игроки делали ход по очереди. 2 — человек ходит; 1 — не может ходить


Чтобы начать игру, нужно в ответном сообщении любому человеку написать кн
Условия:
%reply_author%>0 — проверяем, что в игру приглашают человека, а не сообщество
%reply_author% не равна %subs_id% — человек приглашает не сам себя
Уровень списка 131790=0 — никто не начал игру
Во вторую секцию добавляем наш список с номером 131790, чтобы проверять не запустилась ли игра. Таким образом предотвращаем запуск игры другим игрокомДействия:
- Добавляем в список
131790и уровень устанавливаем равным 1
2. Ресурсу с номером 19545 устанавливаем для содержимого значение %subs_id% (%first_name%)
3. Сменить исполнителя команды с ID %reply_author%
4. Ресурсу с номером 19545 для содержимого добавляем строки %subs_id% (%first_name%)
5. Добавляем временные переменные (будем копировать в каждую команду):
— %id%={array}{get}19545|id|body{/get}|1|val|col{/array} — человек, пригласивший в игру
— %id_2%={array}{get}19545|id|body{/get}|2|val|col{/array} — человек, которого пригласили
6. Отправляем сообщение в беседу:
@id%id%, предлагает пользователю @id%id_2% сыграть в крестики-нолики.
Чтобы принять предложение, @id%id_2% {gender}должен|должна{/gender} написать «кн принять»






Чтобы принять игру, человеку, которому сделали вызов, нужно написать кн принять
Условия:
%subs_id%={array}{get}19545|id|body{/get}|2|val|col{/array} — проверяем, что игру принимает именно тот, кому сделали вызов
Действия:
- Копируем переменные
%id%и%id_2%из команды 1
2. Отправляем сообщение с кнопками:
{array}{get}19385|id|body{/get}|1|val|col{/array} — кнопка с цифрой 1
{array}{get}19385|id|body{/get}|2|val|col{/array} — кнопка с цифрой 2(итак, 9 раз)
3. Изменяем ресурс с номером 19545 и для содержимого устанавливаем значение 2 и 1 в столбик — будут ходить крестики




Желательно каждую кнопку записать в переменную, чтобы меньше нагружать АП. Но т.к. у меня не корректно отрабатывала команда, я оставил как на скрине.
Показываю что надо было добавить к команде (выше действия отправить сообщение):
- Добавляем временную переменную
%res%={get}19385|id|body{/get}— содержимое ресурса (поле из кнопок 3х3)
2. Добавляем временную переменную %line_1%={array}%res%|1|val|col{/array} — первая строка ресурса
3. Добавляем временную переменную %line_2%={array}%res%|2|val|col{/array} — вторая строка ресурса. Итак 9 строк
Событие:
Написал сообщение подходящим под регулярное выражение \d — отправил цифру
Условия:
%subs_id%={array}{get}19545|id|body{/get}|1|val|col{/array} — проверяем, что id человека равна id, которое мы записали в ресурс
{array}{get}19545|id|note{/get}|1|val|col{/array}=2 — проверяем, что именно его очередь ходить
Таким образом мы предотвратили вмешательство в игру посторонних людей и соблюдаем очередь ходов между игроками
Действия:
- Добавляем временную переменную
%content%={reg}%content%~~[^\d]+(\d+)[^\d]+(\d+)~~2{/reg}— при нажатии на кнопку, получаем обращение к боту@vkwkaa1и номер кнопки, которую нажали. Бот имеет свою id и поэтому через регулярку нам нужно достать номер кнопки (2 группа цифр)
2. Изменяем ресурс с номером 19385 и для примечания добавляем строки %content%
3. Добавляем временную переменную %res%={get}19385|id|body{/get} — содержимое ресурса (поле из кнопок 3х3)
4. Добавляем временную переменную %new_res%={array}%res%|%content%|val|col|Х{/array} — заменяем цифру, которую нажали на Х
5. Изменяем ресурс с номером 19385 и для содержимого устанавливаем значение %new_res% — заменили строку с цифрой на крестик
6. Копируем переменные %id% и %id_2% из команды 1
7. Добавляем условную переменную %text%, в которой проверяем: выиграл человек, ничья между игроками или просто сделал ход
— если, строки 1, 2 и 3 содержат Х, то отправляем сообщение {gender}Выиграл|Выиграла{/gender} @id%id%
— если, строки 4, 5 и 6 содержат Х, то отправляем сообщение {gender}Выиграл|Выиграла{/gender} @id%id%
— если, строки 7, 8 и 9 содержат Х, то отправляем сообщение {gender}Выиграл|Выиграла{/gender} @id%id%
— если, строки 1, 4 и 7 содержат Х, то отправляем сообщение {gender}Выиграл|Выиграла{/gender} @id%id%
— если, строки 2, 5 и 8 содержат Х, то отправляем сообщение {gender}Выиграл|Выиграла{/gender} @id%id%
— если, строки 3, 6 и 9 содержат Х, то отправляем сообщение {gender}Выиграл|Выиграла{/gender} @id%id%
— если, строки 1, 5 и 9 содержат Х, то отправляем сообщение {gender}Выиграл|Выиграла{/gender} @id%id%
— если, строки 3, 5 и 7 содержат Х, то отправляем сообщение {gender}Выиграл|Выиграла{/gender} @id%id%
— если, {array}{get}19385|id|note{/get}|%content%|num|col{/array}=9, то отправляем сообщение Игра между @id%id% и @id%id_2% закончилась ничьей!
— иначе, @id%id% {gender}сделал|сделала{/gender} ход.<br>Теперь ходит @id%id_2%
8. Отправляем сообщение %text%. Кнопки постоянные
9. Изменяем ресурс с номером 19545 и для содержимого устанавливаем значение 1 и 2 в столбик — будут ходить нолики
10. Добавляем условную переменную %delete%, чтобы проверить нужно ли очистить поле и обнулить список и ресурсы
— если %text% содержит выиграл,ничь, то 134383 — событие для очистки
— иначе пусто
11. Выполнить событие с номером %delete%










Копируем полностью команду 3. Заменяем копией:
Условие:
%subs_id%={array}{get}19545|id|body{/get}|2|val|col{/array} — проверяем, что id человека равна id, которое мы записали в ресурс
{array}{get}19545|id|note{/get}|2|val|col{/array}=2 — проверяем, что именно его очередь ходить
Действия:
%new_res%={array}%res%|%content%|val|col|О{/array}— заменяем цифру, которую нажали на О
2. Условную переменную %text%
— крестики Х меняем на нолики О и сообщение меняем на {gender}Выиграл|Выиграла{/gender} @id%id_2% в каждом случае
— убираем условие о ничье, т.к. ничья возможна в случае когда крестики сходили
— иначе отправляем сообщение @id%id_2% {gender}сделал|сделала{/gender} ход.<br>Теперь ходит @id%id%
3. Изменяем ресурс с номером 19545 и для содержимого устанавливаем значение 2 и 1 в столбик — будут ходить крестики










Событие:
Добавлен в приватный список с номером 134383
ИЛИ
Написал сообщение стоп кн
С условием:
%subs_id%={array}{get}19545|id|body{/get}|1|val|col{/array} — проверяем, что останавливает игру человек, который начал (для случая, если второй человек не принял вызов, иначе никто не сможет больше играть)
Действия:
- Удалены все участники из списка с номером
131790
2. Изменяем ресурс с номером 19385 и для содержимого устанавливаем значение с цифрами от 1 до 9 в столбик
3. Изменяем ресурс с номером 19385 и для примечания устанавливаем значение пусто
4. Изменяем ресурс с номером 19545 и для содержимого устанавливаем значение пусто
5. Изменяем ресурс с номером 19545 и для примечания устанавливаем значение пусто
6. Отправляем сообщение в беседу со словом Успех. Прячем кнопки, чтоб не мешались





Вопросы можете задать мне
Поиграть можно здесь
