- 643 名前:561 mailto:sage [02/08/05 18:55]
- >>641
参考になりました。三項演算子を効果的に使うんですね。 かなり短縮できました。(ブロック崩し - B.java : 現在13行) import java.awt.*;public class B{public static void main(String[]a){new Frame() {int W=26,H=33,T=W*H,P=7,U=6,b=1+W,d=56,p=1+T-W*3,g,l,t,i,j,k,u,m[]=new int[T]; {Canvas c=new Canvas(){{setSize(W*U,H*U);}public void update(Graphics g){for(u= 0;u<T;g.fillRect(u%W*U,u++/W*U,U,U))g.setColor(m[u]>0?Color.BLACK:Color.WHITE); }public boolean handleEvent(Event e){k=e.x/U;k=k<1?1:k>W-2?W-2:k;p=e.id==503?k+ T-W*3:p;g=e.id==501?l:g;return 1>0;}};for(;i<T;i++)m[i]=(j=i/W)>=H-1?4:j<1|(k=i %W)<1|k>W-2?1:j>3&j<H/2+2&j%3>1&k>3&k<W-4&((j/3^k/2)&1)>0?2+0*++l:0;l/=2;add(c) ;pack();show();try{for(;;Thread.sleep(50)){m[b]=0;i=g>0?b+v((d+16)%64)+v(d)*W:p -W;j=g>0?m[i]:0;if(j>0){d=m[i%W+b/W*W]>0?m[b%W+i/W*W]>0?(d+32)&63:(32-d)&63:-d& 63;if(j==2){m[i]=m[i^1]=0;g=--l<1?0:g;}if(j==3)d=(d+=b%W-p%W)<36?36:d>60?60:d; if(j==4){d=56;g=0;}i=b;}m[b=i]=1;i=p%W-P/2;for(j=0;j<W;j++)m[j+T-W*3]=j>=i&j<i+ P?3:j<1|j>W-2?1:0;t=(t+1)%8;c.repaint();}}catch(Exception e){}}int v(int d){j=d %32;j=j>16?32-j:j;return j*(t+1)/8>j*t/8?d<32?1:-1:0;}};}} ただ、「g=--l<1?0:g;」のような処理はアトミックじゃないので、別スレッドから変更さ れた場合に、やや心配ではありますが。(取り越し苦労?(^^;)) >>642 やっぱり仕様そのものが問題だったかも(^^;) ラケットの位置により反射角度が変化ってのはオーバースペックかな? あと、ApplicationよりAppletの方が短くできそうですね。
|

|