/*****************************/ /* */ /*    図形の反転    */ /* */ /* 1998/ 1/ 8 宍戸 輝光 */ /* */ /*****************************/ import java.awt.*; public class hanten extends java.applet.Applet { Image screen; Graphics g_screen; Button rxb,ryb,xyb,clb; int bx,by; boolean dot[][]=new boolean[32][32]; public void init(){ resize(256,288); setBackground(Color.green); setFont(new Font("TimesRoman",Font.PLAIN,12)); screen=createImage(193,193); g_screen=screen.getGraphics(); this.setLayout((LayoutManager)null); rxb=new Button("Rev-X"); add(rxb); rxb.reshape(24,208,96,28); ryb=new Button("Rev-Y"); add(ryb); ryb.reshape(136,208,96,28); xyb=new Button("Exc-XY"); add(xyb); xyb.reshape(24,248,96,28); clb=new Button("Clear"); add(clb); clb.reshape(136,248,96,28); clearScreen(); } public boolean action(Event evt,Object What) { int i,j,x,y,dx,dy,oldx,oldy,sx,sy; boolean wdot[][]=new boolean[32][32]; if (evt.target==rxb) { /* 横方向反転 */ for (i=0;i<32;i++) /* 作業用配列にコピー */ for (j=0;j<32;j++) wdot[j][i]=dot[j][i]; for (i=0;i<32;i++) /* 左右逆にコピー */ for (j=0;j<32;j++) dot[j][i]=wdot[31-j][i]; drawScreen(); /* 表示 */ return true; } if (evt.target==ryb) { /* 上下反転 */ for (i=0;i<32;i++) for (j=0;j<32;j++) wdot[j][i]=dot[j][i]; for (i=0;i<32;i++) /* 上下逆にコピー */ for (j=0;j<32;j++) dot[j][i]=wdot[j][31-i]; drawScreen(); return true; } if (evt.target==xyb) { /* X-Y交換 */ for (i=0;i<32;i++) for (j=0;j<32;j++) wdot[j][i]=dot[j][i]; for (i=0;i<32;i++) /* X-Y を逆にコピー */ for (j=0;j<32;j++) dot[i][j]=wdot[j][i]; drawScreen(); return true; } if (evt.target==clb) { /* クリア */ clearScreen(); return true; } return false; } public void clearScreen() { /*画面初期化*/ int i,j; g_screen.setColor(Color.white); /* グラフイメージ初期化 */ g_screen.fillRect(0,0,193,193); g_screen.setColor(Color.gray); for (i=0;i<33;i++) { g_screen.drawLine(i*6,0,i*6,193); g_screen.drawLine(0,i*6,193,i*6); } for (i=0;i<32;i++) /* 図形データ配列クリア */ for (j=0;j<32;j++) dot[j][i]=false; drawScreen(); } public void drawScreen() { /* 図形データをグラフ上に表示 */ int i,j; for (i=0;i<32;i++) for (j=0;j<32;j++) { if (dot[j][i]) g_screen.setColor(Color.black); else g_screen.setColor(Color.white); g_screen.fillRect(j*6+1,i*6+1,5,5); } g_screen.setColor(Color.red); /* Y=X の直線を描く */ g_screen.drawLine(1,1,192,192); repaint(); } public boolean mouseDown(Event evt,int mx,int my) { int x,y; if (mx<32 ||mx>225 ||my<8 ||my>201) /* グラフの外なら戻る */ return false; x=(mx-32)/6; /* カーソル座標をグラフ上の座標に変換 */ y=(my-8)/6; dot[x][y]=!dot[x][y]; drawScreen(); bx=x; by=y; return true; } public boolean mouseDrag(Event evt,int mx,int my) { /* ドラッグ */ int x,y; if (mx<32 ||mx>225 ||my<8 ||my>201) /* グラフの外なら戻る */ return false; x=(mx-32)/6; /* カーソル座標をグラフ上の座標に変換 */ y=(my-8)/6; if (bx==x && by==y) return false; dot[x][y]=!dot[x][y]; drawScreen(); bx=x; by=y; return true; } public void paint(Graphics g){ g.drawImage(screen,32,8,this); /*グラフイメージを表示*/ } public void update(Graphics g){ paint(g); } }