// MSquare.java with magic square import java.awt.*; import java.applet.*; public class MSquare extends Applet { int b[]=new int[25]; int size=5,cellht=35,cellwd=45; String name; public void init() { setLayout(new BorderLayout()); canvas = new MSQCanvas(); Panel p = new Panel(); p.setLayout(new FlowLayout()); button1=new Button("Generate"); p.add(button1); add("North",canvas); add("South",p); name = getParameter("name"); if (name == null) name = "Laura"; name = "Hello " + name + "!"; for(int i=1;i<=size;i++) { for(int j=1;j<=size;j++) { b[size*(i-1)+(j-1)]=0; b[size*(i-1)+(j-1)]=size*(i-1)+(j-1)+1; } } canvas.resize(300,300); canvas.redraw(b,size,cellht,cellwd); } void button1_Clicked(Event event) { int n=0,h,k,lasth=0,lastk=0; h= (int)(size*Math.random()+1); k= (int)(size*Math.random()+1); int iincr, jincr; iincr= -1+2*((int)(2*Math.random())); jincr= -1+2*((int)(2*Math.random())); double sw; sw=Math.random(); for(int i=1;i<=size;i++) { for(int j=1;j<=size;j++) { n=n+1; b[size*(k-1)+(h-1)]=n; lasth=h;lastk=k; h=h+iincr;if (h<1) h=size;else if(h>size) h=1; k=k+jincr;if (k>size) k=1;else if(k<1) k=size; } h=lasth;k=lastk; if(sw<0.5) { h=h-iincr;if (h<1) h=size;else if(h>size) h=1; } else { k=k-jincr;if (k<1) k=size;else if(k>size) k=1; } } canvas.redraw(b,size,cellht,cellwd); } public boolean handleEvent(Event event) { if (event.target == button1 && event.id == Event.ACTION_EVENT) { button1_Clicked(event); } return super.handleEvent(event); } Button button1; private MSQCanvas canvas; } class MSQCanvas extends Canvas { private int[] b; private int size,cellht,cellwd; public void redraw(int v[], int s, int h, int w) { b=v; size=s; cellht=h; cellwd=w; repaint(); } public void paint(Graphics g) { Font f = new Font("CourierNew", Font.BOLD, 20); g.setFont(f); g.setColor(Color.red); for (int i=0;i<=size;i++) { g.drawLine(5,5+cellht*i,size*(cellwd+1),5+cellht*i); } for (int i=0;i<=size;i++) { g.drawLine(5+cellwd*i,5,5+cellwd*i,size*(cellht+1)); } for (int i=1;i<=size;i++) { for (int j=1;j<=size;j++) { g.drawString(Integer.toString(b[size*(i-1)+(j-1)]), 5+cellwd*(i-1),5+cellht*j-10); } } } }