// // 配列ベースのフレームバッファ // //  2000/12/ 2 宍戸 輝光 // import java.awt.*; import java.awt.image.*; import java.awt.event.*; public class jfm extends java.applet.Applet implements MouseMotionListener { private Image img; private int x,y,back[],bg[],chr[]; private MemoryImageSource ms; public void start(){ int i,j,c; back=new int[512*512]; bg=new int[512*512]; chr=new int[64*64]; for (i=0;i<512;i++) for (j=0;j<512;j++) { c=0xff000000+((i/2) << 8)+(j/2); bg[j+i*512]=c; } for (i=0;i<64*64;i++) chr[i]=0xff000000; for (i=0;i<64;i++) for (j=i/2;j<64-i/2;j++) { c=0xff000000+(i*4 << 16)+((63-i)*4); chr[j+i*64]=c; chr[j+(63-i)*64]=c; } ms=new MemoryImageSource(512,512,back,0,512); ms.setAnimated(true); ms.setFullBufferUpdates(true); img=createImage(ms); ms.newPixels(); addMouseMotionListener(this); repaint(); } public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseDragged(MouseEvent e) {} public void mouseMoved(MouseEvent e) { x=e.getX(); y=e.getY(); repaint(); } public void paint(Graphics g) { System.arraycopy(bg,0,back,0,512*512); for (int i=0;i<64;i++) for (int j=0;j<64;j++) if (j+x>=0 && j+x<512 && i+y>=0 && i+y<512 && chr[j+i*64]!=0xff000000) back[j+x+(i+y)*512]=chr[j+i*64]; ms.newPixels(); g.drawImage(img,1,1,this); } public void update(Graphics g){ paint(g); } }