Просмотр полной версии : Алгоритм расположения объектов
swfSlavik
19.08.2006, 16:40
У меня есть поле 6Х6 клеток или масив клеток (nXn в идеале) и мне нужно на нем розместить 4 разных клипа (М в идеале) случайным образом да так чтобы они не соприкасались друг з другом ни по строчка ни по колонкам. Это можно зделать тупо, а можна и елегантно :cool: . Помогите зделать елегантно.
DarkLight
19.08.2006, 16:45
А что для тебя есть тупо, что элегантно?
Первое, что приходит в голову, это рэндом через массивы [1, 2, ... n] сначала по горизонтали, потом по вертикали, из которых по мере установки клипа убираются неподходящие элементы...
swfSlavik
19.08.2006, 16:55
2 DarkLight. Мне тоже это первое в голову пришло. Но дело в том что их должно быть определеннре количество 9 одного типа 9 другого и так далее. Тоесть поле 6*6 = 36, а обектов 4 и по 9 каждого тоже 36.
DarkLight
19.08.2006, 17:05
А в чем проблема? Восстанавливаем массивы для каждого нового типа объектов, но уже без учета занятых клеток...
Snakesdesign
19.08.2006, 17:07
Если решать в общем виде (поле nXn и объектов в сумме M), всегда ли n*n=M? вот в чем вопрос... или их всегда 36? Ну короче всегда ли поле будет полностью заполнено объектами?
swfSlavik
19.08.2006, 17:27
2 Snakesdeign. Да поле должно быть всегда заполненно и обектов должно быит равное количество. Но проще решить пока задачу дл 6х6 и типов обектов 4 (36/4 = 9)
Snakesdesign
19.08.2006, 17:48
ну... чисто алгоритм без кода будет я думаю такой... создаем двумерный массив 6 на 6, обнуляем его. Делаем цикл, пока хотя бы один элемент = 0, а внутри цикла ходим по горизонтали и вертикали и вставляем объекты, учитывая что они не должны соприкасаться, это я думаю не очень сложно... если посидеть, то и код можно придумать...
swfSlavik
19.08.2006, 17:58
спасибо, у меня в принципе похожие мысли но как заставить положить ровно по 9 кождого обекта?
Snakesdesign
19.08.2006, 18:03
вложенным циклом думаю... while i<>9... а там в нем проверяем все, если например в текущюю ячейку ниче поставить не получится (занята например), то i не получает инкремент, а если вставляем, то получает... ну это так навскидку.. не уверен точно как это все будет выглядеть
swfSlavik
19.08.2006, 18:32
насколько я понял идею, должно быить 4 цикла или 4 масива для 4 типов обектов
Snakesdesign
19.08.2006, 18:36
в принципе да.. первый цикл - проверяем все ли заполнены, два цикла - ходят по вертикали и горизонтали, и еще один чтоб 9 объектов вставлялось... массивов... ну во флеше нет двумерных вроде, значит его заменяем на 2 одномерных, один массив - объектов и 1 - поле... вроде бы все
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.