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