//package Dasearch; import java.awt.*; import java.awt.event.*; import java.awt.Graphics; import javax.swing.*; public class pathfinder extends JFrame { private Image diamondgif, mangif; // animated gif images private Graphics display; private int gap = 24; // size of each square/cell of map private int yoff = 24; private astar PG; int rows, cols; int XDIM, YDIM; // window dimensions int gobx, goby, profx, profy; private Image[] imageof; // image vector for terrain. private Image[] imagechar; //image vector for character based on terrain. public void paint(Graphics g) {} // override automatic repaint public pathfinder(int r, int c) { rows = r; cols = c; PG = new astar(r,c); XDIM = cols*gap; YDIM = rows*gap; this.setBounds(0,0,XDIM,YDIM+yoff+5); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); display = this.getGraphics(); diamondgif = Toolkit.getDefaultToolkit().getImage("gem1.gif"); prepareImage(diamondgif,this); mangif = Toolkit.getDefaultToolkit().getImage("man15.gif"); prepareImage(mangif,this); imageof = new Image[4]; imagechar = new Image[4]; imageof[astar.WATER]= Toolkit.getDefaultToolkit().getImage("Water.gif"); prepareImage(imageof[astar.WATER],this); imageof[astar.OPEN] = Toolkit.getDefaultToolkit().getImage("grass1.gif"); prepareImage(imageof[astar.OPEN],this); imagechar[astar.OPEN] = mangif; imagechar[astar.WATER] = Toolkit.getDefaultToolkit().getImage("boat.gif"); prepareImage(imagechar[astar.WATER],this); try{Thread.sleep(500);} catch(Exception e) {} // Synch with system // draw static background as a green rectangle display.setColor(Color.green); display.fillRect(0,0,XDIM,YDIM+yoff); // generate random starting positions. // generate initial positions of professor and diamond do { gobx = (int)(Math.random() * PG.COLS); goby = (int)(Math.random() * PG.ROWS); } while (PG.M[goby][gobx]!=PG.OPEN); do { profx = (int)(Math.random() * PG.COLS); profy = (int)(Math.random() * PG.ROWS); } while (PG.M[profy][profx]!=PG.OPEN); // draw map drawmap(); // draw professor and diamond, initial position display.drawImage(imagechar[PG.M[profy][profx]], (profx*gap),(profy*gap)+yoff,gap,gap,null); display.drawImage(diamondgif,gobx*gap,goby*gap+yoff,gap,gap,null); animate(); } // constructor public void animate() { // invert path. coord path = PG.search(goby,gobx, profy,profx); if (path==null) { display.setColor(Color.red); display.drawString("NO PATH TO TARGET!",50,100); System.out.println("no path"); return; } while (path!=null) { display.drawImage(imagechar[PG.M[path.y][path.x]], (path.x*gap),(path.y*gap)+yoff,gap,gap,null); try{Thread.sleep(250);} catch(Exception se) {} display.drawImage(imageof[PG.M[path.y][path.x]], (path.x*gap),(path.y*gap)+yoff,gap,gap,null); display.setColor(Color.red); display.fillOval((path.x*gap)+8,(path.y*gap)+yoff+8,4,4); // for animation: display.drawImage(diamondgif,gobx*gap,goby*gap+yoff,gap,gap,null); path = path.prev; } //display.drawImage(diamondgif,gobx*gap,goby*gap+yoff,gap,gap,null); display.drawImage(imagechar[PG.M[goby][gobx]],gobx*gap,goby*gap+yoff,gap,gap,null); } public void drawmap() { int i, j; for(i=0;i