Форум » » Примеры кода » Ответить

Примеры кода

Nex: В этой теме будут примеры работающего кода для QSP.

Ответов - 84, стр: 1 2 3 4 5 All

noname: не то что бы код стал выглядеть понятней, зато работает. со стороны человек если глянет- не поймёт, что я написал. остался вопрос насчёт многомерных(например двумерных)массивов: Byte пишет: сделать можно так: $вещи['<<индекс>>_<<вещь>>'] = 'камень' в моём случае это как? на поле, например лес ложат вторую вещь, камень. т е поле#место$вещь2=37 на QSP: $место='лес' $вещь='2' $поле['<<$место>>_<<$вещь>>']='камень' м-да, возможности-то есть, но к конструкциям надо привыкнуть

noname: #Начало gosub 'инициализация' gosub 'отображение ситуации' ------------ Конец Локации --------------- #инициализация set $полевид['11'] = 'лес' set $полевыходы['11'] = '....юг..' set $полеюг['11'] = '22' set $полевид['22'] = 'море' set $полевыходы['22'] = 'се......' set $полесе['22'] = '11' set $актёримя['1'] = 'Робинзон' set $актёрвид['1'] = 'тощий европеец' set $актёрместо['1'] = '22' set $актёримя['2'] = 'Пятница' set $актёрвид['2'] = 'мускулистый дикарь' set $актёрместо['2'] = '11' set $игрок = '1' ------------ Конец Локации --------------- #отображение ситуации *pl '<<$полевид[$актёрместо[$игрок]]>>' ------------ Конец Локации ---------------

noname: приведённый выше пример работает. жаль, только что индексы массива всегда в конце, из-за этого непонятно, что к чему относится. например в $актёрместо['1'] = '22' 1-номер актёра, а 22-занимаемое им место логичнее выглядело актёр1место=22 ну да ладно, это дело десятое. вернусь с работы- проверю двумерные массивы


Byte: noname, даже если оставить так как ты написал - то зачем там подвыражение? можно так: #отображение ситуации $полевид[$актёрместо[$игрок]] ------------ Конец Локации ---------------

noname: Byte пишет: noname, даже если оставить так как ты написал а можно лучше? Byte пишет: то зачем там подвыражение? с непривычки. к тому же всё равно это выражение будет подвыражением в строчке типа: "вы видите <<..>>" спасибо за помощь!

Byte: noname, что-то ты перешёл на строки там где не нужно.. [pre2] #Начало gosub 'инициализация' gosub 'отображение ситуации' ------------ Конец Локации --------------- #инициализация set $полевид[11] = 'лес' set $полевыходы[11] = '....юг..' set полеюг[11] = 22 set $полевид[22] = 'море' set $полевыходы[22] = 'се......' set полесе[22] = 11 set $актёримя[1] = 'Робинзон' set $актёрвид[1] = 'тощий европеец' set актёрместо[1] = 22 set $актёримя[2] = 'Пятница' set $актёрвид[2] = 'мускулистый дикарь' set актёрместо[2] = 11 set игрок = 1 ------------ Конец Локации --------------- #отображение ситуации *pl $полевид[актёрместо[игрок]] ------------ Конец Локации --------------- [/pre2]

noname: хмм... QSP мне начинает нравиться... хрен с ними, с этими токенами. попробую перевести свою прогу с урк на qsp. там как раз подошёл к важному моменту: хочу избавиться от дублирования процедур- что бы действия игрока обрабатывались теми же процедурами, что и действия неписей. тогда и баги будет гораздо проще вылавливать- я буду уверен, что возможности обычного непися и непися, которым управляет игрок одинаковы.

noname: сделать можно так: $вещи['<<индекс>>_<<вещь>>'] = 'камень' что-то не очень понятно... массив типа a[x,y] как сделать? a,x,y- числа. как туды присвоить значение и как оттуда его получить?

Nex: Двумерный массив размерностью M на N : mass[x,y] отображается в виде одномерного так: mass[y*M+x] в QSP массивы - одномерные.

Byte: Из нового хелпа: Как организовать многомерный массив? 1) Самый удобный способ - использование массивов, индексируемых через строки. Например: [pre2] $карта_вещь['<<x>>_<<y>>'] = 'палка' карта_нпс['<<x>>,<<y>>,<<z>>'] = 12 [/pre2] 2) Отображение многомерного массива на одномерный. Например: [pre2] $карта_вещь[x+y*ширина] = 'палка' карта_нпс[x+y*ширина+z*ширина*высота] = 12 [/pre2]

Byte: noname пишет: сделать можно так: $вещи['<<индекс>>_<<вещь>>'] = 'камень' что-то не очень понятно... массив типа a[x,y] как сделать? a,x,y- числа. как туды присвоить значение и как оттуда его получить? если a,x,y - числа, то: [pre2] $имя_массива['<<a>>_<<x>>_<<y>>'] = 'строковое значение' $имя_массива['<<a>>_<<x>>_<<y>>'] & ! вывод значения [/pre2] если a - имя массива, то [pre2] a['<<x>>_<<y>>'] = 3 a['<<x>>_<<y>>'] & ! вывод значения [/pre2]

noname: Nex пишет: Двумерный массив размерностью M на N : mass[x,y] отображается в виде одномерного так: mass[y*M+x] не так всё просто- мне нужны массивы неизвестной/переменной размерности т.е. в первой версии было 4-ре локации, во второй- их уже 9-ть, потом придумаю, как их генерить- будет тысяча. хотелось бы, чтоб добавление локаций не было сопряжено с изменениями в программе. код должен быть легко расширяем хотя... если в M и N засунуть при инициализации максимальные координаты... всё равно не пойдёт: кол-во чего-нибудь(то же хранится по массивам) может увеличиваться по ходу игры. а ещё в большом проекте код должен быть легко читаем. mass[y*M+x] не очень наглядно будет выглядеть при использовании хотя, это-дело десятое

noname: м-да... в урке с массивами было гораааздо проще нравилась мне простота урки. и ещё: можно ли хелп сделать в виде не-help, а чего угодно другого: ваш help долго листать- не срабатывает функция ускоренного колёсика мыши. и желательно, чтоб это был один длиннючий лист, усыпанный гиперссылками. в *.chm и *.doc и *.html всё в порядке.

Byte: noname, новый хелп уже в chm. возможно, будет сразу pdf - вариант. а с простотой массивов - здесь просто немного построже.. в урке код и данные смешаны, это имхо как раз минус.. это "удобство" скрывает за собой кучу ограничений / ошибок. например, если в урке "a#x$_#y$", то аналогично в куспе "a['<<x>>_<<y>>']"..

noname: а если в урке поле11вещь7свойство2 ='несъедобно' поле11вещь7форма ='куб' поле11вещей_здесь = 9 и т д ну да ладно, всё равно это никто не использует. что мне нужно от платформы? простота работа с данными (урка устраивает, qsp то же, но не так) нормальное оформление (досурка не устраивает сложностями с русификацией) что мне нравится в qsp, так это: "(круглое | зелёное) яблоко" - где-то в хелпе вычитал надо это опробовать. для парсера- то, что нужно! хотя тогда уж лучше: "[круглое][зелёное]яблоко" поймёт и яблоко и круглое яблоко и зелёное яблоко и круглое зелёное яблоко (но не поймёт зелёное круглое яблоко) буду изучать всякие эти закорючки. хорошо бы их снабдить краткими примерами (хотя бы в одну строку) так как не ясно, как использовать /n перевод строки

noname: что-то я не понял. символы * и + применимы только к отдельным символам? а если "(круглое)*(зелёное)*яблоко" - не прокатит? к словам применим только | ? есть такой язык регулярный выражений не язык программирования, а скорее из какого-то раздела математики- так там было это попродуманнее. пытаюсь наковырять из QSP всё, что может пригодиться. получается странный набор... сразу скажу: возможности привлекательнее, чем на урке, но... но удобства- во дворе. причём во дворе у соседей.

noname: *pl STRCOMP($text,'.осм.+') выдаёт или '0' - если строка не соответствует шаблону или '-1' - если соответствует. почему '-1'? какие ещё значения можно ожидать от STRCOMP? в хелпе вообще не сказано, что возвращает эта функция. и вообще: в хелпе о каждой функции, как правило сказано, что она делает. в данном случае сравнивает то с этим, НО от ФУНКЦИИ требуется в первую очередь- возвращаемое значение. важно- что она возвращает. что она при этом делает- неважно, лишь бы не слишком долго.

noname: не подумайте, что я противник QSP- наоборот, я на него уже фактически перешёл. пишу 'живой игровой мир' - у меня появились свежие идеи. прога будет маленькая- для начала, чтоб пальцы размять.

Byte: noname, фактически, тебе должно быть важно возвратила она 0 или нет. "-1" (не 0) для QSP это "истина", "0" - ложь. в хелп добавил описание возвращаемого значения.. noname пишет: а если в урке поле11вещь7свойство2 ='несъедобно' поле11вещь7форма ='куб' поле11вещей_здесь = 9 и т д не понимаю, почему у тебя с этим какие-то сложности возникают... [pre2] $свойство['11_7_2'] = 'несъедобно' $форма['11_7'] = 'куб' вещей[11] = 9 [/pre2] можно и "более читаемо": [pre2] $свойство['поле11_вещь7_2'] = 'несъедобно' $форма['поле11_вещь7'] = 'куб' вещей['поле11'] = 9 [/pre2]

Byte: "(круглое)*(зелёное)*яблоко" - такое тоже допустимо.. будет работать для "круглоеяблоко", "круглоекруглоеяблоко", "зелёноеяблоко", "круглоезеленоеяблоко", "круглоекруглоезелёноезелёноеяблоко" и т.п. я так понял, ты хотел написать: "(круглое\s)?(зелёное\s)?яблоко" тогда [pre2] $pattern = '(круглое\s)?(зелёное\s)?яблоко' strcomp('круглое зелёное яблоко', $pattern) strcomp('круглое яблоко', $pattern) strcomp('зелёное яблоко', $pattern) strcomp('яблоко', $pattern) [/pre2] все строчки вернут -1. PS: это уже стандарт регулярных выражений.. то есть такой формат использует далеко не только QSP.. справку и учебники можно найти в интернете ("Perl Compatible Regular Expressions" / PCRE).



полная версия страницы