Comments 5
Этот код и его собраться тридцатистрочники напрочь лишены эстетики. Такими методами jQuery в 3 строки написан.
У алгоритма есть маленький такой недостаток: иногда персонаж (красный квадратик) попадает в замкнутую область, откуда нет выхода. Пример:

А по сути кода — не использованы техники оптимизации и улучшения читаемости. Часть переменных — в глобале.Очень много раз встречается магические "+ 3" (значит, алгоритм не доведён до качества). В малострочниках, скорее всего, важна лаконичность сути, чем физическое число строк, а тут видно, что код сыроват, хотя это не умаляет проделанную автором работу. И зачем сокращать имена в 30 строчках? Это отлично проделает сжиматель типа closure-compiler.appspot.com/home, а так — просто ухудшает читаемость.
Небольшая доработка: jsfiddle.net/spmbt/W54f6/348/ (с той же читабельностью; специально убраны некоторые несжимаемые обфускатором слова)
И ничем не худший однострочник:

А по сути кода — не использованы техники оптимизации и улучшения читаемости. Часть переменных — в глобале.Очень много раз встречается магические "+ 3" (значит, алгоритм не доведён до качества). В малострочниках, скорее всего, важна лаконичность сути, чем физическое число строк, а тут видно, что код сыроват, хотя это не умаляет проделанную автором работу. И зачем сокращать имена в 30 строчках? Это отлично проделает сжиматель типа closure-compiler.appspot.com/home, а так — просто ухудшает читаемость.
Небольшая доработка: jsfiddle.net/spmbt/W54f6/348/ (с той же читабельностью; специально убраны некоторые несжимаемые обфускатором слова)
И ничем не худший однострочник:
(function t(c,d,k,b,r,m){function s(a,b){var c=e.getImageData(13*h+7+6*a,13*l+7+6*b,1,1);0==c.data[0]&&0==c.data[1]&&0==c.data[2]&&255==c.data[3]?a=b=0:m("#step").innerHTML++;e.clearRect(13*h+3,13*l+3,10,10);h+=a;l+=b;e.fillRect(3+13*h,3+13*l,10,10);h>=d&&t("#canvas",d,k,0,r+1)}c=m(c);var e=c.getContext("2d");m("#step").innerHTML=b;m("#complete").innerHTML=r;e.fillStyle="black";e.fillRect(0,0,c.width=13*d+3,c.height=13*k+3);b=[d];c=[d];for(var g=0,n=[d],u=1,a,f;g<k;g++){for(a=0;a<d;a++)0==g&&(b[a]= 0),e.clearRect(13*a+3,13*g+3,10,10),n[a]=0,1==c[a]&&(c[a]=b[a]=0),0==b[a]&&(b[a]=u++);for(a=0;a<d;a++){n[a]=0|2*Math.random();c[a]=0|2*Math.random();if((0==n[a]||g==k-1)&&a!=d-1&&b[a+1]!=b[a]){var q=b[a+1];for(f=0;f<d;f++)b[f]==q&&(b[f]=b[a]);e.clearRect(13*a+3,13*g+3,15,10)}g!=k-1&&0==c[a]&&e.clearRect(13*a+3,13*g+3,10,15)}for(p=a=q=0;a<d;a++){for(f=0;f<d;f++)b[a]==b[f]&&0==c[f]?p++:q++;0==p&&(c[a]=0,e.clearRect(13*a+3,13*g+3,10,15))}}e.clearRect(13*d,3,15,10);var h=0,l=0;e.fillStyle="red";s(-1, -1);document.body.onkeydown=function(a){36<a.keyCode&&41>a.keyCode&&s((a.keyCode-38)%2,(a.keyCode-39)%2)}})("#canvas",25,30,0,0,function(v){return document.querySelector(v)});
Очень странный скрин))) Замкнутые области возникали только когда не было прописано следующее:
В ссылке на Fiddle такого не было и нету. Да и с переменной шагов что-то странное твориться. Тот пример скрина который приведен, явно после каких-то изменений. Текущая версия по ссылке без косяков.
Замечания и доработку учту, ознакомлюсь и приму к сведению. Спасибо!
Магическая "+3" — это ширина стенки и без переменной — ради уменьшения строк))) Опять же мухлеж. В первой версии она была как параметр функции, но я ее убрал. Там вообще много магических чисел)))
Да и с доработкой твоей правда что-то не то. Замкнутые области повсюду.
// Проверка на замкнутые области.
for (i = 0; i < c; i++) {
var p = l = 0;
for (j = 0; j < c; j++) a[i] == a[j] && 0 == b[j] ? p++ : l++;
0 == p && (b[i] = 0, d.clearRect(13 * i + 3, 13 * cr_l + 3, 10, 15))
}
В ссылке на Fiddle такого не было и нету. Да и с переменной шагов что-то странное твориться. Тот пример скрина который приведен, явно после каких-то изменений. Текущая версия по ссылке без косяков.
Замечания и доработку учту, ознакомлюсь и приму к сведению. Спасибо!
Магическая "+3" — это ширина стенки и без переменной — ради уменьшения строк))) Опять же мухлеж. В первой версии она была как параметр функции, но я ее убрал. Там вообще много магических чисел)))
Да и с доработкой твоей правда что-то не то. Замкнутые области повсюду.
Sign up to leave a comment.
Генерация лабиринтов алгоритмом Эйлера в 30 строк