Игра "Угадай животное" для 1С:8.0.

Компьютер пробует угадать животное, загаданное человеком, задавая вопросы. Если компьютер не угадал, он спрашивает человека, кого он загадал и чем загаданное отличается от того животного, что назвал компьютер.

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

Результаты игры сохраняются в файл "C:\zoo.txt"

В обработке мы можем поучиться работать с объектом "Структура", как создавать такие объекты, как оперировать с значениями структуры.

Также попутно я выяснил, что обработчики событий формы определяются не по имени процедуры, а назначаются в форме.

В игре используются два вида структур: одна (Да, Нет, Содержание) а другая (Животное). Значением ключа может быть опять же структура. Я например, обнаружил, что если вызываешь Структура.Животное, выдается ошибка, если такого ключа нет. Поэтому для проверки нужно использовать Если Структура.Свойство("Животное") Тогда.

Обработку можно скачать здесь 1s8zoo.zip (5k).
Вот текст обработки:

Перем Дерево;


Процедура Сдаться(Узел)
	Животное="";
	Отличие="";
    //Определяем у пользователя название нового животного
	Если ВвестиЗначение(Животное, "Сдаюсь, что за животное вы задумали?","Строка") Тогда
        //Определяем у пользователя отличие нового животного
		Если Узел <> Неопределено Тогда
			Если НЕ ВвестиЗначение(Отличие, "Отличается от "+Узел.Животное+",  оно (какое?):","Строка") Тогда
				Возврат;
			КонецЕсли;
		КонецЕсли;

		УзелЖивотное=Новый Структура("Животное", Животное);
		
		Если Узел<>Неопределено Тогда
			УзелСтароеЖивотное=Новый Структура("Животное", Узел.Животное);
			Узел.Вставить("Отличие",Отличие);
			Узел.Вставить("Да",УзелЖивотное);
			Узел.Вставить("Нет",УзелСтароеЖивотное);
			Узел.Удалить("Животное");
			Предупреждение("Заведено новое животное "+Животное+". Оно "+Отличие);
		Иначе
			Предупреждение("Заведено новое животное "+Животное+".");
			Дерево=УзелЖивотное;
		КонецЕсли;

	КонецЕсли;
КонецПроцедуры

Процедура Выигрыш()
	Предупреждение("То-то же, вам не стоит тягаться с искусственным интеллектом");
КонецПроцедуры


Процедура Угадай(Узел)
	Если Узел=Неопределено Тогда
		Сдаться(Узел);
		Возврат;
	КонецЕсли;

	Если Узел.Свойство("Животное") Тогда
		//Если подошли к животному
		Если 
			Вопрос("Попробую угадать. Гм... Это "+Узел.Животное+"?", РежимДиалогаВопрос.ДаНет)=КодВозвратаДиалога.Да 
		Тогда
			Выигрыш();
		Иначе
			Сдаться(Узел);
		КонецЕсли;
	Иначе
		//Если находимся в вопросе
		Если 
			Вопрос("Оно "+Узел.Отличие+"?", РежимДиалогаВопрос.ДаНет)=КодВозвратаДиалога.Да 
		Тогда
			Угадай(Узел.Да);
		Иначе
			Угадай(Узел.Нет);
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры



// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ

Процедура ПриОткрытии()
	Сообщить("Открылись");
	Попытка
		Дерево=ЗначениеИзФайла("C:\zoo.txt");
	Исключение 
	КонецПопытки;
КонецПроцедуры // ПриОткрытии()

Процедура ПриЗакрытии()
	Сообщить("Закрылись");
	Если Вопрос("Сохранить игу в файл C:\zoo.txt?", РежимДиалогаВопрос.ДаНет)=КодВозвратаДиалога.Да  Тогда
		Попытка
			Дерево=ЗначениеВФайл("C:\zoo.txt", Дерево);
		Исключение 
			Предупреждение("Сохранить не удалось");
		КонецПопытки;
	КонецЕсли;
КонецПроцедуры // ПриОткрытии()


//

Процедура Игра()
	Предупреждение("Загадайте животное и нажмите < ОК >");
	Угадай(Дерево);
КонецПроцедуры

Процедура КнопкаВыполнитьНажатие(Элемент)
	// Вставить содержимое обработчика.
	Игра();
КонецПроцедуры


//Для восстановления обработки из ее текста создайте обработку, назовите ее "животные"
//Создайте форму обработки
//На закладке "Диалог" на пустом месте щелкните "Свойства"
//В событиях ПриОткрытии и ПриЗакрытии пропишите вызов процедур ПриОткрытии и ПриЗакрытии
//В корень диска C: поместите файл zoo.txt
//В обработчике главной кнопки КнопкаВыполнитьНажатие пропишите вызов Игра()
//Запустите обработку.
//Все, можно играть!