67 lines
1.7 KiB
ObjectPascal
67 lines
1.7 KiB
ObjectPascal
// Самообучающаяся игра "Угадай животное".
|
|
// Старайтесь на вопрос "Чем отличается" вводить самый общий ответ
|
|
// Например: "Чем отличается чиж от ежа" - "Умеет летать"
|
|
|
|
uses System.Runtime.Serialization.Formatters.Binary;
|
|
uses System.IO;
|
|
uses System;
|
|
|
|
type
|
|
[Serializable]
|
|
Node = class
|
|
public
|
|
s: string;
|
|
left,right: Node;
|
|
constructor(s: string);
|
|
begin
|
|
Self.s := s;
|
|
left := nil;
|
|
right := nil;
|
|
end;
|
|
end;
|
|
|
|
const FileName = 'animals.dat';
|
|
|
|
begin
|
|
var formatter := new BinaryFormatter;
|
|
var root: Node;
|
|
|
|
Println('Загадайте животное');
|
|
if not FileExists(FileName) then
|
|
root := new Node('Собака')
|
|
else
|
|
begin
|
|
var fs := new FileStream(FileName, FileMode.OpenOrCreate);
|
|
root := Node(formatter.Deserialize(fs));
|
|
fs.Close;
|
|
end;
|
|
|
|
var p := root;
|
|
while p.left<>nil do
|
|
begin
|
|
var x := ReadlnInteger(p.s+'? (0 - Нет, 1 - Да):');
|
|
if x=1 then
|
|
p := p.left
|
|
else
|
|
p := p.right
|
|
end;
|
|
|
|
var x := ReadlnInteger('Это '+p.s+'? (0 - Нет, 1 - Да): ');
|
|
if x=1 then
|
|
Println('Я угадала!')
|
|
else
|
|
begin
|
|
var s := ReadlnString('Я проиграла. Что это за животное?');
|
|
var q := ReadlnString('Введите вопрос, отличающий это животное от '+p.s+':');
|
|
var p1 := new Node(s);
|
|
var p2 := new Node(p.s);
|
|
p.s := q;
|
|
p.left := p1;
|
|
p.right := p2;
|
|
end;
|
|
|
|
var fs := new FileStream(FileName, FileMode.OpenOrCreate);
|
|
formatter.Serialize(fs, root);
|
|
fs.Close;
|
|
end.
|