- PVSM.RU - https://www.pvsm.ru -
Прочитав статью про excel в 30 строк [1] я загорелся глупой идеей — написать что-нибудь на 30 строк, не долго думая остановился на змейке [2]
Особенности:
.png)
Вот фиддл [3]
И сам код:
(function(width, height, length, current, dx, dy, x, y, hasFood, newEl){
document.body.onkeydown = function(e){
dx = (e.keyCode - 38) % 2, dy = (e.keyCode - 39) % 2;
};
var timer = setInterval(function () {
x = (x + dx) < 0 ? width - 1 : (x + dx) % width;
y = (y + dy) < 0 ? height - 1 : (y + dy) % height;
newEl = document.getElementsByClassName(y + '_' + x)[0]
if(newEl.className.indexOf('s') > 0) {
clearInterval(timer), alert('Game Over! Score: ' + length)
};
if(newEl.className.indexOf('f') > 0) {
newEl.className = newEl.className.replace(' f', ''), length++, hasFood = false;
}
newEl.className += ' s', newEl.setAttribute('data-n', current++);
for(var i = 0, min = Infinity, item, items = document.getElementsByClassName('s'), len = items.length; i < len && len > length; i++)
if(+items[i].getAttribute('data-n') < min)
min = +items[i].getAttribute('data-n'), item = items[i];
if(!!item) item.className = item.className.replace(' s', '');
for(var fItem, fX, fY; !hasFood; fX = Math.round(Math.random() * 10 % width), fY = Math.round(Math.random() * 10 % height))
if(!!fX && !!fY && document.getElementsByClassName(fY + '_' + fX)[0].className.indexOf('s') < 0)
hasFood = true, document.getElementsByClassName(fY + '_' + fX)[0].className += ' f';
}, 1000);
})(10, 10, 5, 1, 1, 0, 0, 0, false, null);
Признаюсь, я немного сэкономил, опустив код, которым я сгенерировал разметку. Да и сам подход, весьма и весьма плох, но все-таки в 30 строк я уложился.
Пару слов про «алгоритм» (понимаю, что читать этот «код» в Воскресение никому не захочется):
Не судите код строго и хороших Вам выходных!
Автор: DjComandos
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/48546
Ссылки в тексте:
[1] статью про excel в 30 строк: http://habrahabr.ru/post/202304/
[2] змейке: http://ru.wikipedia.org/wiki/Snake_(%D0%B8%D0%B3%D1%80%D0%B0)
[3] фиддл: http://jsfiddle.net/Uk2PP/9/
[4] Источник: http://habrahabr.ru/post/202476/
Нажмите здесь для печати.