Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Разработка Консоли
GAMEINATOR forums > > Архив
Ferrum
Одним словом предлагаю сделать модуль с консолью.

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

Я могу сделать разбор строки на токены и правила при помощи генераторов Lex/Yacc, то есть для разбора токенов и правил синтаксиса соответственно.

Это конечные автоматы, то есть их почти не надо дебажить, плюс не надо опасаться кривости своих или других рук, но они будут написаны при помощи специального кода, после компиляции которого в нем НЕВОЗМОЖНО разобраться (понять можно только исходные файлы Lex/Yacc, со знание синтаксиса их языка).

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

Оставляйте все ваши за и против такого метода (возможно разрабатывать консоль пока еще рано wink.gif ), но тем не менее...
Neo][
Цитата
Оставляйте все ваши за и против такого метода (возможно разрабатывать консоль пока еще рано wink.gif ), но тем не менее...


Действительно рано пока не разработан модуль настроек, точнее отправлен на переработку.


Цитата
могу сделать разбор строки на токены и правила при помощи генераторов Lex/Yacc, то есть для разбора токенов и правил синтаксиса соответственно.

А можно поподробнее, что за токены, что за генераторы Lex/Yacc.
Ferrum
Пакет Lex/Yacc это так называемые парсеры, то есть с помощью них можно сделать разбор строки на токены (это ключевые слова или выражения), и потом проверку соответствия синтаксиса исхомой строки или всего текста на то, удовлетворяет ли она нужным (разработчикам) правилам и соответственно после проверки происходит исполнение нужного кода.

Пример:
например в строке

set video_mode 1024x768

токены: set; video_mode; 1024; x; 768
синтаксис: BaseCommand VideoSetCommand Number x Number

То есть при помощи этого пакета легко можно сделать консоль, так как общее кол-во правил и ключевых слов довольно мало
Ferrum
Пример исходного кода для создания калькулятора с созданием бинарного дерева (из моего проекта при поступлении в универ) я скинул на FTP
Neo][
Цитата
Пакет Lex/Yacc это так называемые парсеры, то есть с помощью них можно сделать разбор строки на токены (это ключевые слова или выражения), и потом проверку соответствия синтаксиса исхомой строки или всего текста на то, удовлетворяет ли она нужным (разработчикам) правилам и соответственно после проверки происходит исполнение нужного кода.

Пример:
например в строке

set video_mode 1024x768

токены: set; video_mode; 1024; x; 768
синтаксис: BaseCommand VideoSetCommand Number x Number

То есть при помощи этого пакета легко можно сделать консоль, так как общее кол-во правил и ключевых слов довольно мало


Как раз про это я и говорил Олегатору, но предлагал написать такой парсер самому. Он нам нужен не только в консоли, но и в модуле настроек. Но нам надо немного проще. Предлагаю тебе связаться с Олегом, и вместе писать модуль настроек и консоль.
Ferrum
Neo][ Лучше написать при помощи Lex/Yacc, так как потом будем все дружно дебажить, плюс добавление новых комманд сделать довольно затруднительно и надо будет дебажить снова.

Так что лучше не париться.

Пришли мне список комманд и аргументов и я за выходные напишу парсер
Тем более, что я знаю язык написания под этот пакет.

Потом при появлении новых команд остальные будут писать в эту ветку с названием комманды, ее параметрами и вызываемыми функциями

Так вроде лучше wink.gif
OlegatoR
В модуле настроек я уже сделал процедуру для "приянтия" команд из консоли и их последующий разбор для сохранения в файл.
Ferrum, может лучше обойтись Дельфой без всяких пакетов? Просто сделать все самому чтобы во всем можно было разобраться.
Приведу пример из своего кода:
например юзер вводит параметр vid_res 1024x768
Процедура разбирает строку: разделу vid соотсетствует раздел Video, aud - аудио и т.п. Далее берем вторую часть строки - res. Это соответсвует разделу Resolution. 3 часть процедуры разбивает на 2 значения - resX и resY - которые по отдельности записываються в файл.
Также я думаю что модуль консоли (тоесть обработка комманд) можно совместить с модулем настроек.
Скину код на ФТП и посмотрите что я там намутил.

Was added in 11 minutes 21 seconds:

З.Ы. Прочитал помощь программистам - буду переделывать
FuckTER
имхо олегатор прав насчет того что не стоит мутить с другими языками.
но имхо консоль нам вобще мало важна как таковая, ребят ну что вы в консоли делать то будете?
ну ладно там разрешение поменять, можно вобщет и через настройки нормально сделать.
консоль юзаеться в основном только в процессе отладки ИИ, но у нас его будет мизер и то я думаю надо брать готовые алгоритмы.
Neo][
Цитата
и то я думаю надо брать готовые алгоритмы.


FuckTER, само собой большинство будет готовым, зачем изобретать велосипед, который медлено ездит, если есть скоростные? Это я про то, что они давно проверены и оптимизированы.

Цитата
консоль юзаеться в основном только в процессе отладки ИИ

Да и вообще во время отладки, всёравно полезная вещь.
OlegatoR
Сделал этот самы ваш Парсер иди как его там. Есть ошибка которую не успел пофиксить: глючно пишутся значения, но вы пока оцените общий вид
Ferrum
Хорошо, ща поишем баги... wink.gif
Одним словом жди рецензию
Ferrum
Одним словом посмотрел текущую версию парсера...
Типа за выходные я сделаю свою версия (постараюсь wink.gif ), а остальные уже решат что лучше...

Я решил (пока) реализовать комманды в файле настроек:

1). Set Video_Resolution Nuber X Number
2). Set Render_ColorQuality = Number
3). FullScreen = (0/1)
4). Set Render_Filtering = (Trilinear/ Anisotronic) // если трилинейная, то в Aniso = 0
5). Set Render_Aniso = Number
6). Set Render_Antialiasling = Number
7). Render_Restart // эти для консоли
8). Game_Restart

Главная функция Console_Parser(s: String) : Number (если 0 то все нормально, в противном случае - ошибка в синтаксисе)
OlegatoR
Цитата
1). Set Video_Resolution Nuber X Number
2). Set Render_ColorQuality = Number
3). FullScreen = (0/1)
4). Set Render_Filtering = (Trilinear/ Anisotronic) // если трилинейная, то в Aniso = 0
5). Set Render_Aniso = Number
6). Set Render_Antialiasling = Number
7). Render_Restart // эти для консоли
8). Game_Restart

зачем Set? А не легче прописывать пусть даже render_aniso=number. Зачем Set?
Ferrum
Ну типа для упорядоченности...
А если по нормальному, то Set только для задания параметров движка, так легче потом будет разобраться
OlegatoR
ну не знаю... сделай свою версию, а то на пальцах объяснять - сам понимаешь
Neo][
Цитата
Я решил (пока) реализовать комманды в файле настроек:

1). Set Video_Resolution Nuber X Number
2). Set Render_ColorQuality = Number
3). FullScreen = (0/1)
4). Set Render_Filtering = (Trilinear/ Anisotronic) // если трилинейная, то в Aniso = 0
5). Set Render_Aniso = Number
6). Set Render_Antialiasling = Number
7). Render_Restart // эти для консоли
8). Game_Restart

Главная функция Console_Parser(s: String) : Number (если 0 то все нормально, в противном случае - ошибка в синтаксисе)


Моё ИМХО настройки видео должны предваряться соответствующим префиксом, т.е. что полный экран, что сглаживание, что видео режим. Хотя сглаживание, анизатропию и т.д. можно выделить в отдельный т.е. рендер, а видеорежим, полный экран, просто в видео.
Ferrum
Выложил первый вариант...
Пожалуйста напишите какие процедуры должны вызывать команды в настройках!!!

Формат: название команды, функция и ее переменные для входа (желательно ткже указать ее модуль)

Текущая версия умеет проверять правильность вводе команд, вызывать их (типа дайте список функций wink.gif ), выводить ошибки в случае неправильного синтаксиса

Всего 4 файла, а именно:
1).Console_unit.pas - главный модуль (он же файл парсера Yacc), в нем находится вызываемая функция
function ConsoleParser(Command : string): extended;
2).Console_lex.pas - файл парсера Lex
3).LexLib.pas - библиотека Lex
4).YaccLib.pas - библиотека Yacc

Реализовал вызов всех комманд кроме Restart

Опять же ПРОШУ список комманд и вызываемых функций, без этого невозможна дальнейшая разработка

Сделал отдельный проект, на вурификацию файла с настройками.

Все в папке Console

PS. Пока исходники без комментариев... sad.gif
Neo][
Цитата
Выложил первый вариант...
Пожалуйста напишите какие процедуры должны вызывать команды в настройках!!!


Ferrum, я конечно понимаю твоё рвение, но какие параметры, ещё ничего неизвестно, нет модуля настроек, недописан рендер.

+ ко всему, ещё не определились с реализацией консоли. А также вызывает сомнения использование сторонних библиотек.

Хотя это я придираюсь, ещё не смотрел пример, эти библиотеки.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.