Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Генерация блоков (https://javascript.ru/forum/misc/39692-generaciya-blokov.html)

skrudjmakdak 08.07.2013 16:05

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

skrudjmakdak 08.07.2013 16:06

либо ваш game_area не делать фиксированной высотой, а делать динамичным

IVAAAAN 08.07.2013 16:13

я же код не прошу, просто подскажите как вычислить можно))

skrudjmakdak 08.07.2013 16:19

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

IVAAAAN 08.07.2013 16:23

Цитата:

Сообщение от skrudjmakdak (Сообщение 261034)
да тут сразу в голову и не придет как это все реализовать. написать можно, но это все таки дело времени. и я думаю что за даром вам мало кто поможет.. может и найдутся добрые люди))

ладно, буду думать сам. если додумаюсь, то сюда выложу, может пригодиться кому-то

ruslan_mart 08.07.2013 16:26

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

skrudjmakdak 08.07.2013 16:27

ну это уже не равномерное распределение..

IVAAAAN 08.07.2013 19:51

function rand(min, max){
   return Math.floor(Math.random() * (max - min + 1)) + min;
}
function maxArray(array	){
	return Math.max.apply( Math, array );
}
function generate(){
	var size, margins, level; //размер блока с числом, отступы между блоками, уровень
	var margins = [];
		level=10; //уровень

	for(var i = level;i<level+level+1;i++){ //заносим сгенерированые отступы в массив
		margins.push(rand(1,300));
	}
	
	for(var i = 0; i<margins.length;i++){ //сравниваем дабы избежать пересечений
		if(maxArray(margins)==margins[0]){
		margins.reverse();
	}
	var m =maxArray(margins)-margins[i];

	if(m<=10){

		$("#debug").html('Результат: блоки пересекутся;<br>Максимальный отступ: '+maxArray(margins)+'; <br>Разница: '+m + '<br>Числа:' + margins);
		
	}
	else{
		size = rand(50,100);
		$("#game_area").append('<div class="num'+i+'">'+rand(1,10) + '</div>');
		$(".num"+i).css({
			'position':'absolute',
			'width': size,
			'height': size,
			'border-radius': size+1,
			'top':margins[rand(0, margins.length)],
			'left':margins[rand(0, margins.length)],
			'border':'1px solid #ccc'
		});
$("#debug").html('Результат: блоки не пересекутся;<br>Максимальный отступ: '+maxArray(margins)+'; <br>Разница: '+m + '<br>Числа:' + margins);
	}
		
		
	}
	
}


ну вот, что-то я наговнокодил, работает наполовину. т.е сравнение идет по left(x), т.е по координате x все ок, они не пересекаются, а по координате y(top) бывает пересекаются. как поправить ума не приложу :blink:


Часовой пояс GMT +3, время: 21:59.