Você pode escrever um programa que processa a exibição de um grupo de pixels que explodem separados (como em um mecanismo de partículas simples) e pode fazer isso em um número notavelmente pequeno de caracteres (pressionamentos de tecla)? (Lembre-se dos lemingues do jogo, quando esses caras explodiriam e seus pequenos pedaços de pixels se separariam.)
Alguém programou um sistema simples de partículas aqui como um esboço de processamento e é bastante robusto em comparação com o que eu acho que outros deveriam ser capazes de realizar se tentassem. Mas eu ficaria muito mais impressionado se alguém pudesse fazer o mesmo em c ++ e sdl, ou mesmo java ou c #.
Respostas:
Python, 245 caracteres
fonte
C #, WPF - 1523
Não é terrivelmente sério; isso foi principalmente uma tentativa de realmente funcionar.
O que estou fazendo aqui é usar um ItemsControl (Menu, já que é mais curto) no WPF para exibir partículas via ligação de dados e modelagem. Um modelo de dados controla a aparência das partículas (neste caso, um círculo simples) e a ligação de dados controla a cor e a posição das partículas.
Cada partícula tem uma posição, uma cor e uma direção que são atualizadas por um temporizador. Inicialmente, um monte de partículas é gerado no centro da janela com direções aleatórias (distribuídas normalmente). Essa coleção obtém dados vinculados ao ItemsControl, que manipula a exibição automática das partículas, sempre que as propriedades são atualizadas. As partículas são arrastadas um pouco devido à gravidade.
Ficou um pouco demorado, é verdade. Mas pelo menos parece bom:
Certamente pode ser reduzido, omitindo:
Optei por não fazê-lo no interesse da estética. Esta solução é muito mais longa do que quase qualquer outra coisa, independentemente. A abordagem de vinculação e modelagem de dados pode ser elegante, mas também é bastante detalhada em comparação com a simples atualização de um bitmap. (Nota: reduzi para 1356 , deixando tudo de fora, mas parece horrível.)
O código é distribuído em três arquivos, fornecidos aqui em formato formatado para legibilidade:
App.xaml
W.xaml
W.xaml.cs
fonte
postscript -
287244 caracterescorrer com
gs -dNOPAUSE asplode.ps
Você pode até imprimir e fazer um flipbook
fonte
Javascript - 268 caracteres
Aqui está uma explosão unidimensional, 2 partículas:
Para executá-lo, abra uma página em branco sobre: em um bom navegador, cole na barra de URL e pressione Enter. Você pode modificar a explosão editando os valores no final de
s(10,5,1,0)
. O primeiro valor é o tamanho da partícula que é explodida. O segundo valor é o tamanho da partícula que é explodida. O terceiro valor é a velocidade da partícula explodida. Deixe o '0' como está.fonte
APL (
120118)Ele tem o mesmo tipo de saída que a entrada Python (ou seja, apenas gera os estados em uma grade de caracteres). Somente a grade é 30x15 e a origem das partículas é 15x7.
fonte
JavaScript
502500496Esta é uma combinação das respostas de Joey e david4dev (é uma cópia vergonhosa do algoritmo de Joey implementado usando Javascript / canvas ☺):
Visualização do JSFiddle: http://jsfiddle.net/GVqFr/60/ (você pode pressionar o botão TidyUp para formatar bem o código)
fonte
500
. Se você pode definir uma variável globala=500
, pode salvar alguns caracteres substituindo todos500
pora
.250
também.Bash 380
Ligue e como explodir.
atualização: colorida
t = texto, c = cls, g = gotoxi, f = mosca, C = COR
fonte
C com SDL, 423 caracteres
Como a descrição original do problema mencionou explicitamente SDL, senti que já era hora de enviar uma solução SDL. Infelizmente, os nomes das funções e estruturas SDL não são particularmente concisos, portanto esse programa é um pouco longo. Na verdade, eu não posso nem deixar de fora o
#include
.(Como o código já é muito grande, deixei alguns bits extras para compilar sem avisos. Às vezes, sinto falta de compilar sem avisos. A remoção deles economizaria cerca de 30 caracteres.)
A animação é executada em um loop infinito. Feche a janela para sair do programa. Cada explosão usa um novo conjunto de partículas aleatórias.
Eu também gostaria de apontar o número
67372036
no código. Ele aparece na expressão do último argumento na segunda chamada paraSDL_FillRect()
. Como o código está, a explosão é renderizada inteiramente em cinza. Alterar esse número levemente adicionará um efeito de cor muito sutil, mas agradável à explosão. O número67372032
colore as partículas no início da explosão, enquanto o número67372034
fornece um efeito de cor à medida que desaparecem no final. Outros números podem produzir efeitos menos sutis do ciclo de cores. Convido você a experimentá-los.fonte
Depois de ver alguns dos outros ótimos exemplos aqui, decidi tentar e criar uma função de partícula que se encaixa em 140byt.es
Javascript, 282 caracteres
( Função de partículas de 138 caracteres e padrão de desenho básico em tela de 150 caracteres)
Exemplo ao vivo do JSFiddle aqui
Ao tornar o código totalmente processual, não era mais necessário nenhum código de matriz ou de atribuição de objeto, reduzindo muito o tamanho. Fazer um efeito processual também tem outros efeitos colaterais interessantes.
O código pode ser reduzido omitindo Gravidade, Sementes, Número de Partículas, etc., mas acho que esses recursos são bons demais para serem removidos;).
Recursos
Também confira no GitHub , para uma versão anotada.
fonte
Python com PyGame, 240 caracteres
Percebo que já existe uma solução em python, mas como essa apenas imprime caracteres, pensei que valeria a pena fazer uma que desenhe uma boa animação.
Ungolfed, o que eu comecei com:
Depois de muito hackery. Tela cheia para salvar alguns caracteres. Não usando som ou fontes, por isso acho
init()
desnecessário (funciona para mim).fonte
Python - 327 caracteres
Coisas interessantes:
(v * cos(a), v * sin(a))
implementado comov*e**(1j*a)
.
fonte
dwitter 112
experimente copiar / colar o código em dwitter.net
fonte