carfield.com.hk Amaze.txt 2001-12-26T16:00:00Z 2001-12-26T16:00:00Z <br/> * ** * * ** *<br/> *** * ******* * ****<br/> *** *** <br/> ***** ********** *****<br/> * * * * ** ** * * * ** *<br/> * * * * ** * * * * **<br/> * ** * ** <br/> * ** * ** * ** * **<br/> *** * *** ***** * *** **<br/> * * * * * * <br/> * ** * * * ** * * <br/><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> 2001-12-26T16:00:00Z Maze.java 2001-12-26T16:00:00Z 2001-12-26T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">//: c13:Maze.java import java.util.*; import java.io.*; import java.awt.*; public class Maze extends Canvas { private Vector lines; // a line is a char array private int width = -1; private int height = -1; public static void main (String [] args) throws IOException { if (args.length &lt; 1) { System.out.println(&quot;Enter filename&quot;); System.exit(0); } Maze m = new Maze(); m.load(args[0]); Frame f = new Frame(); f.setSize(m.width*20, m.height*20); f.add(m); Rat r = new Rat(m, 0, 0); f.setVisible(true); } public Maze() { lines = new Vector(); setBackground(Color.lightGray); } synchronized public boolean isEmptyXY(int x, int y) { if (x &lt; 0) x += width; if (y &lt; 0) y += height; // Use mod arithmetic to bring rat in line: byte[] by = (byte[])(lines.elementAt(y%height)); return by[x%width]==' '; } synchronized public void setXY(int x, int y, byte newByte) { if (x &lt; 0) x += width; if (y &lt; 0) y += height; byte[] by = (byte[])(lines.elementAt(y%height)); by[x%width] = newByte; repaint(); } public void load(String filename) throws IOException { String currentLine = null; BufferedReader br = new BufferedReader( new FileReader(filename)); for(currentLine = br.readLine(); currentLine != null; currentLine = br.readLine()) { lines.addElement(currentLine.getBytes()); if(width &lt; 0 || currentLine.getBytes().length &gt; width) width = currentLine.getBytes().length; } height = lines.size(); br.close(); } public void update(Graphics g) { paint(g); } public void paint (Graphics g) { int canvasHeight = this.getBounds().height; int canvasWidth = this.getBounds().width; if (height &lt; 1 || width &lt; 1) return; // nothing to do int width = ((byte[])(lines.elementAt(0))).length; for (int y = 0; y &lt; lines.size(); y++) { byte[] b; b = (byte[])(lines.elementAt(y)); for (int x = 0; x &lt; width; x++) { switch(b[x]) { case ' ': // empty part of maze g.setColor(Color.lightGray); g.fillRect( x*(canvasWidth/width), y*(canvasHeight/height), canvasWidth/width, canvasHeight/height); break; case '*': // a wall g.setColor(Color.darkGray); g.fillRect( x*(canvasWidth/width), y*(canvasHeight/height), (canvasWidth/width)-1, (canvasHeight/height)-1); break; default: // must be rat g.setColor(Color.red); g.fillOval(x*(canvasWidth/width), y*(canvasHeight/height), canvasWidth/width, canvasHeight/height); break; } } } } } ///:~ </TEXTAREA><br><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> 2001-12-26T16:00:00Z Rat.java 2001-12-26T16:00:00Z 2001-12-26T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">//: c13:Rat.java public class Rat { static int ratCount = 0; private Maze prison; private int vertDir = 0; private int horizDir = 0; private int x,y; private int myRatNo = 0; public Rat(Maze maze, int xStart, int yStart) { myRatNo = ratCount++; System.out.println(&quot;Rat no.&quot; + myRatNo + &quot; ready to scurry.&quot;); prison = maze; x = xStart; y = yStart; prison.setXY(x,y, (byte)'R'); new Thread() { public void run(){ scurry(); } }.start(); } public void scurry() { // Try and maintain direction if possible. // Horizontal backward boolean ratCanMove = true; while(ratCanMove) { ratCanMove = false; // South if (prison.isEmptyXY(x, y + 1)) { vertDir = 1; horizDir = 0; ratCanMove = true; } // North if (prison.isEmptyXY(x, y - 1)) if (ratCanMove) new Rat(prison, x, y-1); // Rat can move already, so give // this choice to the next rat. else { vertDir = -1; horizDir = 0; ratCanMove = true; } // West if (prison.isEmptyXY(x-1, y)) if (ratCanMove) new Rat(prison, x-1, y); // Rat can move already, so give // this choice to the next rat. else { vertDir = 0; horizDir = -1; ratCanMove = true; } // East if (prison.isEmptyXY(x+1, y)) if (ratCanMove) new Rat(prison, x+1, y); // Rat can move already, so give // this choice to the next rat. else { vertDir = 0; horizDir = 1; ratCanMove = true; } if (ratCanMove) { // Move original rat. x += horizDir; y += vertDir; prison.setXY(x,y,(byte)'R'); } // If not then the rat will die. try { Thread.sleep(2000); } catch(InterruptedException ie) {} } System.out.println(&quot;Rat no.&quot; + myRatNo + &quot; can't move..dying..aarrgggh.&quot;); } } ///:~ </TEXTAREA><br><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> 2001-12-26T16:00:00Z makefile 2001-12-26T16:00:00Z 2001-12-26T16:00:00Z <br/><TEXTAREA name="code" class="" rows="16" cols="100"># From Thinking in Patterns (with Java) by Bruce Eckel # At http://www.BruceEckel.com # (c)2001 Bruce Eckel # Copyright notice in Copyright.txt # Automatically-generated MAKEFILE # For examples in directory .\c13 # using the JDK 1.3 compiler # Invoke with: make HOME := ../ ifndef MAKECMDGOALS MAKECMDGOALS := javac endif # Command.com is too weak to build this under Windows NT/2000: ifeq ($(OS),Windows_NT) COMSPEC=$(SYSTEMROOT)\system32\cmd.exe endif ifneq ($(MAKECMDGOALS),clean) include $(HOME)/$(MAKECMDGOALS).mac endif .SUFFIXES : .class .java .java.class : $(JVC) $(JVCFLAGS) $&lt; javac: \ Maze.class \ Rat.class jikes: \ Maze.class \ Rat.class clean: ifeq ($(notdir $(SHELL)),COMMAND.COM) del *.class else rm -f *.class endif Maze.class: Maze.java Rat.class: Rat.java </TEXTAREA><br><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> 2001-12-26T16:00:00Z