import java.awt.Graphics; import java.awt.Color; import java.awt.Font; import java.awt.Image; import java.awt.image.MemoryImageSource; import java.awt.image.IndexColorModel; import java.applet.Applet; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.MouseEvent; import java.lang.Math; public class antacross extends java.applet.Applet implements MouseListener, MouseMotionListener, Runnable { int maxcolors=16,numcolors=16; int speed=10000; int h=600,w=600; Thread runner = null; boolean threadSuspended; boolean moved=false,painted=false,paintmenu=false,threadStopped=true; int antx=w/2,anty=h/2,antdir=0; int act=0; Image img; Color color[]=new Color[maxcolors]; int turn[]=new int[maxcolors]; int pix[] = new int[w * h]; IndexColorModel cm= null; public void init() { createPalette(); for (int i=0; i1)&&(x>=w+30)&&(y>=10)&&(x=w+50)&&(y>=i*20+30)&&(x=w+5)&&(y>=40)&&(x=w+5)&&(y>=320)&&(x0;i--) turn[i]=turn[i-1]; turn[0]=temp; reset(); paintmenu=true; repaint(); } if ((maxcolors>numcolors)&&(x>=w+35)&&(y>=numcolors*20+30)&& (x<=w+130)&&(y=w+50)&&(y>=maxcolors*20+30)&& (x<=w+115)&&(y=w+160)&&(y>=50)&&(x<=w+183)&&(y<350)){ speed=(int)(Math.exp((y-50)*Math.log(10000000)/300)); paintmenu=true; repaint(); } } void paintMenu(Graphics g) { g.setColor(new Color(163,166,255)); g.fillRect(w,0,200,h); if (numcolors>1){ g.setColor(Color.black); g.drawRect(w+30,10, 105, 18); g.drawString("Remove a Color",w+33, 23); } g.setColor(Color.black); g.drawRect(w+5,40,40, 18); g.drawString("Up",w+8, 53); g.setColor(Color.black); g.drawRect(w+5,320,40, 18); g.drawString("Down",w+8, 333); for (int i=0; inumcolors){ g.setColor(Color.black); g.drawRect(w+35,numcolors*20+30, 95, 18); g.drawString("Add a Color",w+43, numcolors*20+43); } g.setColor(Color.black); g.drawRect(w+50,maxcolors*20+30, 65, 18); g.drawString("Reset",w+65, maxcolors*20+43); g.drawString("Updates",w+143, 28); g.drawString("Constant",w+140, 48); g.drawString("Never",w+157, 363); g.fillRect(w+160,50,23,300); g.setColor(Color.red); g.drawRect(w+160,50,23,300); int val=(int)(300*Math.log(speed)/Math.log(10000000)); g.drawLine(w+160,val+50,w+183,val+50); } public void start() { if (runner == null) { runner = new Thread(this); runner.start(); } } public synchronized void stop() { if (null != runner) { threadSuspended = false; notify(); } runner=null; } public void run() { threadStopped=false; Thread me = Thread.currentThread(); int count=0,index; while (runner == me) { count=(count+1)%speed; index=w*anty+antx; antdir=(antdir+turn[pix[index]])%4; pix[index]= (pix[index]+1)%numcolors; switch (antdir){ case (0): antx++;break; case (1): anty++;break; case (2): antx--;break; case (3): anty--;break; } if ((antx<0)||(antx>=w)||(anty<0)||(anty>=h)) stop(); if (count==0){ try { Thread.sleep(100); synchronized(this) { while (threadSuspended) { wait(); } } } catch (InterruptedException e){ } repaint(); } } threadStopped=true; } public void mousePressed(MouseEvent e) { } public void mouseDragged(MouseEvent e) { } public void mouseMoved(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseClicked(MouseEvent e) { e.consume(); clickMenu(e.getX(),e.getY()); } }