- 641 名前:デフォルトの名無しさん mailto:sage [02/08/03 01:12]
- >>633 これは難しいねぇ。 >>20 を参考にして少し何とかできませんかね?
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;g.fillRect(i%W*U,i++/W*U,U,U))g.setColor(m[i]>0? Color.BLACK:Color.WHITE);}public boolean handleEvent(Event e){int n=e.x/U;n=n<1 ?1:n>W-2?W-2:n;p=e.id==503?n+(H-3)*W:p;g=e.id==501?l:g;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,l++)m[k +j]=m[k+1+j]=2;}for(i=W;i>0;m[i+H*W-W]=4)m[--i]=1;add(c);pack();show();try{for( ;;Thread.sleep(50)){m[b]=0;o=m[n=b+v((d+16)%64)+v(d)*W];if(g>0)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;g=--l<1?0:g;}if(o==3){d+=(b%W-p%W)*2;d=d/3<36?36:d>60?60:d;}if( o==4){b=p-W;d=56;g=0;}}else b=n;else b=p-W;m[i=(H-3)*W]=1;for(k=W-1;k>1;)m[--k+ i]=0;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){o=d%32;o=o>16?32-o:o;return o*(t+1)/8>o*t/8?(d<32)?1:-1:0;}};}}
|

|