forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Такая лёгкая проблемма, а не как не получается... (http://forum.boolean.name/showthread.php?t=2937)

axel186 13.03.2007 00:35

Такая лёгкая проблемма, а не как не получается...
 
Вообщем проблемма вот в чём:

Есть боты, у каждого бота свой ID, если я нажимаю пробел то кадому боту посылается сообщение с его новыми кординатоми. Если приходит сообщение на ID (бота) каторого не существует, то создаём нового бота с таким ID.

Проблемма в том что я незнаю как провельно это риализовать :@...

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

я делал это примерно так, но так это не катит:

For A.Bot=Each Bot
If A\ID=ID then
Positionentity A\Model,X#,Y#,Z#
else
CreateBot()
endif
Next

Плиз хелп... Знаю тут решение лёгкое но до меня не как не доходит!! =((

Diplomat 13.03.2007 00:52

Re: Такая лёгкая проблемма, а не как не получается...
 
[blitz]IDExists=0
For A.Bot=Each Bot
If A\ID=ID then
IDExists=1
Positionentity A\Model,X#,Y#,Z#
endif
Next
IF IDExists=0 THEN CreateBot()[/blitz]
Ну, раз сам признался, что решение лёгкое, да еще и попытался что-то сам сделать, что нынче редкость- то и помочь не жалко. )) Еще б писал без ашипак и ачепятак- и вообще был бы золото чисто 585-й пробы, а не человек.
:-)

axel186 13.03.2007 01:06

Re: Такая лёгкая проблемма, а не как не получается...
 
ААА =)) Я В ШОКЕ =)) ВСё пашет =)) ОГРОМНОЕ СПАСИБО! 4 часа над этим сидел и чуть с ума не сошёл... Не доходило как сделать =) Тенкс.
А за опечатки сорри, пишу как могу =).
Ещё раз огромное спасибо (Нажал "ТЕНКС")! Тема может быть закрыта!

tormoz 13.03.2007 05:35

Re: Такая лёгкая проблемма, а не как не получается...
 
а вообще так делать - неправильно.

Нужно формировать пакет.
например первая цифра - назначение пакета:
например
1 удалить такого бота
2 создать бота
3 координаты
4 атака(выстрел)

и тд

второе значение - ИД бота
дальше уже по надобности.
То же самое делает сервер - создает свои пакеты.

Нужно тщательно продумать всю логику, потом уже писать код.

Platon 13.03.2007 09:55

Re: Такая лёгкая проблемма, а не как не получается...
 
А зачем здесь поле ID нужно? Есть же Handle() и без всяких переборов.
Когда создаешь бота - возвращаешь его порядковый номер в списке, который и будет являться ID:
Код:

A.Bot = New Bot
ID = Handle(A)

А когда нужно передвинуть бота - вытаскиваешь его из списка и двигаешь
Код:

A.Bot = Object.Bot(ID)
If (A <> Null) Then
  PositionEntity(A\Model, X, Y, Z)
Else
  CreateBot()
EndIf


Diplomat 13.03.2007 11:22

Re: Такая лёгкая проблемма, а не как не получается...
 
Он ведь явно сеть делает. IMHO, xендл будет "тяжел" для передачи.
Раз уж крутить структуру кода, то можно попробовать создать массив, хранящий хендлы, по принципу:
[blitz]DIM IDToHadle(NBots)
...
A.Bot = New Bot
NBot=NBot+1
IDToHandle(NBot) = Handle(A)
...
BotHandle=IDToHadle(ID)
A.Bot = Object.Bot(BotHandle)[/blitz]

tormoz 14.03.2007 03:25

Re: Такая лёгкая проблемма, а не как не получается...
 
Да нет.
При создании клиента, сервер присваивает каждому ИД в виде инт числа и отправляет его обратно клиенту. а тот запоминает.

И все.
Можно и так:
ID = Handle(A)
но это должен делать только сервер

Diplomat 14.03.2007 12:04

Re: Такая лёгкая проблемма, а не как не получается...
 
Гм, по алгоритмике-то ясно... никто ж не спорит о жизнеспособности схемы создания нового клиента по неизвестному ИД.
А я лишь имел ввиду, что неэкономично оперировать идентификаторами-Интами (в том числе хендлами, утрачивающими актуальность на уровне сети), если для ИД вполне достаточно байта.
Вряд ли у сервера будет более 256 клиентов, а у клиента более 256 управляемых юнитов (для стратегий)...

P.S. Меня не покидает ощущение, что все четыре учаснега топика говорят о разных вещах? А тебя?
:)

tormoz 14.03.2007 20:27

Re: Такая лёгкая проблемма, а не как не получается...
 
Реальная разница между байтом и 2 байтами вряд ли будет заметна.


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

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