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=4009)

IGR 26.07.2007 15:15

помогите розставить АПТЕЧКИ
 
есть 2-мерный масив скоординатами по Х и У.
в масиве 15 значений т.е. Dim(15,2).
есть 5 аптечек которые должны случайно аоявлятся в одной из позиции которая задана в масиве т.е. PositionEntity apteka, masiv(rand(0,14),0),0,masiv(rand(0,14),1).
но проблема в том что бы они не появлялись в одном и том же месте !!

Xander 26.07.2007 15:23

Re: помогите розставить АПТЕЧКИ
 
попробуй забивать ячейку массива 1 - забито, 0 - нет. И проверять...

Идея сумбурна ногами не пинать (

IGR 26.07.2007 15:27

Re: помогите розставить АПТЕЧКИ
 
чёто не понял : масив сделать 3-х мерным для етогоже обозначения (занято - пусто) или ещо новый сосдать ??

moka 26.07.2007 15:44

Re: помогите розставить АПТЕЧКИ
 
А что массив то? У тебя masiv(rand(0,14),1)=какойто пивот? Если да тогда так:
PositionEntity apteka,entityx(masiv(rand(0,14),0)),0,entityz(masi v(rand(0,14),1))

Platon 26.07.2007 15:49

Re: помогите розставить АПТЕЧКИ
 
IGR
Да, лучше сделать еще 1 массив если первый массив как флоат#, или дополнительное измерение если первый массив целочисленный, и проверять 1\0
ЗЫ
А вообще аптечки и проч фигню лучше расставлять в редакторах :)

Raiter 26.07.2007 16:07

Re: помогите розставить АПТЕЧКИ
 
Редактор конечно рулит, но можно сделать очень просто. При добавлении новой аптечки, проганяй все уже созданные и проверяй не совпадают ли координаты. Если совпадают, то Goto на начало создания :)

moka 26.07.2007 16:09

Re: помогите розставить АПТЕЧКИ
 
Raiter, и того если у нас будет около 1000 мест, и 999 оптечек, блиц будет искать этот 1. :)
Нада в корне проверять.

Raiter 26.07.2007 16:15

Re: помогите розставить АПТЕЧКИ
 
Чел ить сказал конкретно, что у него 5 аптечек :) При таком количестве это очень простой выход из ситуации. Но вообще конечно же нужно всё это в редакторе делать.

alcoSHoLiK 26.07.2007 16:23

Re: помогите розставить АПТЕЧКИ
 
Чтобы не попадать на уже использованные данные из массива координат, создай массив индексов. Одномерный массив на 15 элементов, который содержит индекс от 0 до 14. Есть два варианта:

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

2. Заполнять массив индексов случайными числами (проверяя, чтобы не было совпадений). Тогда потом достаточно пройтись последовательно по элементам массива и расставить аптечки.

IGR 26.07.2007 19:03

Re: помогите розставить АПТЕЧКИ
 
to alcoSHoLiK:
смысл 2-го способа не понял вообще !!
а первый не до конца понял как реализовать !! ТИПА: "...по индексу идет обращение к массиву координат." !!

alcoSHoLiK 26.07.2007 19:24

Re: помогите розставить АПТЕЧКИ
 
Код:

const NUM_HEALTH_PACKS = 15

Dim health_packs#(NUM_HEALTH_PACKS,2)
Dim health_indices(NUM_HEALTH_PACKS)

1.
Код:

Function PlaceHealthPacks(num%)
        For i = 1 To NUM_HEALTH_PACKS
                health_indices(i) = i
        Next
        available_indices = NUM_HEALTH_PACKS

        For i = 1 To num
                index = rand(1, available_indices)
                CreateHealthPack(health_indices(index))
                For j = index To available_indices - 1
                        health_indices(j) = health_indices(j + 1)
                Next
                available_indices = available_indices - 1
        Next
End Function

Function CreateHealthPack(index%)
        ; тут создается модель
        PositionEntity pack, health_packs(index, 1), health_packs(index, 2), 0
End Function

2.
Код:

Function PlaceHealthPacks(num%)
        For i = 1 to NUM_HEALTH_PACKS
                health_indices(i) = rand(1, NUM_HEALTH_PACKS)
                ; добавить проверку, чтобы индексы не повторялись
        Next

        For i = 1 To num
                CreateHealthPack(health_indices(i))
        Next
End Function


IGR 27.07.2007 13:08

Re: помогите розставить АПТЕЧКИ
 
а если так:

type apt
field ent,num
end type

Dim aptPOZ(15,3)

function CRT_apt()
n=Rand(0,14)
if aptPOZ(n,2)=0
aptPOZ(n,2)=1
a.apt = new apt
a\ent = createcube()
positionentity a\ent,aptPOZ(n,0),0,aptPOZ(n,1)
a\num = n
endif
end function

проверьте кто может !!
а то я не могу у меня с компом проблемы !!

IGR 27.07.2007 16:51

Re: помогите розставить АПТЕЧКИ
 
ну
Цитата:

помогите розставить АПТЕЧКИ

Raiter 27.07.2007 17:06

Re: помогите розставить АПТЕЧКИ
 
IGR, если у тебя не получается реализовать способы с индексами, делай, как я говорил....

IGR 27.07.2007 17:10

Re: помогите розставить АПТЕЧКИ
 
ну дык, то что в 12 посте работать будет ??


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

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