 |
Русский TADS Русский TADS. Разработка текстовых игр на русском языке. Интерактивная литература. Второй форум находится здесь.
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Sancho
Зарегистрирован: 12.08.2004 Сообщения: 20 Откуда: IVANOVO
|
Добавлено: Ср Авг 25, 2004 11:43 pm Заголовок сообщения: Выборка. |
|
|
Требуется, проанализировав содержимое Me. contents, выбрать объекты принадлежащие классу container (или любому другому), и создать новый список mylist, содержащий одни контейнеры, которые в этот момент присутствуют у ГП..
listobj :object
mylist=[]
;
v :function
{
local i, j, n, list;
list:=Me.contents; n:=1;
j:=length(list);
for (i:=1; i<=j; i++; )
{
if (list[i]=...................) {listobj.mylist[n]:=list[i] ; n++;};
}
}
Как это реализовать, и не допустил ли я каких-нибудь ошибок?
Спасибо. |
|
Вернуться к началу |
|
 |
GrAnd Site Admin
Зарегистрирован: 04.02.2003 Сообщения: 299 Откуда: Россия, Москва
|
Добавлено: Пт Авг 27, 2004 5:59 pm Заголовок сообщения: |
|
|
Примерно, так (более общая функция):
listobj :object
mylist=[]
;
takeContlist: function(obj)
{
local list=[];
local i=1;
while(i<=length(obj.contents))
{
if (obj.contents[i].iscontainer)
list+=obj.contents[i];
i++;
}
return list;
}
Внутри какого-нибудь метода или функции:
listobj.mylist := takeContlist(Me); |
|
Вернуться к началу |
|
 |
Sancho
Зарегистрирован: 12.08.2004 Сообщения: 20 Откуда: IVANOVO
|
Добавлено: Сб Авг 28, 2004 1:27 am Заголовок сообщения: |
|
|
Спасибо, понятно, а вот допустим все кроме контейнеров?
if (obj.contents[i].iscontainer=nil) ?
Ведь атрибут iscontainer определен только в контейнерах, в item и thing я этого свойства не нашел, не вызывет ли ошибку? Я спрашиваю не потому что мне лень попробывать, я хочу понять.. а то я одним ухом понимаю, а другим чего-то не совсем . А потом когда выскакивает ошибка я думаю, или я где-то опечатался и недосмотрел или ошибочно пологаю, что код должен работать.. не хватает начальных знаний!
А вот такой способ:
takeContlist: function(obj)
{
local list=obj.contents;
local i=1;
while(i<=length(obj.contents))
{
if (obj.contents[i].iscontainer)
list-=obj.contents[i];
i++;
}
return list;
}
Только объясни пожалуйста где я ошибся и почему это не верно.
Спасибо. |
|
Вернуться к началу |
|
 |
GrAnd Site Admin
Зарегистрирован: 04.02.2003 Сообщения: 299 Откуда: Россия, Москва
|
Добавлено: Сб Авг 28, 2004 2:57 am Заголовок сообщения: |
|
|
Sancho писал(а): | Спасибо, понятно, а вот допустим все кроме контейнеров?
if (obj.contents[i].iscontainer=nil) ?
Ведь атрибут iscontainer определен только в контейнерах, в item и thing я этого свойства не нашел, не вызывет ли ошибку? |
Нет, ошибки не будет. Все неопределеные свойства равны nil.
Твой код, навскиду верен. Какая возникает ошибка? |
|
Вернуться к началу |
|
 |
Sancho
Зарегистрирован: 12.08.2004 Сообщения: 20 Откуда: IVANOVO
|
Добавлено: Сб Авг 28, 2004 3:06 am Заголовок сообщения: |
|
|
> мне сначало захотелось улучшить ответы компа на комманды игрока (например не "ВЗЯТ", а ""<<ZAG(parserGetMe(),&sdesc)>> взя";ok( ob[i],'ли','л','ло','ла');" в руки <<self.vdesc>>."; ..ну и т.п.),
лучше: взял<<iao(parserGetMe())>>
> Короче занялся интерфейсом.. ..заразное это дело , вот и не знаю когда до самой игры доберусь.
Знакомо
>А вообще я твердо намерен изучить эту систему, если ты мне в этом поможешь буду очень признателен.. Еще раз спасибо.
Всегда пожалуйста! |
|
Вернуться к началу |
|
 |
Sancho
Зарегистрирован: 12.08.2004 Сообщения: 20 Откуда: IVANOVO
|
Добавлено: Сб Авг 28, 2004 5:01 pm Заголовок сообщения: |
|
|
Тфу блин, а я сначало испугался.. ..подумал глюк какой. А ты мою мессагу отрегил..  |
|
Вернуться к началу |
|
 |
GrAnd Site Admin
Зарегистрирован: 04.02.2003 Сообщения: 299 Откуда: Россия, Москва
|
Добавлено: Вс Авг 29, 2004 2:16 am Заголовок сообщения: |
|
|
Да, извини, напортачил  |
|
Вернуться к началу |
|
 |
Sancho
Зарегистрирован: 12.08.2004 Сообщения: 20 Откуда: IVANOVO
|
Добавлено: Вс Авг 29, 2004 9:29 pm Заголовок сообщения: |
|
|
А вот такая встроенная функция: isclass(object , class) ???
Если subclass это то-же, что и наследник, тогда возвращает true, если объект object является наследником класса class.. если я конечно правильно понял, то она более универсальна, чем использовать флаги!?
if (isclass(obj.contents[i] , container)) ... |
|
Вернуться к началу |
|
 |
GrAnd Site Admin
Зарегистрирован: 04.02.2003 Сообщения: 299 Откуда: Россия, Москва
|
Добавлено: Пн Авг 30, 2004 12:31 am Заголовок сообщения: |
|
|
Sancho писал(а): | А вот такая встроенная функция: isclass(object , class) ???
Если subclass это то-же, что и наследник, тогда возвращает true, если объект object является наследником класса class.. если я конечно правильно понял, то она более универсальна, чем использовать флаги!?
if (isclass(obj.contents[i] , container)) ... |
А если у тебя есть класс liquidContainer (контейнер для жидкостей), то, пускай он даже потомок класса container, проверка класса покажет, что объект не является контейнером. Так что, подход с флагами более общий. |
|
Вернуться к началу |
|
 |
Sancho
Зарегистрирован: 12.08.2004 Сообщения: 20 Откуда: IVANOVO
|
Добавлено: Пн Авг 30, 2004 3:22 am Заголовок сообщения: |
|
|
А если мне нужны только именно обычные контейнеры?, ведь liquidContainer наследует флаг от сontainer, ведь так?
Я наверное не так выразился, я имел ввиду некую пунктуальность, а не то, что она является более общей. Можно отобрать конкретный класс, и не важно есть у него флаг или нет. Ведь реч идет не только про контейнеры.. Кстати ты пробовал эту ф-цию, я ее в том-же инглиш-мануале нашел, а переводить толком не переводил, да и не пробывал еще? |
|
Вернуться к началу |
|
 |
GrAnd Site Admin
Зарегистрирован: 04.02.2003 Сообщения: 299 Откуда: Россия, Москва
|
Добавлено: Пн Авг 30, 2004 1:40 pm Заголовок сообщения: |
|
|
Да, я иногда пользуюсь этой функцией.
Кстати, по-моему, isclass указывает на принадлежность объекта к классу, даже если он является его потомком.
Т.е. isclass(liquidConteiner, container) будет истиной. |
|
Вернуться к началу |
|
 |
|
|
Вы можете начинать темы Вы можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group
|