Как стать автором
Обновить

Комментарии 44

НЛО прилетело и опубликовало эту надпись здесь
Извиняюсь перед читателями, просто уже был третий час ночи — не было сил писать. Сейчас исправлюсь!
Утро вечера мудренее (с) Народная мудрость
НЛО прилетело и опубликовало эту надпись здесь
Да я это и сам понимаю… и так то код не совсем честный на 30 строк. Боролся между двумя чувствами — сделать код покороче и не совсем страшным в плане оформления. В итоге ни то, ни другое не выдержал.
а где длинная??? я ее так ждал…
НЛО прилетело и опубликовало эту надпись здесь
Игорь, у вас ведь так же?

image
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Так, что там ещё осталось из потенциально 30-строчного… Жизнь, шашки, сапёр, морской бой, судоку…
Пора сделать минусатор постов «XXX на JS на 30 строк» на 30 строк JS.
split (в данном случае) это читерство.
Вообще код без 'use strict' не считается.

Скоро начнут постить код «Anything-you-want на javascript в одну+ строку»
А в титрах благодарности пакеру Дина Эдвардса
Ну а как без split`а еще задавать фигуки?! Получился бы 3-х мерный массив!
Хотя, конечно, можно было задать фигурки где-нибудь в html, но это было бы такое же читерство.

Я так долго ждал линию…
Довольно быстро появилась
Фигуры выбираются рандомом, а это значит что запросто возможна ситуация если за всю игру вообще ни разу не появится.
Я уверен, в коде зашифрована проверка на необходимость линии. И не пытайтесь оспорить это.
Ок, даже рыпаться не стану )))
Тетрамино как-то неканонично поворачиваются. Плюс зависимость скорости движения от системной настройки скорости повтора символов напрягает (та же проблема была с пинг-понгом, но там вообще играть невозможно).
Классно. Только есть замечание по работе кнопки Вниз. Если ее зажать, то после того как фигура упала следующая вылетает также быстро. Хочется либо задержки на один «ход» в момент когда фигура ложится, либо сброса действия кнопки Вниз для следующей фигуры, то есть для того чтобы она ускорилась нужно было бы отпустить кнопку и нажать на нее еще раз. Да, и фигуры у стены не все поворачиваются.
Вот такая вот штука у меня вышла.
Только в 30 строк не уложились повороты фигур :(

<canvas id="canvas" style="background:#eeeeee" width = "200px" height="400px" ></canvas>

var map=[], pos=5, move=0, score=0, bit=0, fig=0;
var canvas = document.querySelector('#canvas'),  ctx = canvas.getContext("2d");
function _$ (body, ret){ return eval("(function(a,b,c){"+(ret ? 'return ':'')+body+";})");}
_i = _$("parseInt(a)", 1);
range = _$("_$('for(var i='+a+'; i<='+b+'; ++i ) a(i); return 1')", 1);
set_color = _$("ctx.fillStyle = (['none', 'white', 'black', 'red'])[a]", 1);
draw_cell = _$("set_color(map[a]) && ctx.fillRect(a%10*20, _i(a/10)*20-20*3, 19, 19);");
can_move = _$("(b>1 || _i(a/10)==_i((a+b)/10)) && (a+b>=0) && ((a+b)<map.length) && (map[a+b]!=2)", 1);
bounced = _$('map.reduce(_$("a + ((b==3) && !can_move(c, "+a+")) ? 1 : 0", 1), 0)', 1);
cell_move = _$("can_move(a, b) && (map[a+b]=map[a]) && (map[a]=1)");
cell = _$("map[pos + a%4 + parseInt(a/4)*10] = (([1,15,46,78,142,204,198])[b] & (1<<(7-a))) ? 3 : 1");        
new_fig = _$("range(0, 7)(_$('cell(a,'+(Math.floor(Math.random()*6)+1)+')'))", 1);
(rng0_229 = range(0, 229))(_$("map[a] = 1"));
new_fig();
document.body.onkeydown = function(e) { 
    (move = ([-1, 0, 1, 10])[e.keyCode-37]) && !bounced(move)
       && rng0_229 (_$("b = move<0 ? a : 229-a; map[b]==3 && cell_move(b, move)"));
}; 
var interval = setInterval (function () {
    bounced(10) >0  && rng0_229 (_$("map[a]==3 && (map[a]=2)"))
         && range(3, 22) (_$('map.slice(a*10, a*10+10).reduce(_$("a+b", 1),0)==20 && ++score\
                             && range(a*10, a*10+9)(_$("map[a]=1"))\
                             && rng0_229 (_$("cell_move(229-a, 10)"))'))
         && range(20, 29) (_$("(map[a]==2) && interval && !clearInterval(interval) \
                          && !alert ('Game over! Score: '+score) && (interval=0) "))
       && new_fig();
    rng0_229 (_$("map[229-a]==3 && a>=10 && cell_move(229-a, 10)"))
    rng0_229 (_$("draw_cell(a)"))
}, 200);
Змейка же уже была! Собственно, по моему, с нее и начался марафон мини-игр в 30 строк кода на хабре.
http://habrahabr.ru/post/202476/
Чтож будет еще одна :) Я как то не думал, что здесь уже целый марафон, но думаю ничего страшного.
В целом симпатично.
Но она умирает при врезании в края, и при попытки движения задом (в классической попытка движения назад игнорировалась). И пару раз пропустила корм.
да и строк 100+ :) не считается
270 — потом уже просто сыпятся как ненормальные
330 ))
смог дойти до 280, потом начинается дурдом :)
А я больше 210 так и не набрал, заржавел ) В институте на Алкателе был тетрис, я в него играл часами, дошло до того, что начинал игру сразу на девятой скорости а иногда на десятой, хотя сначала казалось что на последней скорости фигур вообще не видно пока они низа не достигнут.
250
290
НЛО прилетело и опубликовало эту надпись здесь
habra-9999-in-1.js
Неделя исполнения 30-ти строчных желаний. Только хотел попросить змейку она уже была, не успел заикнуться про тетрис — он тоже в строю. Даже на душе хорошо стало.
А Сокобана в 30 строк недождаться… (
> Все фигурки хранятся в переменной fs=«1111:01|01|01|01*011|110:010|011|001*...» в виде строки. Чтобы получить массив фигур — делаем split('*')
Можно сэкономить на кавычках, сделав заменителем цифру:
не так 'a.b.c.d'.split('.')
а так 'a5b5c5d5'.split(5)
Действительно! Не знал что в split можно в качестве аргумента указывать тип number!
Указывать то можно что угодно, потом оно просто приводится к строке.
Скрытый текст
foo = {};
bar = "0[object Object]1[object Object]2";
bar.split(foo); // => ["0", "1", "2"]

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации