Értem az ellenérved sarokpontjait.
Azonban továbbmennék a következő gondolattal:
$s=$Host.UI.RawUI.WindowSize;$w=$s.Width;$h=$s.Height-1;$n=3;$d=$h*2/3;$m=$d/2;
while($true){$f=new-object 'char[][]' $h,$w
$o=@();1..$n|%{$o+=@{x=(random -mi $m -ma ($w-$m));y=(random -mi $m -ma ($h-$m))}}
0..$m|%{$c=$_;1..$c|%{$r=$_;1..$n|%{$p=$o[$_-1];0..17|%{$a=($_*20+$r)*[Math]::Pi/180
$f[[int]($p.y+$r*[Math]::Sin($a))][[int]($p.x+$r*[Math]::Cos($a))]="*"}}}
cls;$f|%{$l="";$_|%{$l+=$_};$l};sleep -mi 50}}
Aktualitása vitathatatlan, de azért célszerű lefuttatni a megértéshez.
$n állítja a darabszámot.
A fenti azonban csak a nagytestvéren megy. Open Powershell nem képes megmondani az ablak dimenzióit (Ubuntu on Windows-on próbáltam), ezért Linuxon ez a nyerő:
$w=100;$h=30;$n=3;$d=$h*2/3;$m=$d/2
while($true){$f=new-object 'char[][]' $h,$w
$o=@();1..$n|%{$o+=@{x=(get-random -mi $m -ma ($w-$m));y=(get-random -mi $m -ma ($h-$m))}}
0..$m|%{$c=$_;1..$c|%{$r=$_;1..$n|%{$p=$o[$_-1];0..17|%{$a=($_*20+$r)*[Math]::Pi/180
$f[[int]($p.y+$r*[Math]::Sin($a))][[int]($p.x+$r*[Math]::Cos($a))]="*"}}}
cls;$f|%{$l="";$_|%{$l+=$_};$l};start-sleep -mi 50}}
100x30-as ablak van a paraméterben.