forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   начать перебор не с первого элемента (http://forum.boolean.name/showthread.php?t=13986)

CRASHER 03.01.2011 02:34

начать перебор не с первого элемента
 
Есть цикл For ent.Entity= each entity
он должен остановится в какой то момент
записать последний entity и в следующий раз попадая на этот цикл начать перебор с entity на котором он остановился в последний раз. Такое ощущение что это просто и часто используется.

Ky3R_94 03.01.2011 03:29

Ответ: начать перебор не с первого элемента
 
Через Handle по идее нужно делать

Ну или введи дополнительное поле(ID например), если ещё с handle не работал. Так легче понять, по-моему.
При проходе цикла при выполнении данного условия (в тот самый "какой то момент") присваиваешь какой-либо временной переменной значение ID твоего объекта. И введи дополнительное условие в свой цикл, например
Код:

Есть цикл For ent.Entity= each entity
If ent\id>current_id then
.
.
.
end
next

Должно работать)

CRASHER 03.01.2011 04:02

Ответ: начать перебор не с первого элемента
 
Да точно, хендлы, вспомнил)) Спс)

DeeJex 03.01.2011 18:52

Ответ: начать перебор не с первого элемента
 
Какие нафиг хендлы
Код:

Local z.y
...
начало_главного_цикла
...
For x.y = Each y
If z<>Null Then x=z
...
Next
z = x
...
конец_главного_цикла


Crayzi 03.01.2011 21:08

Ответ: начать перебор не с первого элемента
 
Цитата:

Сообщение от DeeJex (Сообщение 174291)
Какие нафиг хендлы

оО, ты чё, Хендлы сила, если умееш пользоватся командами After,Type, New, Before, First, Last, Each, Insert, Delete,Handle и Object (позволяет сразу-же перейти типу с заданным хендлом)...
В его случае надо создать глобалку в которой будет хранится последний хендл и тот на котором он закончил поиск и далее спомощью пары манипуляций начинать перебор сразу с того места где он его закончил. Вот представь что у него в типе 2 000 объектов, добавилось 2, и изза этих 2-х перебирать все 2 002 объекта и проводить сравнение не разумно!
в его случае надо чёт типо такого:
Код:

Graphics 800,600,32,2


  Global HdlTec,HdlMax,Ft=CreateTimer(10)
  Type Buliga
      Field HP
  End Type
  CrBuligs(5)
  For OoO.Buliga = Each Buliga
      HdlTec=Handle(OoO)
      OoO\HP=Rand(1,100)
  Next
Repeat
  WaitTimer(Ft)
  If HdlTec<HdlMax
      While Not HdlTec=HdlMax
        jjj.Buliga=Object.Buliga(HdlTec)
        jjj = After jjj
        If Handle(jjj)
            HdlTec=Handle(jjj)
            jjj\HP=Rand(1,100)
        EndIf
      Wend
  Else
  CrBuligs(2)
  Print HdlMax
  Print HdlTec
  EndIf
 
If KeyHit(1) Then Quit=True
Until Quit
Function CrBuligs(Count%)
 Local bbb
 For bbb=1 To Count%
    NewBulg.Buliga=New Buliga
    HdlMax=Handle(NewBulg)
    NewBulg\HP=100
 Next
End Function

Перебор не с первого элемента находится в цикле Repeat>Until.
Цитата:

Сообщение от CRASHER (Сообщение 174227)
Такое ощущение что это просто и часто используется.

Ну как бы сказать, это используется часто, особенно если делаеш сервер)))(ну в моем случае), но там если допускаеш ошибку то долго ее искать, поэтому иногда это сложно)

DeeJex 03.01.2011 21:28

Ответ: начать перебор не с первого элемента
 
Думаешь я не знаю как Handle и Object работают?! Сравни мой и свой код. Нахера интовые хэндлы, если переменные пользовательского типа И ЕСТЬ ХЭНДЛЫ НА ОБЪЕКТЫ, блджад. Твой код будет работать гораздо медленнее.

Crayzi 03.01.2011 21:34

Ответ: начать перебор не с первого элемента
 
Цитата:

Сообщение от DeeJex (Сообщение 174314)
Думаешь я не знаю как Handle и Object работают?! Сравни мой и свой код. Нахера интовые хэндлы, если переменные пользовательского типа И ЕСТЬ ХЭНДЛЫ НА ОБЪЕКТЫ, блджад. Твой код будет работать гораздо медленнее.

Твой код будет выигрывать при количестве объектов в типе до сотни, а мой рассчитан на большое количество...
+ он просил функцию чтобы перебор щел с того момента де он закончил.
П.с. И как понимать фразу "интовые хендлы"?

DeeJex 03.01.2011 21:43

Ответ: начать перебор не с первого элемента
 
Цитата:

+ он просил функцию чтобы перебор щел с того момента де он закончил.
А я по-твоему что написал? Ты просто не понимаешь как работает мой код.
Цитата:

Твой код будет выигрывать при количестве объектов в типе до сотни
Клевета.
Цитата:

П.с. И как понимать фразу "интовые хендлы"?
Инт - целочисленный. Handle даёт порядковый номер объекта и тратит на это время. А переменные пользовательсокого типа содержат адрес участка памяти.
Код:

Local z.y ;Объявляем переменную z типа y
...
начало_главного_цикла
...
For x.y = Each y ;Цикл для x типа y
If z<>Null Then x=z ;Если z - это объект, Тогда идентификатор цикла x = z
...
Next
z = x ;z приравнивается x, когда выходим из цикла
...
конец_главного_цикла


Crayzi 03.01.2011 21:56

Ответ: начать перебор не с первого элемента
 
Цитата:

Сообщение от DeeJex (Сообщение 174320)
Ты просто не понимаешь как работает мой код.

Мои извенения, я просто не увидел как ты там все организовал, я просто подумал что у тя там обычный перебор со сравнениями)) а оказалось... то чего я незнал)
Блин, понял что делает, но никак не догоню как работает...

ffinder 03.01.2011 22:04

Ответ: начать перебор не с первого элемента
 
Цитата:

Сообщение от Crayzi (Сообщение 174310)
Ну как бы сказать, это используется часто, особенно если делаеш сервер)))

малята, писать сервер на блице это страшная ересь. есть технологии специально для этого предназначенные.

Crayzi 03.01.2011 22:07

Ответ: начать перебор не с первого элемента
 
Цитата:

Сообщение от ffinder (Сообщение 174327)
малята, писать сервер на блице это страшная ересь. есть технологии специально для этого предназначенные.

Те технологии надо изучать, и явно не в одиночку, а сервер на блитце, согласен ересь) но на более я на данный момент не способен :(

baton4ik 03.01.2011 22:11

Ответ: начать перебор не с первого элемента
 
Цитата:

Сообщение от Crayzi (Сообщение 174329)
Те технологии надо изучать, и явно не в одиночку, а сервер на блитце, согласен ересь) но на более я на данный момент не способен :(

Отмазки

Crayzi 03.01.2011 22:13

Ответ: начать перебор не с первого элемента
 
Цитата:

Сообщение от baton4ik (Сообщение 174330)
Отмазки

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

DeeJex 03.01.2011 22:15

Ответ: начать перебор не с первого элемента
 

Хочешь сделать нормальный сервер? Лень учить всякие сиплюсплюсы? Бери PureBasic, синтаксис почти такой же, производительность гораздо выше.

Crayzi 04.01.2011 00:28

Ответ: начать перебор не с первого элемента
 
Цитата:

Сообщение от DeeJex (Сообщение 174333)

Хочешь сделать нормальный сервер? Лень учить всякие сиплюсплюсы? Бери PureBasic, синтаксис почти такой же, производительность гораздо выше.

Я не говорил что лень, я уже много раз пытался разобратся в том же С++, но он мне не дается потому что там нет такой хорошей справки как в Блитз, где даны конкретные ответы и примеры использования функций, а не тупо описание вот ваша первая программа, выводит в маленькое окошко дэбильную надпись "Hello World", я такое и на ассемблере могу сделать, который посложнее будет, только наф?
В блитзе мне нравится не его простота, а то что про него много хороших мануалов.
П.с. За совет насчет пуре басика спс, попробую погуглить по нему. В нем либы подключаются так-же как и в блитзе? Будут ли там работать wrapper-ы для билтза?


Часовой пояс GMT +4, время: 01:09.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot