[Alimir_BootModal_Login]

Создание конфигураций 1С: пишем "Крестики-нолики" часть 3/3

Автор уроков и преподаватель школы: Владимир Милькин

Заключительная часть разработки Крестиков-ноликов на 1С. После четырнадцатого
krestiki-nolikiшага мы создали пустую процедуру "ХодКомпьютера" и добавили её вызов сразу после нашего хода.

Если вы прерывались (закрывали конфигуратор) после предыдущей части - выполните шаг №2 (открытие конфигуратора) и шаг №3 (открытие дерева конфигурации) . В дереве конфигурации откройте обработку "КрестикиНолики":
- найдите в ней закладку "Формы"
- откройте там элемент "Форма"
- перейдите в модуль формы (закладка "Модуль" внизу)
- уже после этого переходите к шагу №15

Шаг №15: добавляем переменную Поле для хранения состояний кнопок

Чтобы компьютер смог походить ему нужно проанализировать текущее состояние поля - какие клетки заняты, а какие свободны. Специально для хранения нашего поля заведём переменную "Поле" и расположим её в самом начале модуля:

56

Завести переменную - пол дела. Нужно её правильно инициализировать (присвоить начальное значение). И делать это лучше всего в самом начале выполнения программы - в обработчике открытия нашей формы.

 
 

Шаг №16: добавляем обработчик открытия формы

Чтобы попасть в этот обработчик - вернёмся в визуальное представление формы (закладка "Форма") и выделим (двойным щелчком) элемент "Форма" в окне с элементами:

51

В окне свойств формы (справа) промотаем полосу прокрутки вниз и найдём там событие "ПриОткрытии". Щелкнем на кнопке с лупой:

52

Программа предлагает нам создать обработчик для этого события. Выберем вариант "Создать на клиенте" и нажмем кнопку "ОК":

53

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

54

 
 

Шаг №17: в обработчике открытия формы инициализируем переменную Поле

Обработчик ПриОткрытии создан. Чем будем инициализировать переменную Поле? А давайте ещё раз вспомним, что именно мы собираемся в ней хранить. Мы собираемся хранить состояние поля. А вернее состояние его ячеек. Для хранения набора каких-то однотипных данных идеально подойдёт тип массив. Вот его мы и создадим в переменной Поле.

Наша задача вставить в процедуру ПриОткрытии код, который создаст в переменной Поле массив, который будет содержать в себе 3 элемента. Каждый из этих элементов будет также массивом на 3 элемента. Получится поле 3х3.

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

07

Массив "Поле" это двумерная таблица, к элементам которой мы сможем обращаться по номеру строки и номеру столбца.

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

Вставим в эту процедуру следующий код:

55

Я попробовал написать сам, покажите мне эталонный вариант

Код очень простой и с подробными комментариями. Все конструкции должны быть вам хорошо знакомы по первым двум модулям обучения, в которых мы изучали встроенный язык 1С. Если это не так, пожалуйста, вернитесь к изучению внутреннего языка 1С (модуль №1 и модуль №2).

 
 

Шаг №18: переименовываем все кнопки

Следующая задача дать кнопкам на форме такие имена, чтобы мы смогли  из кода легко находить имя кнопки по номеру строки и столбца на поле.

К примеру, кнопку располагающуюся в нулевой строке и нулевом столбце (отсчет будем вести с нуля)  назовём "Кнопка00", а кнопку в первой строке и втором столбце "Кнопка12" и т.д.

Для этого перейдем в визуальное представление формы (закладка "Форма")  и выделим двойным щелчком кнопку с именем "НажатиеНаКнопку":

57

В окне свойств этой кнопки (справа) найдём свойство "Имя" и изменим его значение на "Кнопка00":

06

Изменим имена всех кнопок так, чтобы в итоге все кнопки в группах назывались следующим образом:

58

 
 

Шаг №19: пишем содержание процедуры ХодКомпьютера

Наконец, мы можем определить работу процедуры "ХодКомпьютера". Что будет делать эта процедура? В ней нужно будет пробежаться по каждой из ячеек массива Поле, в котором хранятся состояния ячеек (свободна, занята компьютером, занята игроком). Сравнить каждую из ячеек с пустой строкой (признак того, что она свободна и в неё можно походить) . И если такая ячейка найдётся, поставить в неё "Х" (признак того, что в неё походил компьютер) и не забыть отобразить крестик в соответствующей кнопке на форме.

Код будет таким:

59

Я попробовал написать сам, покажите мне эталонный вариант

Как видим алгоритм работы компьютера у нас предельно простой - он просто перебирает все ячейки и делает ход в первую попавшуюся свободную ячейку.

 
 

Шаг №20: уже можно играться!

Запустим 1С в режиме Предприятие (меню "Отладка"->"Начать отладку"), откроем обработку ("Сервис"->"Крестики нолики") и убедимся, что, в принципе, уже можно играть:

60

Но вот незадача - компьютер перезатирает наши ходы! А всё дело в том, что в процедуре "НажатиеНаКнопку" мы нолик-то на кнопке отображаем, а вот в массив "Поле" этот нолик не ставим. Поэтому компьютер и не видит наши ходы.

 
 

Шаг №21: избавляемся от затирания наших ходов

Изменим процедуру "НажатиеНаКнопку" так, чтобы наш ход проставлялся не только на кнопке, но и в массиве "Поле" (добавленный код очерчен жёлтым цветом):

61

Я попробовал написать сам, покажите мне эталонный вариант