七行プログラミング

このエントリーをはてなブックマークに追加
--------E.java
import java.awt.*;import java.awt.image.*;class E{public static void main(
String[]a){new Frame(){int T=4,W=128,n=96,F=255,i;P[]p=new P[n];Image m;byte[]
t=new byte[W*W],c=new byte[768];class P{double x,y,u=Math.random()*2-1,v=-Math
.random()*1.5-.5;int s(){x+=u;y+=(v+=.01);return(int)x+(int)y*W;}}{for(i=0;i<n
;i++)p[i]=new P();for(i=0;i<F;i+=3){c[i]=c[i+256]=c[i+512]=(byte)i;c[i+F]=c[i+
510]=c[i+511]=(byte)F;}show();MemoryImageSource s=new MemoryImageSource(W,W,
new IndexColorModel(8,256,c,0,false),t,0,W);s.setAnimated(true);m=createImage(
s);resize(512,512);repaint();try{for(;;Thread.sleep(15)){for(i=0;i<n;i++){int
v=p[i].s();if(v>0&&v<W*W)t[v]+=128;}for(i=1;i<W*(W-1);i++)t[i]=(byte)(((t[i-1]&
F)+(t[i+1]&F)+(t[i+W]&F))*F/768);s.newPixels();}}catch(Exception e){}}public
boolean mouseDown(Event e,int u,int v){for(int j=0;j<n;j++){p[j]=new P();p[j].
x=u/T;p[j].y=v/T;}return true;}public void update(Graphics g){g.drawImage(m,0,
0,W*T,W*T,0,0,W,W,this);}};}}

--------README
実行は
> javac E.java
> java E
で、ウィンドウ上でクリックすれ

7行には遠く及ばなかった・・・

J2SE1.4で動作確認
MS Javaではかなり厳しい動作だたよ すまそ
676675:02/02/18 17:05
1行縮んで、12行に。
次はL-Systemでもやってみようかな

import java.awt.*;import java.awt.image.*;class E{public static void main(
String[]a){new Frame(){class P{double x,y,u=Math.random()*2-1,v=-Math.random()
*1.5-.5;int s(){return(int)(x+=u)+(int)(y+=(v+=.01))*W;}}int T=4,W=128,F=255,i
;P[]p=new P[0];Image m;byte[]t=new byte[W*W];public void update(Graphics g){g.
drawImage(m,0,0,W*T,W*T,this);}public boolean mouseDown(Event e,int X,int Y){p
=new P[96];for(int j=0;j<96;j++){(p[j]=new P()).x=X/T;p[j].y=Y/T;}return 0<1;}
{for(i=0;i<F;i+=3){t[i]=t[i+256]=t[i+512]=(byte)i;t[i+F]=t[i+510]=t[i+511]=(
byte)F;}MemoryImageSource s=new MemoryImageSource(W,W,new IndexColorModel(8,F+
1,t,0,0<0),t,0,W);s.setAnimated(true);m=createImage(s);resize(W*T,W*T);show();
try{for(repaint();;Thread.sleep(15)){for(i=0;i<p.length;i++){int z=p[i].s();if
(z>0&&z<W*W)t[z]+=128;}for(i=1;i<W*(W-1);i++)t[i]=(byte)(((t[i-1]&F)+(t[i+1]&F
)+(t[i+W]&F))*F/768);s.newPixels();}}catch(Exception e){}}};}}