Александр Бугаев (a_bugaev) wrote,
Александр Бугаев
a_bugaev

Кстати о роботах и играх

Я тут в последние дни делюсь отцовской гордостью

Сережа сильно увлекся программированием. Самостоятельно освоил Visual Studio (я только книжки ему покупал), стал пробовать что-то писать, но как-то не было интересных идей.

Ну и примерно год назад я решил его озадачить, рассказал про "Путника в лабиринте" (это пример конечного автомата, который у нас на мехмате использовался для изучения принципов программирования). Я предложил Сережке реализовать такого Путника, и чтобы сам он поучился на серьезной задаче, а если получится сделать, то чтобы Миша потом на этом деле учился алгоритмы составлять.

Там не слишком сложная визуальная часть, а вся суть - что нужно сделать интрпретатор сценариев. Я устно ему набросал идею интерпретации с использованием стека для условий и циклов, плюс всякий сервис - визуальный редактор лабиринтов, затем визуальный редактор и отладчик сценариев... Сережа сразу загорелся.

Возился довольно долго, сначала с рисованием поля, потом с редактированием лабиринта, я уж думал, что он на этом и завянет (в графике он пока не очень силен). Потом стал делать интерпретатор. Там трудности с разбором формул, а он решил все делать по честному, т.е. не закладываться на простейший синтаксис, а разбирать достаточно произвольную грамматику. В этом пришлось помочь, я ему дал свой старый текст на PL/SQL с реализацией стекового разбора. Он все переделал, добавил поддержку унарных операторов и объектной нотации., вместо стека придумал использовать дерево, при разборе там еще что-то похожее осталось, а для вычисления вместо стека сделал рекурсию по дереву от вершины.

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

В третьей версии сделал поддержку переменных (можно отсчитывать шаги и повороты, считать препятствия и т.п.), Эту версию он выпустил вчера к моему д.р. Вот только справку не успел дописать, обещал завтра.

-----------
Получается, парень примерно за год вкратце проделал немалый путь и почти самостоятельно изобрел несколько велосипедов, вполне действующих, и поставил выпуск на поток. Я же ему только книжки давал и идеи подбрасывал, то есть играл роль консультанта.

Дальше у него запланирована возможность объявлять функции и переход от интрпретатора к компиляору в промежуточные коды. Это он планирует к своему дню рождения (через две недели, ему будет 13). Я думаю, за две недели он справится.

Ну а Мишке пока больше нравится автоматика. Вот на этой неделе он из электронного конструктора сделал сигнализацию, которая подает звуковой сигнал, когда кто-нибудь подходит к двери в их комнату (там светодиод реагирует на уменьшение освещения).

Я думаю, через год-другой они на пару сделают какого-нибудь робота. Может, подать идею научить его собирать кубик Рубика?
Tags: children
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 5 comments