FAO по плееру QSP

FAO по плееру QSP

Здравствуйте всем. Я не новичок в программировании: язык хотя-бы Паскаль я знаю.
Я прочел мануал к программе, посмотрел уроки Нексуса. СПАСИБО большое. ДА: перетаскивать предметы,  переименовывать персонажей из рандомных имен, вставлять картинки, менять тегами цвет текста..  Это я могу- понимаю.
И да, я примеры программ смотрел-видел. Спасибо, что разбираете и показваете.
  Так вот вопрос-проблема именно в построении списков в плеере. Опять вернусь к теме с продажей животных.
В магазине купили животных- это действие на локации в МАГАЗИНЕ. А у нас же у фермера есть загоны, в которых надо  сохранять животных хотя-бы по гендеру.
  ЕСТЬ список- таблица на одной локации. Как перенести- скопировать или вставить её на другую локацию.
Но это надо делать проверку, например, по гендеру.
Да- динамические массивы. dynamic. Можно как-то вставить текстом.
Я вставил после покупки  копировать массив в массив. Но у меня при переходе в локацию игра залипает.
файл с текстом локации прилогаю.voprosnik.txt

Poganec37
useravatar
Offline
14 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: FAO по плееру QSP

Poganec37 написал(а):

Я не новичок в программировании

С этим я бы поспорил. Знать!=Уметь.

Код:

args[9]=args[9]

Что это?

Код:

args['race']=rand(0,1)

args['ver']=rand(20,50)
if args['ver']>=20 and args['ver']<=29:
args['variant']=0
elseif args['ver']>=37 and args['ver']<=50:
args['variant']=1
elseif args['ver']>=30 and args['ver']<=36:
args['variant']=2
end

Еще раз почитай что такое args.

Код:

! блок первого посещения

if $args[0]="":

Это блок любого посещения без аргументов. Блок первого посещения лучше через переменную делать.

Poganec37 написал(а):

Так вот вопрос-проблема именно в построении списков в плеере.

Нет такого встроенного инструмента "работа со списками". Списки ты сам задаешь в любом удобном для себя формате.

Poganec37 написал(а):

ЕСТЬ список- таблица на одной локации. Как перенести- скопировать или вставить её на другую локацию.

Ничего не надо копировать\вставлять. Разделяй графику от данных.
Данные сохранены и не меняются, тебе просто нужно их вывести в двух разных местах. Тут даже dynamic не нужен.

Старые советы остаются в силе. Раздели на локации, станет гораздо проще. Дебагать тут нельзя, так что используй usercom или хотя-бы msg, p.
У меня локация грузится и работает, проверь переменные циклов, скорее всего бесконечный цикл где-то.

Engineer
useravatar
Offline
25 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: FAO по плееру QSP

Poganec37,
каждое животное в магазине — это запись в массивах под одним индексом:

Код:

! это не код, просто для наглядности

$Trace[0]='кошка' & $Tgender[0]='жен' & Tprice[0]=80 & $Tmark[0]='продано' & ! кошка за 80
$Trace[1]='кошка' & $Tgender[1]='муж' & Tprice[1]=170 & $Tmark[1]='' & ! кот за 170
$Trace[2]='кошка' & $Tgender[2]='дети' & Tprice[2]=120 & $Tmark[2]='' & ! котёнок за 120
$Trace[3]='собака' & $Tgender[3]='муж' & Tprice[3]=170 & $Tmark[3]='продано' & ! кобель за 170

В следующий раз, когда игрок приходит в магазин, будет сформирован новый список.

В момент покупки (где $args[0]='buy') нужно данные из этих массивов переносить в массивы, которые отвечают за запись животных в магазине.

Покажу на примере денег.

Переменная money — это деньги в кошельке. Как положить деньги в банк? Заводим новую переменную money_bank. Теперь кладём 100 рублей в банк:

Код:

money=money-100 & ! вынули сто из кошелька

money_bank=money_bank+100 & ! положили сто в банк

Так же и с животными. Была кошка, которую купил игрок, она записана в виде данных под одним индексом в четыре массива:

Код:

! это не код, просто для наглядности

$Trace[0]='кошка' & $Tgender[0]='жен' & Tprice[0]=80 & $Tmark[0]='продано'

Во время покупки нужно вписать её в массивы, соответствующие ферме. Например:

Код:

if $ARGS[0]="buy":

! блок покупки
    if money>=Tprice[args[1]]:
        money=money-Tprice[args[1]]
        $Tmark[args[1]]="продано"
        ! закидываем кошку на ферму
        $PhermRace[]=$Trace[args['i']]
        $PhermGender[]=$Tgender[args['i']]
        PhermPrice[]=Tprice[args['i']]
        ! выводим на экран список магазина
        gs "магазин","print"
    else
        gs "магазин","print"
        *pl "У вас нет денег"
    end
end

Aleks Versus
воздвигатель башни
useravatar
Онлайн
1481 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: FAO по плееру QSP

Engineer,

Engineer написал(а):

Код:
args[9]=args[9]
Что это?

это инициализация локальной переменной, чтобы данные из args['i'] не затёрли скажем args[0]. Элементы массивов, которые индексируются текстом, на самом деле индексируются числами, текстовый индекс как бы привязывается к числовому. Поэтому если ты пишешь:

Код:

mass['index']=100

*pl mass[0]

На экран выводится не 0, а 100

Engineer написал(а):

Еще раз почитай что такое args.

что ты имел ввиду? big_smile  Что args предназначен для передачи аргументов? Таки да. Но только args с нулевого по восьмой. Поэтому args[9] инициирован первой строкой. Поэтому можно использовать args как локальные переменные с любыми индексами в дальнейшем.

Если что, код написан мной в результате переработки кода Poganec37. Все косяки — мои.

Насчёт глобальной переменной для учёта первого посещения ты прав, но не совсем. Нужно знать геймдизайн и как оно работает в остальной игре, чтобы предложить адекватное решение. Поскольку ни ты, ни я не видели остального кода игры, мы не можем утверждать, что наши решения верны.

Aleks Versus
воздвигатель башни
useravatar
Онлайн
1481 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: FAO по плееру QSP

Дело в том, что когда любой вид программирования доходит до массивов данных, то я начинаю тормозить в коде. И получаются ошибки. Заскок в  данный момент был вот в чем: ARGS - локальная переменная, которая работает только на локации. А я думал, что массив, созданный через  такую переменную, можно отображать на любой локации.
теперь я исправил код так: я вывел ПРИНТ-вывод на другую локацию. И теперь при обращении к ней в нужном месте печатается текст с  наличием животных.
Например,  при условии, что  животное мужского пола-  печатается в локации- клетки с  мальчиками.

Спасибо за комментарий.

Poganec37
useravatar
Offline
14 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: FAO по плееру QSP

Aleks Versus написал(а):

это инициализация локальной переменной, чтобы данные из args['i'] не затёрли скажем args[0]

Что-то я не понимаю. Когда ты попадаешь на локацию, все необходимые переменные с 0 по X (до 8) уже инициализированы, каким образом args['i'] перезапишет их?

Aleks Versus написал(а):

что ты имел ввиду?
...
Поэтому можно использовать args как локальные переменные с любыми индексами в дальнейшем.

Как уже сказано выше, зачем использовать args, когда ему надо записать и использовать результат в других местах.

Aleks Versus написал(а):

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

Не надо знать геймдизайн, чтобы понять, что локальная переменная локации - худшее решение для записи о посещении этой локации.
Можно это сделать один раз, если ты на 100% уверен, что игрок попадет на локацию только из одного места. Там в переход засунуть аргумент, а после этого попадать на локацию без этого аргумента.
Использование обычной переменной объективно лучше, на что я и намекнул. А остальное уже сам.

Engineer
useravatar
Offline
25 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: FAO по плееру QSP

print_jivotnyie_v_ferme.txt

magazin.txt
Пожалуйста, если я надоедаю, то простите меня.
Я сделал вывод на ферму.
На локации ферма смотрим  клетки с животными: пусто. Теперь идём покупать в магазин. здесь список. Купить- продано. В списке-ферме должно отобразиться по гендерному признаку запись с животным.
1. я поставил проверку на пол. Получилось, что  покупаем мужчину- в списке  появляется не мужчина, а "дети" или  женщины.
2. Если уйти из магазина, то можно  посмотреть в клетки:  получается случайно  заполняется: или в мужской, или в женскй формируется список .

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

То, что Алексей Шпак(Нексус) делает видео по программе- большой плюс. Но иногда в ФАО к программе нет нормального объяснения. Конечно, ФАО- это не полноценный учебник. Но чем больше ковыряешься в программе, тем больше возникает вопросов.
ДА- я затестил  "Создаём простую Систему Предметов на QSP". Но это не то, что нужно.

Poganec37
useravatar
Offline
14 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: FAO по плееру QSP

Engineer написал(а):

Что-то я не понимаю. Когда ты попадаешь на локацию, все необходимые переменные с 0 по X (до 8) уже инициализированы, каким образом args['i'] перезапишет их?

Да, ты прав. Так оно и работает. Ничего не перезапишется.

Engineer написал(а):

Как уже сказано выше, зачем использовать args, когда ему надо записать и использовать результат в других местах.

Нет, из поставленной задачи я этого не увидел. К тому же используется только для локальных нужд.

Engineer написал(а):

Не надо знать геймдизайн, чтобы понять, что локальная переменная локации - худшее решение для записи о посещении этой локации.

Это не запись о посещении. Это запись о выполнении кода на момент входа. Если войти на локацию ещё раз, код сработает ещё раз. Именно так я и понял работу локации.

Ладно. Всё это оффтоп.

Poganec37 написал(а):

Алексей Шпак(Нексус)

Poganec37,
я не Нексус. big_smile

А ошибка у тебя проста. Ты хотя может быть и проверяешь пол, но выводишь всё равно всех подряд.

Код:

*clr

        *pl "Список девочек "
        *p '<table  border="1" cellpadding="10">'
        args['i']=0
        :for_printWim
        ! в следующей строке заменил название массива на правильное
        if args['i']<arrsize('$PhermRace'):
            ! добавил действительно условие для проверки пола
            if $PhermGender[args['i']]='жен':
                *p '<tr>'
                    *p '<th>'+args['i']+'</th>'
                    *p '<th>'+$PhermRace[args['i']]+'</th>'
                    *p '<th>'+$PhermGender[args['i']]+'</th>'
                    *p '<th>'+PhermPrice[args['i']]+'</th>'
                    *p '<th><font color="#BC8F8F">Преобретено</font></th>'
                *p '</tr>'
            end
            args['i']+=1
            jump 'for_printWim'
        end
        *pl '</table>'

Engineer тебе правильно говорит. Отдельно работа с данными, отдельно вывод на экран. Ты же мешаешь всё в одно, и путаешься. Ну, здесь правда отдельные локации для вывода. ) Это правильно.

Aleks Versus
воздвигатель башни
useravatar
Онлайн
1481 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: FAO по плееру QSP

Я разделил мальчиков и девочек. Да- работает код:
(if $PhermGender[args['i']]='муж') - это вывод мальчико в таблицу  мужской части.
(if $PhermGender[args['i']]<>'муж') - это  женская часть. НЕ РАВНО, т.к. надо, чтобы ДЕТИ жили с мамами.
вот.
Есть проблема:  код делит по гендеру в клетки. Да- формируется список, все нормально.
Купили детей. - в списке женщины. Это же не верно.
Если, скажем, я сделаю 3 части, которые будут отдельно равны значению. То  все будет в мужской части..

Poganec37
useravatar
Offline
14 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: FAO по плееру QSP

Poganec37,
вывод - это вывод. Он ничего не означает. Ты просто отсеиваешь во время вывода по половому признаку и на экране отображается так, как ты хочешь. Но в переменных/массивах никак не записано, что одни животные — в одной клетке, другие — в другой.

Можешь сочетать условия, разве нет?

Код:

if $PhermGender[args['i']]='жен' or $PhermGender[args['i']]='дети':

Будут выводиться и девочки и дети.

Aleks Versus
воздвигатель башни
useravatar
Онлайн
1481 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Информация

Статистика форума:
 
Всего тем:
970
Всего опросов:
14
Всего сообщений:
16790553
Всего сообщений сегодня:
1
Пользователи форума:
 
Всего пользователей:
2356
Последним зарегистрировался:
Red Dragon