Список форумов Русский TADS Русский TADS
Русский TADS. Разработка текстовых игр на русском языке. Интерактивная литература.
Второй форум находится здесь.
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Выборка.

 
Начать новую тему   Ответить на тему    Список форумов Русский 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);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Sancho



Зарегистрирован: 12.08.2004
Сообщения: 20
Откуда: IVANOVO

СообщениеДобавлено: Сб Авг 28, 2004 1:27 am    Заголовок сообщения: Ответить с цитатой

Спасибо, понятно, а вот допустим все кроме контейнеров?
if (obj.contents[i].iscontainer=nil) ?
Ведь атрибут iscontainer определен только в контейнерах, в item и thing я этого свойства не нашел, не вызывет ли ошибку? Я спрашиваю не потому что мне лень попробывать, я хочу понять.. а то я одним ухом понимаю, а другим чего-то не совсем Very Happy . А потом когда выскакивает ошибка я думаю, или я где-то опечатался и недосмотрел или ошибочно пологаю, что код должен работать.. не хватает начальных знаний!

А вот такой способ:

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.

Твой код, навскиду верен. Какая возникает ошибка?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Sancho



Зарегистрирован: 12.08.2004
Сообщения: 20
Откуда: IVANOVO

СообщениеДобавлено: Сб Авг 28, 2004 3:06 am    Заголовок сообщения: Ответить с цитатой

> мне сначало захотелось улучшить ответы компа на комманды игрока (например не "ВЗЯТ", а ""<<ZAG(parserGetMe(),&sdesc)>> взя";ok( ob[i],'ли','л','ло','ла');" в руки <<self.vdesc>>."; ..ну и т.п.),

лучше: взял<<iao(parserGetMe())>>


> Короче занялся интерфейсом.. Rolling Eyes ..заразное это дело Smile , вот и не знаю когда до самой игры доберусь.

Знакомо Smile

>А вообще я твердо намерен изучить эту систему, если ты мне в этом поможешь буду очень признателен.. Еще раз спасибо. Cool

Всегда пожалуйста!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Sancho



Зарегистрирован: 12.08.2004
Сообщения: 20
Откуда: IVANOVO

СообщениеДобавлено: Сб Авг 28, 2004 5:01 pm    Заголовок сообщения: Ответить с цитатой

Тфу блин, а я сначало испугался.. Laughing ..подумал глюк какой. А ты мою мессагу отрегил.. Very Happy
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
GrAnd
Site Admin


Зарегистрирован: 04.02.2003
Сообщения: 299
Откуда: Россия, Москва

СообщениеДобавлено: Вс Авг 29, 2004 2:16 am    Заголовок сообщения: Ответить с цитатой

Да, извини, напортачил Embarassed
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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, проверка класса покажет, что объект не является контейнером. Так что, подход с флагами более общий.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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) будет истиной.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Русский TADS -> Русифицированный ТАДС Часовой пояс: GMT + 4
Страница 1 из 1

 
Перейти:  
Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group