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:
- gravidade, fazendo com que as partículas se expandam uniformemente para todos os lados;
- a distribuição normal para os vetores iniciais, fazendo com que as partículas se expandam em uma caixa esparsa »;
- a variação do brilho, deixando as partículas pretas.
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
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" StartupUri="W.xaml"/>
W.xaml
<Window x:Class="W" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Menu Name="i">
<Menu.ItemTemplate>
<DataTemplate>
<Ellipse Width="2" Height="2" Fill="#000" Opacity="{Binding O}">
<Ellipse.RenderTransform>
<TranslateTransform X="{Binding X}" Y="{Binding Y}"/>
</Ellipse.RenderTransform>
</Ellipse>
</DataTemplate>
</Menu.ItemTemplate>
<Menu.Template>
<ControlTemplate>
<ItemsPresenter/>
</ControlTemplate>
</Menu.Template>
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</Menu.ItemsPanel>
</Menu>
</Window>
W.xaml.cs
using M = System.Math;
using T = System.Timers.Timer;
using System;
using System.ComponentModel;
partial class W
{
int a;
T t = new T(99);
public W()
{
InitializeComponent();
Height = Width = 500;
var r = new Random();
Func<double> n = () => 2 * (M.Sqrt(-2 * M.Log(r.NextDouble())) * M.Sin(6 * r.NextDouble()));
var l = new System.Collections.Generic.List<P>();
for (; a++ < 300; )
l.Add(new P { X = 250, Y = 250, f = n(), g = n() });
i.ItemsSource = l;
t.Elapsed += delegate
{
foreach (P x in l)
{
x.X += x.f;
x.Y += x.g += .2;
x.O = M.Max(1 - M.Sqrt(M.Pow(250 - x.X, 2) + M.Pow(250 - x.Y, 2)) / 250, 0);
}
};
t.Start();
}
}
class P : System.Windows.ContentElement, INotifyPropertyChanged
{
public double y, f, g;
public double X { get; set; }
public double O { get; set; }
public double Y
{
get { return y; }
set
{
y = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(""));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}