Pull to refresh

Comments 44

UFO landed and left these words here
Извиняюсь перед читателями, просто уже был третий час ночи — не было сил писать. Сейчас исправлюсь!
Утро вечера мудренее (с) Народная мудрость
UFO landed and left these words here
Да я это и сам понимаю… и так то код не совсем честный на 30 строк. Боролся между двумя чувствами — сделать код покороче и не совсем страшным в плане оформления. В итоге ни то, ни другое не выдержал.
UFO landed and left these words here
UFO landed and left these words here
UFO landed and left these words here
Так, что там ещё осталось из потенциально 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);
Чтож будет еще одна :) Я как то не думал, что здесь уже целый марафон, но думаю ничего страшного.
В целом симпатично.
Но она умирает при врезании в края, и при попытки движения задом (в классической попытка движения назад игнорировалась). И пару раз пропустила корм.
да и строк 100+ :) не считается
270 — потом уже просто сыпятся как ненормальные
смог дойти до 280, потом начинается дурдом :)
А я больше 210 так и не набрал, заржавел ) В институте на Алкателе был тетрис, я в него играл часами, дошло до того, что начинал игру сразу на девятой скорости а иногда на десятой, хотя сначала казалось что на последней скорости фигур вообще не видно пока они низа не достигнут.
UFO landed and left these words here
Неделя исполнения 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"]

Sign up to leave a comment.

Articles