Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 26.07.2007, 15:15   #1
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
помогите розставить АПТЕЧКИ

есть 2-мерный масив скоординатами по Х и У.
в масиве 15 значений т.е. Dim(15,2).
есть 5 аптечек которые должны случайно аоявлятся в одной из позиции которая задана в масиве т.е. PositionEntity apteka, masiv(rand(0,14),0),0,masiv(rand(0,14),1).
но проблема в том что бы они не появлялись в одном и том же месте !!
(Offline)
 
Ответить с цитированием
Старый 26.07.2007, 15:23   #2
Xander
Оператор ЭВМ
 
Регистрация: 29.05.2007
Сообщений: 46
Написано 0 полезных сообщений
(для 0 пользователей)
Re: помогите розставить АПТЕЧКИ

попробуй забивать ячейку массива 1 - забито, 0 - нет. И проверять...

Идея сумбурна ногами не пинать (
(Offline)
 
Ответить с цитированием
Старый 26.07.2007, 15:27   #3
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Re: помогите розставить АПТЕЧКИ

чёто не понял : масив сделать 3-х мерным для етогоже обозначения (занято - пусто) или ещо новый сосдать ??
(Offline)
 
Ответить с цитированием
Старый 26.07.2007, 15:44   #4
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: помогите розставить АПТЕЧКИ

А что массив то? У тебя masiv(rand(0,14),1)=какойто пивот? Если да тогда так:
PositionEntity apteka,entityx(masiv(rand(0,14),0)),0,entityz(masi v(rand(0,14),1))
(Offline)
 
Ответить с цитированием
Старый 26.07.2007, 15:49   #5
Platon
Знающий
 
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений
(для 70 пользователей)
Re: помогите розставить АПТЕЧКИ

IGR
Да, лучше сделать еще 1 массив если первый массив как флоат#, или дополнительное измерение если первый массив целочисленный, и проверять 1\0
ЗЫ
А вообще аптечки и проч фигню лучше расставлять в редакторах
(Offline)
 
Ответить с цитированием
Старый 26.07.2007, 16:07   #6
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
Re: помогите розставить АПТЕЧКИ

Редактор конечно рулит, но можно сделать очень просто. При добавлении новой аптечки, проганяй все уже созданные и проверяй не совпадают ли координаты. Если совпадают, то Goto на начало создания
(Offline)
 
Ответить с цитированием
Старый 26.07.2007, 16:09   #7
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: помогите розставить АПТЕЧКИ

Raiter, и того если у нас будет около 1000 мест, и 999 оптечек, блиц будет искать этот 1.
Нада в корне проверять.
(Offline)
 
Ответить с цитированием
Старый 26.07.2007, 16:15   #8
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
Re: помогите розставить АПТЕЧКИ

Чел ить сказал конкретно, что у него 5 аптечек При таком количестве это очень простой выход из ситуации. Но вообще конечно же нужно всё это в редакторе делать.
(Offline)
 
Ответить с цитированием
Старый 26.07.2007, 16:23   #9
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: помогите розставить АПТЕЧКИ

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

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

2. Заполнять массив индексов случайными числами (проверяя, чтобы не было совпадений). Тогда потом достаточно пройтись последовательно по элементам массива и расставить аптечки.
(Offline)
 
Ответить с цитированием
Старый 26.07.2007, 19:03   #10
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Re: помогите розставить АПТЕЧКИ

to alcoSHoLiK:
смысл 2-го способа не понял вообще !!
а первый не до конца понял как реализовать !! ТИПА: "...по индексу идет обращение к массиву координат." !!
(Offline)
 
Ответить с цитированием
Старый 26.07.2007, 19:24   #11
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
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
(Offline)
 
Ответить с цитированием
Старый 27.07.2007, 13:08   #12
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
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

проверьте кто может !!
а то я не могу у меня с компом проблемы !!
(Offline)
 
Ответить с цитированием
Старый 27.07.2007, 16:51   #13
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Re: помогите розставить АПТЕЧКИ

ну
помогите розставить АПТЕЧКИ
(Offline)
 
Ответить с цитированием
Старый 27.07.2007, 17:06   #14
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
Re: помогите розставить АПТЕЧКИ

IGR, если у тебя не получается реализовать способы с индексами, делай, как я говорил....
(Offline)
 
Ответить с цитированием
Старый 27.07.2007, 17:10   #15
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Re: помогите розставить АПТЕЧКИ

ну дык, то что в 12 посте работать будет ??
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аптечки - боеприпасы Petrofan 3D-программирование 3 02.02.2009 21:28


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com