- 633 名前:561 mailto:sage [02/08/02 22:57]
- >>632
了解っす! まずはブロック崩しから…。(現在16行) import java.awt.*;public class B{public static void main(String[]a){new Frame() {int W=23,H=32,P=7,U=6,b=W/2+(H-4)*W,n,d=56,p=W/2+(H-3)*W,g,l,t,o,i,j,k;int[]m= new int[W*H];{Canvas c=new Canvas(){{setSize(W*U,H*U);}public void update( Graphics g){for(int i=0;i<W*H;i++){g.setColor(m[i]>0?Color.BLACK:Color.WHITE);g .fillRect(i%W*U,i/W*U,U,U);}}public boolean handleEvent(Event e){if(e.id==503){ int n;if((n=e.x/U)<1)n=1;if(n>W-2)n=W-2;p=n+(H-3)*W;}if(e.id==501)g=l;return 1> 0;}};for(;i<H;i++){m[j=i*W]=m[W-1+j]=1;if(i%3==1&i>3&i<=H/2)for(k=6-i/3%2*2;k<W -6;k+=4){m[k+j]=m[k+1+j]=2;l++;}}for(i=W;i>0;){m[--i]=1;m[i+H*W-W]=4;}add(c); pack();show();try{for(;;Thread.sleep(50)){m[n=b]=0;if(g>0){n+=v((d+16)%64)+v(d) *W;o=m[n];if(o>0){i=n%W;j=n/W*W;d=(m[b%W+j]>0)?(m[i+b/W*W]>0)?(d+32)&63:-d&63:d &32|(32-d)&31;if(o==2){m[k=(i&~1)+j]=m[k+1]=0;if(--l<1)g=0;}if(o==3){if((d+=(b% W-p%W)*2/3)<36)d=36;if(d>60)d=60;}if(o==4){b=p-W;d=56;g=0;}}else b=n;}else b=p- W;i=(H-3)*W;for(k=0;k<W;k++)m[k+i]=0;m[i]=m[W-1+i]=1;for(k=(j=p)-P/2;k<=j+P/2;k ++)if(k>=(H-3)*W&k<(H-2)*W)m[k]=3;m[b]=1;t=(t+1)%8;c.repaint();}}catch( Exception e){}}int v(int d){int n;if((n=d%32)>16)n=32-n;return n*(t+1)/8>n*t/8? (d<32)?1:-1:0;}};}} アルゴリズム自体試行錯誤中なので、まだ最適化をしてません。 ((H-2)*W→690みたいな…) そこら辺を直せば1〜2行は縮まりそうですが、とても7行は無理っぽい…(;_;) ボールの数は無制限です(^^;) それから、終了はControl+Cで…。
|

|