вторник, 26 марта 2013 г.

Массивы

Это моя ахиллесова пята. Сам толком не понимаю как это работает. Пользуюсь ими для создания действий с множеством вариантов выбора. Например разговор который разветвляется, а потом сливается в одну тему.
Пример.
Локация под названием "масс"


if $ARGS[0]='start':
$metka = $ARGS[0]
$loc = $CURLOC
'Вот тут пишется диалог.'
act 'Первый вариант диалога.':gt'масс','первый'
act 'Второй вариант диалога.':gt'масс','второй'
end

if $ARGS[0]='первый':
$metka = $ARGS[0]
$loc = $CURLOC
'Вот тут пишется диалог для первого варианта.'
act 'Обратно.':gt'масс','start'
act 'Конец диалога.':gt'масс','конец'
act 'Второй вариант диалога.':gt'масс','второй'
end

if $ARGS[0]='второй':
$metka = $ARGS[0]
$loc = $CURLOC
'Вот тут пишется диалог для второго варианта.'
act 'Первый вариант диалога.':gt'масс','первый'
act 'Конец диалога.':gt'масс','конец'
end
 
if $ARGS[0]='конец':
$metka = $ARGS[0]
$loc = $CURLOC
'Вот тут пишется диалог для конца разговора.'
act 'Уйти.':gt'название_локации_куда_вы_хотите_уйти'

end

Вот эта приблуда
$metka = $ARGS[0]
$loc = $CURLOC
Нужна для возврата в массив из каких нибудь дополнительных локаций, например меню предмета, команда $CURLOC не вернет вас в массив, она может возвращать только в последнюю локацию где нет массивов.

Команда для возврата в массив из всякой побочной ерунды.
act 'Уйти.':GOTO $loc, $metka

Это все, что я умею делать с массивами. Но как видите мне этого хватает на много разнообразных действий. При их помощи можно создавать многовариантные диалоги, боевые системы и черт знает что. Если сделать тот же самый пример при помощи переменных или нескольких локаций, то будет не удобно для каждой фразы плодить локации или отслеживать переменную указывающию на нужную строку. Если же использовать такую конструкцию.

'Начало диалога.'

        act 'Первый вариант диалога.':
        cla
        'Текст первого варианта диалога'
       
        end

       act 'Второй вариант диалога.':
       cla
       'Текст второго варианта диалога'
       end
        
 То повторить то что я создал в массиве вообще не возможно.


5 комментариев:

  1. Спасибо за урок, как раз с ними сейчас 3 часа ковырялся, всё вродебы нормально, а однако белый экран

    ОтветитьУдалить
    Ответы
    1. Это может означать что переходы не правильные.

      act 'Кнопка.':gt'Название_локации','название_элемента_массива'

      проверяйте на соответствие. Тут и черточки важны и запятая. Команда $CURLOC с массивами работает не корректно, поэтому, что бы вернутся в массив нужно либо вручную ввести место куда входишь или та универсальная конструкция, что я предложил.

      Ну или сам массив не верно записан.
      if $ARGS[0]='любое_имя':
      end

      Удалить
  2. Имя и преходы правильно там, а вот $CURLOC, как раз и вызывал белый экран, до массивов приходилось кучу лок делать, если действий много было, а с массивом попроще))

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

      Удалить
  3. У меня уровень пока, корявости. Всё работает, но код очень коряво выглядит, а после этих уроков начал, править свои корявки

    ОтветитьУдалить