RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2424596 views

St-john
http://wiki.qsp.su/help:arrays
ты тут читал?

Edited at 07.11.2015 13:49 (10 years ago)

St-john,
в документации и на странице “разработчикам”.

Да, смотрел, но не понял зачем они нужны. Поэтому и прошу привести пример их полезности. Стоит вообще заморачиваться с их применением, и в каких случаях без них не обойтись? В этом плане вопрос.

Aleks Versus Moderator 07.11.2015 16:45 (10 years ago)

St-john,
если тебе нужно найти в массиве какой-то элемент, без этих функций не обойтись. Тот же пример вытягивания карты из колоды требует использования одной или нескольких этих функций. В каких ситуациях их использовать? В тех, где предполагается работать с массивами. Сортировка массива, вывод значений массива, сложение всех элементов массива и прочее прочее. Что ещё тут можно ответить? Пример использования? Пожалуйста.

Spoiler
! удаление из массива всех элементов, соответствующих определённому значению
$args[0] = $args[0] & ! имя массива
$args[1] = $args[1] & ! значение
args['size']=arrsize($args[0])
:for
if instr($args[0],'$')=1:
	args['pos']=arrpos($args[0],$args[1])
else
	args['pos']=arrpos($args[0],args[1])
end
if args['pos']!-1 and arrsize($args[0])>0 and args['size']>0:
	killvar $args[0],args['pos']
	args['size']-=1
	jump 'for'
end

Алекс, спасибо за ответ. Но пример немного сложноват пока для меня. Например, я не понял зачем в самом начале переменным присваивать свое же значение? И если нетрудно - дай построчную расшифровку твоего примера.

St-john,

MasterSet:

Есть массив “$уязвимость” и массив “$тип_вреда”, нужно чтобы программа узнала есть ли в этих массивах хотя бы одно совпадение значений.

Решение

Ладно, будем разбираться, на каком уровне массивы в игрушку вводить. А то может и самого элементарного хватит). Еще парочка вопросов:1 простенький, другой чуть посложнее. Несколько раз уже встречал в коде запись типа:
if material[$loc+’_’+$punkt]=1: act ‘Куча стройматериала!’ : gt’remont_start’.
Что означает запись внутри квадратных скобок?

Вопрос второй.
Сделал предмет, который можно взять и выложить в любой локации. Но получилось как-то громозко:
1) В инициализации переменных в самом начале: gitara_nahod=1
1)–– в локации-обработчике меню—:
-создал меню предмета с 1 переменным пунктом (взять-выложить) menugitara
2) В коде каждой локации разместил нужный предмет в зависимости от выполнения условия:
gs ‘локация-обработчик меню’
! В первой локации:
myloka=1
if gitara_nahod=1:
*p’<a href=“EXEC:menu’’menugitara’’”><img src=“img\items\gitara1.jpg”></a>’
end
! Во второй локации:
myloka=2
if gitara_nahod=2:
! и так далее
3)Создал 2 локации для обработки пунктов меню (взять-выложить)
4) В локации Взять:
addobj ‘Гитара’
gitara_nahod=0 (&! не отображается в комнате, пункт в меню объекта меняется на Выложить)
gt $curloc
5) В локации Выложить:
if myloka=1:gitara_nahod=1 & delobj ‘Гитара’
if myloka=2:gitara_nahod=2 & delobj ‘Гитара’ &! и так далее
6) В локации ONOBJSEL:
if selobj=‘Гитара’:
menu ‘menugitara’
unsel
end
Все работает, но как я уже говорил - все загромождается локациями если таких предметов много. Как упростить? Или никак?

Aleks Versus Moderator 08.11.2015 10:46 (10 years ago)

St-john,
Я ничего не понял из твоего кусочка кода. Вот чистый рабочий пример.

Алекс, вот пояснение к моему примеру. Отличия небольшие, но все же есть. Оба файлика качай и в одно место кинь :) gitara.qsp

Блин, хотел покрасивше сделать (( В общем, графический файл зовется - gitara1

Aleks Versus Moderator 08.11.2015 13:47 (10 years ago)

St-john,
Мне кажется у тебя сложнее. Приходится всё время следить за кучей переменных. (Быть может я просто ленив))) Там значение забудешь, там забудешь и всё. В какой-то локации не сработает.

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

Алекс, прокомментируй пожалуйста свой пример с массивом построчно - так мне проще понять его будет.
И сегодняшний вопрос, на который никто не ответил и который затеряется:
Несколько раз уже встречал в коде запись типа: if material[$loc+’_’+$punkt]=1: act ‘Куча стройматериала!’ : gt’remont_start’.
Что означает запись внутри квадратных скобок (что там с чем соединяется)?

St-john,
Ну, насколько мне помнится, здесь в переменной массива устанавливается значение для обращения:
Наглядный пример:

set $loc = 'лес'
 set $punkt = '1.1'
 if material[$loc+'_'+$punkt]=1: act 'Куча стройматериала!' : gt'remont_start'.

В итоге получается ячейка массива со значением: material[лес_1.1] и если в ячейке есть значение 1, то…
Дальше понятно)

Log in or Register to post comments.