Игра "Угадай животное" для 1С:8.0.
Компьютер пробует угадать животное, загаданное человеком, задавая вопросы. Если компьютер не угадал, он спрашивает человека, кого он загадал и чем загаданное отличается от того животного, что назвал компьютер.
Можно обойтись практически без элементов интерфейса, используя только диалоговые окна.
Результаты игры сохраняются в файл "C:\zoo.txt"
В обработке мы можем поучиться работать с объектом "Структура", как создавать такие объекты, как оперировать с значениями структуры.
Также попутно я выяснил, что обработчики событий формы определяются не по имени процедуры, а назначаются в форме.
В игре используются два вида структур: одна (Да, Нет, Содержание) а другая (Животное). Значением ключа может быть опять же структура. Я например, обнаружил, что если вызываешь Структура.Животное, выдается ошибка, если такого ключа нет. Поэтому для проверки нужно использовать Если Структура.Свойство("Животное") Тогда.
Обработку можно скачать здесь 1s8zoo.zip (5k).
Вот текст обработки:
Перем Дерево;
Процедура Сдаться(Узел)
Животное="";
Отличие="";
//Определяем у пользователя название нового животного
Если ВвестиЗначение(Животное, "Сдаюсь, что за животное вы задумали?","Строка") Тогда
//Определяем у пользователя отличие нового животного
Если Узел <> Неопределено Тогда
Если НЕ ВвестиЗначение(Отличие, "Отличается от "+Узел.Животное+", оно (какое?):","Строка") Тогда
Возврат;
КонецЕсли;
КонецЕсли;
УзелЖивотное=Новый Структура("Животное", Животное);
Если Узел<>Неопределено Тогда
УзелСтароеЖивотное=Новый Структура("Животное", Узел.Животное);
Узел.Вставить("Отличие",Отличие);
Узел.Вставить("Да",УзелЖивотное);
Узел.Вставить("Нет",УзелСтароеЖивотное);
Узел.Удалить("Животное");
Предупреждение("Заведено новое животное "+Животное+". Оно "+Отличие);
Иначе
Предупреждение("Заведено новое животное "+Животное+".");
Дерево=УзелЖивотное;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура Выигрыш()
Предупреждение("То-то же, вам не стоит тягаться с искусственным интеллектом");
КонецПроцедуры
Процедура Угадай(Узел)
Если Узел=Неопределено Тогда
Сдаться(Узел);
Возврат;
КонецЕсли;
Если Узел.Свойство("Животное") Тогда
//Если подошли к животному
Если
Вопрос("Попробую угадать. Гм... Это "+Узел.Животное+"?", РежимДиалогаВопрос.ДаНет)=КодВозвратаДиалога.Да
Тогда
Выигрыш();
Иначе
Сдаться(Узел);
КонецЕсли;
Иначе
//Если находимся в вопросе
Если
Вопрос("Оно "+Узел.Отличие+"?", РежимДиалогаВопрос.ДаНет)=КодВозвратаДиалога.Да
Тогда
Угадай(Узел.Да);
Иначе
Угадай(Узел.Нет);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
Процедура ПриОткрытии()
Сообщить("Открылись");
Попытка
Дерево=ЗначениеИзФайла("C:\zoo.txt");
Исключение
КонецПопытки;
КонецПроцедуры // ПриОткрытии()
Процедура ПриЗакрытии()
Сообщить("Закрылись");
Если Вопрос("Сохранить игу в файл C:\zoo.txt?", РежимДиалогаВопрос.ДаНет)=КодВозвратаДиалога.Да Тогда
Попытка
Дерево=ЗначениеВФайл("C:\zoo.txt", Дерево);
Исключение
Предупреждение("Сохранить не удалось");
КонецПопытки;
КонецЕсли;
КонецПроцедуры // ПриОткрытии()
//
Процедура Игра()
Предупреждение("Загадайте животное и нажмите < ОК >");
Угадай(Дерево);
КонецПроцедуры
Процедура КнопкаВыполнитьНажатие(Элемент)
// Вставить содержимое обработчика.
Игра();
КонецПроцедуры
//Для восстановления обработки из ее текста создайте обработку, назовите ее "животные"
//Создайте форму обработки
//На закладке "Диалог" на пустом месте щелкните "Свойства"
//В событиях ПриОткрытии и ПриЗакрытии пропишите вызов процедур ПриОткрытии и ПриЗакрытии
//В корень диска C: поместите файл zoo.txt
//В обработчике главной кнопки КнопкаВыполнитьНажатие пропишите вызов Игра()
//Запустите обработку.
//Все, можно играть!