X-No-Archive: yes
Отчего-то дома у меня не открылась большая часть флешек. Но я был поражен ASCII игрой и проглосовал за неё.
А вот теперь увидел и LСD-экран, и твой, Даниил, кубик, и они тоже очень хороши.
Правда немного покоробило что все заявки это в основном демки.
А я с самого начала считал что суть конкурса именно в написании приложения от которого есть практическая польза.
Поэтому всё-таки игры ближе всего к цели.
Все работают. Неправда. Аппликухи потрясные, даже незнаю за кого
голосовать.
--
Denis Sheremetov
X-No-Archive: yes
Больше всего впечатлил кубик - а точнее одна его грань на которой в риалтайме обсчитывается конуэевская игра "Жизнь" - понять не могу как это в коде описано.
> одна его грань на которой в риалтайме обсчитывается конуэевская игра "Жизнь" - понять не могу как это в коде описано.
:) Это моё ноу-хау
Вообще, удалось ужать "Жизнь" до 5 строчек.
Вот более длинный, но более читабельный вариант (можно скопировать в первый кадр нового документа хоть в CS3, хоть в CS4)
var zoom = 4;
var bmp = new BitmapData(int(stage.stageWidth/4), int(stage.stageHeight/4), false, 0); // в этой битмапдате и будет развиваться жизнь
var image = addChild(new Bitmap(bmp)); // помещаем на сцену
image.scaleX = image.scaleY = zoom; // масштабируем
bmp.noise(int(Math.random()*int.MAX_VALUE),0,255,7,true); // заполняем случайными данными
var conv = new ConvolutionFilter(3, 3, [3,3,3,3,2,3,3,3,3],255,0,true,false,0,1); // вот тут сосредоточена магия :)
addEventListener(Event.ENTER_FRAME, function update(e) { // каждый кадр...
bmp.applyFilter(bmp, bmp.rect, new Point(), conv); // применяем магию
bmp.threshold(bmp, bmp.rect, new Point(), "==", 0x00000008, 0xFFFFFFFF, 0x000000FC); // избранные пиксели закрашиваем белым
bmp.threshold(bmp, bmp.rect, new Point(), "!=", 0xFFFFFFFF, 0x00000000); // все, которые не стали белыми, закрашиваем чёрным
});
Суть магии...
У ConvolutionFilter есть такой параметр как divider - результат поканального суммирования пикселей делится на это число. Здесь он установлен в 255. Т.е. грубо говоря, белая точка - это 1, чёрная - это 0.
Коэфициент для соседених точек - 3, для центральной точки - 2.
В результате одного шага точка должна получится белой, если выполнилось одно из условий:
1. она уже была белой и рядом 2 белых точки (2*1 + 3*2 = 8)
2. она уже была белой и рядом 3 белых точки (2*1 + 3*3 = 11)
3. она была чёрной и рядом 3 белых точки (2*0 + 3*3 = 9)
Во всех остальных случаях результат будет или больше 11 или меньше 8 (значение 10 не получится никак).
Теперь главная хитрость. Нужно как-то за один threshold сделать для 3 разных значений одинаковый результат.
К счастью, у threshold есть такой параметр как mask.
8 в бинарной системе - 00001000
9 в бинарной системе - 00001001
11 в бинарной системе - 00001011
Итого отличаются наши значения только последними двумя битами. Их и надо "отрезать" маской.
Значит, берём маску 0xFC и сравниваем с 0x08 (при этом мы ещё отрезаем красный и зелёный каналы и сравниваемый только синий, но это не страшно, так как во всех каналах значения одинаковые).
Вся хитрость состоит именно в подборе коэфициентов и делителя.
Работает ещё и такой набор
матрица: [7,7,7,7,1,7,7,7,7]
делитель: 119
маска: 0xF0
сравнивать с: 0x20
В обоих случаях значения удовлетворяют требованиям, необходимым для ускорения работы фильтра за счёт использования инструкций SSE (за счёт чего и достигается невероятная скорость работы даже на больших размерах поля).
> var conv = new ConvolutionFilter(3, 3,
> [3,3,3,3,2,3,3,3,3],255,0,true,false,0,1); // вот тут сосредоточена магия :)
Ага :)
VerifyError: Error #1107: The ABC data is corrupt, attempt to read out of bounds.
Денис Коляко
______________________________________________________________________
e...@timezero.ru | http://etcs.ru/ | http://www.timezero.com/
Ссправедливости ради следует сказать, что игра "Жизнь" ещё и замкнута
по горизонтали и вертикали. Так что это не "честная" "Жизнь".
По крайней мере вот тут:
http://www.quasimondo.com/archives/000680.php#000680
Ссправедливости ради следует сказать, что игра "Жизнь" ещё и замкнута
по горизонтали и вертикали. Так что это не "честная" "Жизнь".
> VerifyError: Error #1107: The ABC data is corrupt, attempt to read out of bounds.
Тоже как-то раз видел эту ошибку и именно на Жизни. Причём сперва всё работало прекрасно (и в IDE и в stand-alone плеере), а спустя какое-то время решил запустить .swf-ку и получил такой эксепшен.
Не знаю с чем это может быть связано.
> Ссправедливости ради следует сказать, что игра "Жизнь" ещё и замкнута
> по горизонтали и вертикали. Так что это не "честная" "Жизнь".
Сперва как раз хотел сделать тороидальную, чтобы глайдеры, улетая в одну сторону, появлялись с другой. Но увы, у ConvolutionFilter есть режим clamp, но нет режима wrap :(
Можно конечно исхитриться, добавить по невидимой полосочке толщиной 1 пиксель с каждой стороны, и каждый раз копировать эти полосочки, но этоуже много-много дополнительных строк.
Ещё была идейка сделать шейдер, расчитывающий Жизнь, но правила конкурса обрубают всевозможности их загрузки: ембедить нельзя, внешние файлы нельзя, массивы с байткодом нельзя. Хотя если сделать компилятор шейдеров и уместить строк эдак в 20... :)
поставьте свежую версию. я вот уже позабыл, когда в последний раз у
меня FP-10 крашил браузер. и это на линуксе.
--
С уважением, Фомкин Алексей
Программист "Сторк"
поставьте свежую версию. я вот уже позабыл, когда в последний раз у
меня FP-10 крашил браузер. и это на линуксе.
Opera 9.60, Flash Player 10,0,12,36
Всё работает на ура, перезапускал и смотрел/пересматривал все флешки.
Прибалдел от каждой работы - все работы, просто чудо в 25 строк.
Больше всего понравиласть игра в текстовом поле.
Жду окончания конкурса, чтоб остальные 82 работы посмотреть.
--
Oleg Galaburda
http://blog.actualwave.com/
Advanced Flash Components / CrabDish LLC
7350 E. Progress Place, Suite 212
Greenwood Village, CO 80111
USA
У меня, кстати, тоже была идея сделать такое (всё впоминал старенький
mars.com - это не сайт, это название файла).
Но только не хотелось это делать через drawTriangle, я всё пытался
реализовать что-то типа воксельного алгоритма.
Правда, у меня в результате получилось только такое:
http://www.25lines.com/finalists/0812/064.swf
А вот более trueшный воксель, как не странно, не попал в финалисты
(может быть потому что анонимный) - в файлике 068.txt в этом архиве:
http://www.25lines.com/finalists/0812/25lines-1208.zip
Ну, это просто таблица цветов. Ничего страшного тут не вижу.
У меня вторая строчка куда более читерская :) Однако, как я понял по
декабрьскому контесту, это вполне легально.
> надеюсь может быть когда нибудь кто-то создаст свой альтернативный конкурс ...
> со своими правилами (например ограничение на размер swf)
Я вот тут: http://www.25lines.com/forum/viewtopic.php?f=3&t=4
отписался, что хотел бы поучаствовать в 4kb contest (как раз
ограничение на размер swf).
Пообсуждали какие это может сулить проблемы.
Одна из проблем - размер swf, которую создают адобвские компиляторы (и
Flash IDE, и mxmlc) зависят от фаз луны и других непредсказуемых
факторов.
В том числе, если ты дашь свой исходный код другому человеку и он его
откомпилирует, у него вполне может получиться другой размер.
Так что почти наверняка swfки придётся обрабатывать рашпилем,
используя сторонние программы, в том числе возможно что и самописные.
(в принципе, я только "за". именно этого я и хочу)
Однако отсюда два следствия:
1. это будет именно конкурс swfок. т.е. не open source.
2. Adobe вряд ли будет спонсором :)
Ну и следствие из пункта 1 - надо будет каким-то образом
контролировать, чтобы бы swfки не лезли в сеть, а то можно легко
сделать прелоадер в 4 килобайта, который грузит основное приложение на
10 мегабайт :)
Ну, это просто таблица цветов. Ничего страшного тут не вижу.
У меня вторая строчка куда более читерская :) Однако, как я понял по
декабрьскому контесту, это вполне легально.
Поэтому приходится самого себя ограничивать и следовать одному
простому правилу: не наглеть :)
Вот у меня например была идея сделать простенький комплятор (точнее
ассемблер) шейдеров, а потом в одну длинную строчку записать
"исходник" шейдера.
Но решил этого не делать, в том числе и потому, что этот титанический
труд скорее всего не оценят.
Кстати, 034 (летающие точки) из декабрьского соревнования, вообще ни
одной хитрости не используют, всё максимально честно.
И при этом долгое время висела на 1 месте (хотя там, конечно, не
обошлось без флешмобов).
А может быть ограничивать длину исходного кода в байтах? Тоже конечно
извращение, раз уж мы swf-ки делаем, но, по крайней мере извращение
однотипное?
А вообще, будем надеятся, что разработчики начнут публиковать статьи о
том, как и что у них работает. Я как освобожусь - точно напишу.
А вообще, будем надеятся, что разработчики начнут публиковать статьи о
том, как и что у них работает. Я как освобожусь - точно напишу.