Как разобрать инструкцию типа командной строки с PHP? - PullRequest
1 голос
/ 15 мая 2011

У меня есть идея для текстовой игры, где я передаю команды и аргументы php, чтобы он решал, что делать с игроком дальше.

Я хотел бы напечатать «пойти на север» или что-то более сложное, например «использовать ключ двери», в форму AJAX, которая отправит команду в скрипт php, и я хочу, чтобы скрипт php знал, какое действие он использовал, например, «» используйте "а также первый и второй аргументы" ключ "и" дверь "и решите, что делать дальше, но я не уверен, как это сделать.

Обратите внимание, что я НЕ хочу запускать это из командной строки, но из веб-интерфейса.

Ответы [ 3 ]

2 голосов
/ 15 мая 2011

Скажем, форма AJAX отправит запрос на /game.php?do=use+key+door ...

Тогда в game.php вы сможете:

$do = $_GET['do'];
list($action, $object) = split(' ', $do, 2);
// $action == 'use'
// $object == 'key door'

Вы можете проверить коди выведите пример здесь .

(То же самое относится и к $_POST['do'], если вы решите реализовать свою форму в POST.)

1 голос
/ 15 мая 2011

Мне кажется, что если вы используете ajax, вы бы использовали либо get, либо post, поэтому в вашем php-скрипте вы просто проверяете $_GET или $_POST.

0 голосов
/ 15 мая 2011

Вы можете получить всю строку аргументов из одного запроса (textarea, input).Вы можете получить эту информацию от _GET или _POST.Что касается того, как обрабатывать информацию, вы должны создать парсер.Его сложность зависит от вас.Одна из самых простых вещей, которую вы могли бы сделать, это разделить запрос на токены по пробелам (вы получите «go», «north» или «use», «key», «door»).Проверьте свой список ключевых слов, чтобы добавить действия в стек (перейти, использовать) и добавить актеров и актеров в стек (ключ, дверь, север).Выбросьте ненужные слова (на, а, и т. Д.).Затем пройдите через стек.Если вы получаете «использовать», вы ожидаете двух следующих аргументов (актер и актер, например, используйте ключ на двери).Если вам не хватает этой информации, или если это чепуха (используйте blorb на foon), сообщите пользователю, что команда недействительна.Дайте им список общих команд.Вы также можете дать им немного свободы для определенных объектов и орфографических ошибок.Вы также можете прочитать больше о лексических парсерах, чтобы получить лучшее представление о том, как сделать это более сложным способом.

...