Как сделать?
…
Aleks Versus:
Если это система, при которой одни предметы вкладываются в другие, а щелчок по предмету выводит список вложенных в него, то тут есть простое решение.
А мне интересно, расскажи.
BiK,
Нужно создать несколько массивов. В грубом представлении это может выглядеть так:
$id_object[] - массив, в котором хранится уникальный идентификатор объекта
$name_object[] - массив, в котором хранится имя объекта, может не быть уникальным
$position_object[] - массив, в котором хранится позиция объекта.
Каждый новый объект - это запись во всех трёх массивах под одним индексом. Пример:
$id_object[0]="дкьм343а" & $name_object[0]="Сумка для пищи" & $position_object[0]=""
$id_object[1]="лои23и4к" & $name_object[1]="Сумка для воды" & $position_object[1]=""
$id_object[2]="42190кк7" & $name_object[2]="Кусочек пирога" & $position_object[2]="дкьм343а"
Чтобы “поместить” кусочек пирога в сумку для пищи, вписываем в $position_object[] кусочка пирога идентификатор сумки для пищи. Как в третьей строке. Остальное - дело техники.
Текущий уровень объектов указываем в переменной, например $floor. Самый верхний уровень в нашем примере будет, если $floor = “” (пустое значение). Далее пишем процедуру (подпрограмму, кусочек кода), которая будет очищать список “предметов” инвентаря и составлять его заново, назовём её int.inv для удобства. Можно оформить её на локации-обработчике события выбора предмета, но лучше отдельной локацией. В имени каждого “предмета”, который мы воспроизвели в списке, должен присутствовать уникальный идентификатор (скрыть идентификатор от игрока можно, поместив его в угловые скобки: objID:*дкьм343а*:objID - это так же позволит правильно распознать идентификатор в нужном месте).
Далее, при щелчке по предмету, в $selobj помещается его имя:
Сумка для пищиobjID:дкьм343а:objID
.
Локация-обработчик события “выбор предмета” получает идентификатор выделенного предмета из $selobj, и если предмет может содержать вложенные предметы, присваивает переменной $floor этот идентификатор, после чего обращается к int.inv. В int.inv происходит следующее:
1. очищается старый список “предметов” (killobj)
2. Если $floor не равно пустому значению, добавляется “предмет” для возврата, например BackobjID::objID. В угловых скобках - идентификатор объекта предыдущего уровня.
3. Выводится список предметов текущего уровня. То есть всех $position_object[] которых равен значению $floor.
Я запутался.
BiK,
хранить “предметы” не в “окне инвентаря”, а в массиве (массивах, таблице данных). Это основная мысль. Остальное - это, так сказать, мои личные наработки. Всё воплощено в механизм работы с объектами, но пока-что я не написал игру, чтобы показать всё это. Медленно продвигается, лентяй видишь ли.
Как сделать, чтобы предмет (записка, например) можно было использовать прямо в окне предметов: нажал на предмет - появилась строчка с действием “читать”, и после этого нажимаешь на него - и выводится текст в окно описания локации. Такое же было, по-моему, в Хронике борьбы с тараканами. Кажется, там используется какой-то оператор $use, но я не знаю, как его правильно использовать(
Меня тоже интересует этот вопрос,буду благодарен за ответ
add obj ‘Дневник’
$use_Дневник[0] = ‘Читать:дневник_читать’
Там было это, никто не знает, как такое сделать?
Спасибо огромное, получилось!!!
Благодарю,всё заработало :=D
Как сделать так, чтобы не писать условия игры в каждой локации(if a<0: gt’проиграл’ и т.д.), а создать одну локацию с условиями, код которой будет выполняться при переходах по локациям игры?
Используй $ONNEWLOC.
Спасибо
Умеет ли qsp работать с отрицательными числами а таккже дробами, например x Rand (-1, 1) и как сделать возможность Rand выдавать дробное чило, например 0.24. Этот вопрос возник в процессе работы над моей биржевой игрой.
