Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.04.2013, 19:01
Новичок на форуме
Отправить личное сообщение для sinkalexęą Посмотреть профиль Найти все сообщения от sinkalexęą
 
Регистрация: 23.04.2013
Сообщений: 1

JavaScript проход лабиринта
Всем доброго времени дня! Вот занимаюсь созданием JavaScript генератора лабиринтов. Сам код был найден на rossete, я его подстраиваю под себя. У меня возникла задачка создать лабиринту поле прохождения. Подкиньте идею с чего нужно начинать програмить это поле, мне не нужен готовый код, спасибо!

HTML
<div id="labirint">
<form style="text-align:center" name="forma1" autocomplete="on">
	<table style="margin:0 auto;">
		<tr>
			<td style="float:right;">Высота:</td>
			<td><input type="text" id="vis" name="height" autofocus="autofocus" maxlength="2" size="6" /></td>
		</tr>
		<tr>
			<td style="float:right;">Ширина:</td>
			<td><input type="text" id="shir" name="width"  maxlength="2" size="6" /></td>
	<br>
	</table
</form>
<input type="button" alt="submit" onClick="dannie();" value="Новый" style="margin-top:10px;" >
</div>
<pre id="out"></pre>


JavaScript
function dannie(){

	var visota = parseInt(document.getElementById("vis").value);
    var shirina = parseInt(document.getElementById("shir").value);
	
	document.getElementById('out').innerHTML = display(maze(visota,shirina));
}

function maze(x,y) {
	var n=x*y-1;
	if (n<0) {alert("Плохие данные");return;}
	var horiz=[]; 
		for (var j= 0; j<x+1; j++) horiz[j]= [];
	var verti=[]; 
		for (var j= 0; j<y+1; j++) verti[j]= [];
		
	var here= [Math.floor(Math.random()*x), Math.floor(Math.random()*y)];
	var path= [here];
	var unvisited= [];
	for (var j= 0; j<x+2; j++) {
		unvisited[j]= [];
		for (var k= 0; k<y+1; k++)
			unvisited[j].push(j>0 && j<x+1 && k>0 && (j != here[0]+1 || k != here[1]+1));
	}
	while (0<n) {
		var potential= [[here[0]+1, here[1]], [here[0],here[1]+1],
		    [here[0]-1, here[1]], [here[0],here[1]-1]];
		var neighbors= [];
		for (var j= 0; j < 4; j++)
			if (unvisited[potential[j][0]+1][potential[j][1]+1])
				neighbors.push(potential[j]);
		if (neighbors.length) {
			n= n-1;
			next= neighbors[Math.floor(Math.random()*neighbors.length)];
			unvisited[next[0]+1][next[1]+1]= false;
			if (next[0] == here[0])
				horiz[next[0]][(next[1]+here[1]-1)/2]= true;
			else 
				verti[(next[0]+here[0]-1)/2][next[1]]= true;
			path.push(here= next);
		} else 
			here= path.pop();
	}
	return ({x: x, y: y, horiz: horiz, verti: verti});
}
 
function display(m) {
	var text= [];
	for (var j= 0; j<m.x*2+1; j++) {
		var line= [];
		if (0 == j%2)
			for (var k=0; k<m.y*4+1; k++)
				if (0 == k%4) 
					line[k]= 'X';
				else
					if (j>0 && m.verti[j/2-1][Math.floor(k/4)])
						line[k]= ' ';
					else
						line[k]= 'X';
		else
			for (var k=0; k<m.y*4+1; k++)
				if (0 == k%4)
					if (k>0 && m.horiz[(j-1)/2][k/4-1])
						line[k]= ' ';
					else
						line[k]= 'X';
				else
					line[k]= ' ';
		if (0 == j) line[1]=line[3]=' ',line[2]= '1';
		if (m.x*2-1 == j) line[4*m.y]= '2';
		text.push(line.join('')+'\r\n');
		
	}
	return text.join('');
}
Ответить с цитированием
  #2 (permalink)  
Старый 07.12.2013, 13:29
Профессор
Отправить личное сообщение для alexan0308 Посмотреть профиль Найти все сообщения от alexan0308
 
Регистрация: 11.04.2011
Сообщений: 207

Спасибо, чувак, за код. Кода я тоже не понял, но главное понял, как мне его использовать ))
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книга: JavaScript. Сильные стороны Magneto Учебные материалы 16 21.04.2013 15:28
Интерпретатор Java на JS kobezzza Оффтопик 24 11.10.2012 18:32
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 15:23
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34