Начал создавать текстовую рпг, но столкнулся с проблемой, для движка нужно создать скриптовый язык, но я никак не могу придумать как мне это сделать. Искал статьи, но они мало помогли. Кто-нибудь делал такое на ас3.0?
Если кому интересно, то вот, что на данный момент сделал http://zalil.ru/32231130 Конечно это туфта, три кружочка бегают по сцене, но надеюсь это превратится в что-то большее.
А кто-нибудь работал со своим пространством имен? Я как человек начинающий, не очень много уделял времени этому пункту в руководстве для пользователя. А сейчас прочитал, и ничего не понял)) И хочу узнать, сможет ли это помочь в случае с парсингом своего скрипта с помощью Eval?
Еще немного поразбирав пример - http://eval.hurlant.com/, кое-что понял. С помощью парсера вревращаем текст с программой в байт-код, и затем класс ByteLoader загружает этот код как ролик SWF в память. например, я в главном классе Main написал
var evaluator:Evaluator = new Evaluator
var bytes:ByteArray = evaluator.eval(src);
где src - текст с скриптом, допустим "trace(this);" И уже при тестировании ролика, в окне вывода будет сообщение - "object global". Вызывать можно только статичные методы, когда вызываем публичные методы, вылетает ошибка. И поэтому никак не могу создать пример.
Да я и не пытаюсь создать язык программирования. Вот поразбирал немного пример, что дал Дракула - http://eval.hurlant.com/ и хоть научился его запускать. Может через некоторое время прикручу этот скрипт к движку
Ты не пытайся создать полноценный язык программирования, всё равно не создашь. Подгони команды под возможные условия игры. Команд вида КОМАНДА УСЛОВИЕ ДЕЙСТВИЕ вполне будет достаточно. типа так: IF monstrkil>5 GOTO 200 Парсинг уже будет весьма сложным. Это вообще дело непростое.
sw_alex, спасибо за совет)) Но как я сказал, нужно что-то большее. Я сначала так и хотел сделать, но потом дошло, что такой вариант не подходит. Скрипт будет работать еще и с переменными. Допустим, создал диалог, и при выборе одного из вариантов запускается скрипт. Например,
Привет! Я выполнил квест!! {sc:1010}
И скрипт проверяет, что-нибудь if(global.monstrKill >= 5) dialog.goto(200);
В принципе, тебе должен подойти последний пример. Разбиваешь строку на массив слов, и этот массив обрабатываешь как тебе надо. типа if (words[0]=='COMMAND1') { /* Сделать что надо */ }
А ты ТОЧНО уверен, что стОит создавать что-то подобное? Ведь писать словами, что следует сделать - не самый интересный способ игры. Особенно в наше время. Может, лучше сделать выбор команд из нескольких возможных вариантов, ну типа меню. А если всё-так хочется именно так, то советую взять пример с Cisco - у них если в командной строке нажимаешь "?", появляется список возможных команд. Очень удобно. Лучше делать более сложный в реализации, но более удобный интерфейс, чем рожать нечто заведомо нежизнеспособное.
А дальше уже твое творчество - пишем команды (переход от одного диалога к другому, покупка чего-то и т.д.)... Придумываем дерево и узлы, например (ну умнее было конечно все типизировать по классам):