public void animate() { // invert path. Coord path = PG.search(goby, gobx, profy, profx); // coord path = PG.search(profy,profx, goby,gobx); if (path == null) { display.setColor(Color.red); display.drawString("NO PATH TO TARGET!", 50, 100); System.out.println("no path"); return; } int px = 0, py = 0; // for calculating graphical coords while (path != null) { px = getx(path.y, path.x); py = gety(path.y, path.x); display.drawImage( imagechar[PG.M[path.y][path.x]], (px - gap / 2), (py - gap / 2), gap, gap, null); // display.drawImage(imagechar[PG.M[path.y][path.x]], // (path.x*gap),(path.y*gap)+yoff,gap,gap,null); System.out.printf("%d,%d: %d\n", path.y, path.x, PG.M[path.y][path.x]); 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); if (!showtrace) // erase trail - redraw hexagon { display.setColor(colorof[PG.M[path.y][path.x]]); display.fillPolygon(HX[path.y][path.x]); } path = path.prev; } // with path!=null px = getx(goby, gobx); py = gety(goby, gobx); display.drawImage(diamondgif, px - gap / 2, py - gap / 2, gap, gap, null); display.drawImage(imagechar[PG.M[goby][gobx]], px - gap / 2, py - gap / 2, gap, gap, null); } // animate
public Pathfinder(int r, int c) // constructor { rows = r; cols = c; HX = new Hexagon[r][c]; for (int i = 0; i < r; i++) { int odd = i % 2; for (int j = 0; j < c; j++) { HX[i][j] = new Hexagon(yoff / 2 + (j * 2 + odd) * hpdist, yoff + gap + (3 * gap / 2 * i), gap); } } // for i,j PG = new MyAstar(r, c); // note it's myastar, not astar XDIM = cols * hpdist * 2 + yoff; // ((cols+1)*gap*3)/2; YDIM = ((rows + 1) * gap * 3) / 2; this.setBounds(0, 0, XDIM + 5, 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); imagechar = new Image[4]; // image of character while on terrain type imagechar[Astar.OPEN] = mangif; imagechar[Astar.WATER] = Toolkit.getDefaultToolkit().getImage("boat.gif"); prepareImage(imagechar[Astar.WATER], this); imagechar[Astar.DESERT] = Toolkit.getDefaultToolkit().getImage("camel.gif"); prepareImage(imagechar[Astar.DESERT], this); imagechar[Astar.FOREST] = Toolkit.getDefaultToolkit().getImage("bear.gif"); prepareImage(imagechar[Astar.FOREST], 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); // fill background // 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 || Astar.distance(goby, gobx, profy, profx) < 20); // draw map drawmap(); System.out.println(profy + "," + profx + " " + goby + "," + gobx); // draw professor and diamond, initial position int px = getx(profy, profx), py = gety(profy, profx); // center hx coords display.drawImage( imagechar[PG.M[profy][profx]], (px - gap / 2), (py - gap / 2), gap, gap, null); px = getx(goby, gobx); py = gety(goby, gobx); display.drawImage(diamondgif, px - gap / 2, py - gap / 2, gap, gap, null); /* 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
/** * This method is called from within the constructor to initialize the form. WARNING: Do NOT * modify this code. The content of this method is always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { valintaRuudut = new javax.swing.ButtonGroup(); jScrollPane1 = new javax.swing.JScrollPane(); kuvaLista = new javax.swing.JList(); Ratkaise = new javax.swing.JButton(); kuvaKentta = new javax.swing.JLabel(); lisaaUusiKuva = new javax.swing.JButton(); dijkstra = new javax.swing.JCheckBox(); bellmanFord = new javax.swing.JCheckBox(); Dijkstra8 = new javax.swing.JCheckBox(); kuvanAlkuPiste = new javax.swing.JTextField(); kuvanLoppuPiste = new javax.swing.JTextField(); jTextField1 = new javax.swing.JTextField(); ratkaisuKentta = new javax.swing.JLabel(); jTextField2 = new javax.swing.JTextField(); poistaKuva = new javax.swing.JButton(); jFileChooser1 = new javax.swing.JFileChooser(); frame = new javax.swing.JInternalFrame(); kulunutAika = new javax.swing.JTextField(); reitinPituus = new javax.swing.JTextField(); jTextField3 = new javax.swing.JTextField(); jTextField4 = new javax.swing.JTextField(); Astar = new javax.swing.JCheckBox(); kaydytPisteet = new javax.swing.JCheckBox(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setMinimumSize(new java.awt.Dimension(50, 50)); setPreferredSize(new java.awt.Dimension(1000, 850)); setResizable(false); kuvaLista.setModel( new javax.swing.AbstractListModel() { String[] strings = {"Kuva 1", "Kuva 2", "Kuva 3"}; public int getSize() { return strings.length; } public Object getElementAt(int i) { return strings[i]; } }); kuvaLista.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION); kuvaLista.setToolTipText(""); kuvaLista.setSelectedIndex(0); kuvaLista.addMouseListener( new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { kuvaListaMouseClicked(evt); } }); jScrollPane1.setViewportView(kuvaLista); Ratkaise.setText("Ratkaise"); Ratkaise.addMouseListener( new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { RatkaiseMouseClicked(evt); } }); kuvaKentta.setIcon( new javax.swing.ImageIcon(getClass().getResource("/Kuvat/kuva0.jpg"))); // NOI18N kuvaKentta.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM); kuvaKentta.addMouseListener( new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { kuvaKenttaMouseClicked(evt); } }); lisaaUusiKuva.setText("Lisää uusi kuva"); lisaaUusiKuva.addMouseListener( new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { lisaaUusiKuvaMouseClicked(evt); } }); valintaRuudut.add(dijkstra); dijkstra.setMnemonic('0'); dijkstra.setSelected(true); dijkstra.setText("Dijkstra"); valintaRuudut.add(bellmanFord); bellmanFord.setMnemonic('1'); bellmanFord.setText("Bellman Ford"); valintaRuudut.add(Dijkstra8); Dijkstra8.setMnemonic('2'); Dijkstra8.setText("Dijkstra8"); jTextField1.setEditable(false); jTextField1.setText(" Alku piste "); jTextField1.setBorder(null); ratkaisuKentta.setIcon( new javax.swing.ImageIcon(getClass().getResource("/Kuvat/kuva0.jpg"))); // NOI18N ratkaisuKentta.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM); ratkaisuKentta.addMouseListener( new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { ratkaisuKenttaMouseClicked(evt); } }); jTextField2.setEditable(false); jTextField2.setText(" Loppu piste "); jTextField2.setBorder(null); jTextField2.addActionListener( new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jTextField2ActionPerformed(evt); } }); poistaKuva.setText("Poista kuva"); poistaKuva.addMouseListener( new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { poistaKuvaMouseClicked(evt); } }); jFileChooser1.setCurrentDirectory(new java.io.File("C:\\Koulu\\2013\\Tiralabra\\Kuvat")); jFileChooser1.addActionListener( new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jFileChooser1ActionPerformed(evt); } }); frame.setVisible(true); javax.swing.GroupLayout frameLayout = new javax.swing.GroupLayout(frame.getContentPane()); frame.getContentPane().setLayout(frameLayout); frameLayout.setHorizontalGroup( frameLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 237, Short.MAX_VALUE)); frameLayout.setVerticalGroup( frameLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 188, Short.MAX_VALUE)); jTextField3.setEditable(false); jTextField3.setText(" Reitin pituus "); jTextField3.setBorder(null); jTextField4.setEditable(false); jTextField4.setText(" Aikaa kului ms "); jTextField4.setBorder(null); jTextField4.addActionListener( new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jTextField4ActionPerformed(evt); } }); valintaRuudut.add(Astar); Astar.setMnemonic('3'); Astar.setText("Astar"); kaydytPisteet.setMnemonic('c'); kaydytPisteet.setText("Näytetään kaikki käydyt pisteet"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( layout .createSequentialGroup() .addGroup( layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( layout .createSequentialGroup() .addContainerGap(402, Short.MAX_VALUE) .addComponent( frame, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(96, 96, 96) .addComponent( jFileChooser1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup( layout .createSequentialGroup() .addGroup( layout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent(dijkstra) .addComponent(bellmanFord)) .addGap(22, 22, 22) .addGroup( layout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent(kaydytPisteet) .addComponent(Astar)) .addGap(0, 0, Short.MAX_VALUE))) .addGap(127, 127, 127)) .addGroup( layout .createSequentialGroup() .addGroup( layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( layout .createSequentialGroup() .addContainerGap() .addGroup( layout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent(kuvaKentta) .addGroup( layout .createSequentialGroup() .addGroup( layout .createParallelGroup( javax.swing.GroupLayout.Alignment .LEADING) .addComponent( kuvanAlkuPiste, javax.swing.GroupLayout .PREFERRED_SIZE, 150, javax.swing.GroupLayout .PREFERRED_SIZE) .addComponent( jTextField1, javax.swing.GroupLayout .PREFERRED_SIZE, javax.swing.GroupLayout .DEFAULT_SIZE, javax.swing.GroupLayout .PREFERRED_SIZE)) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement .RELATED) .addGroup( layout .createParallelGroup( javax.swing.GroupLayout.Alignment .LEADING) .addComponent( jTextField2, javax.swing.GroupLayout .PREFERRED_SIZE, javax.swing.GroupLayout .DEFAULT_SIZE, javax.swing.GroupLayout .PREFERRED_SIZE) .addComponent( kuvanLoppuPiste, javax.swing.GroupLayout .PREFERRED_SIZE, 150, javax.swing.GroupLayout .PREFERRED_SIZE)))) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup( layout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent(ratkaisuKentta) .addGroup( layout .createSequentialGroup() .addGroup( layout .createParallelGroup( javax.swing.GroupLayout.Alignment .LEADING) .addComponent( reitinPituus, javax.swing.GroupLayout .PREFERRED_SIZE, 150, javax.swing.GroupLayout .PREFERRED_SIZE) .addComponent( jTextField3, javax.swing.GroupLayout .PREFERRED_SIZE, javax.swing.GroupLayout .DEFAULT_SIZE, javax.swing.GroupLayout .PREFERRED_SIZE)) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement .RELATED) .addGroup( layout .createParallelGroup( javax.swing.GroupLayout.Alignment .LEADING) .addComponent( jTextField4, javax.swing.GroupLayout .PREFERRED_SIZE, javax.swing.GroupLayout .DEFAULT_SIZE, javax.swing.GroupLayout .PREFERRED_SIZE) .addComponent( kulunutAika, javax.swing.GroupLayout .PREFERRED_SIZE, 150, javax.swing.GroupLayout .PREFERRED_SIZE))))) .addComponent(Ratkaise)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGroup( layout .createSequentialGroup() .addGroup( layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent( jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(Dijkstra8)) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup( layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(poistaKuva) .addComponent(lisaaUusiKuva)) .addGap(109, 109, 109))); layout.setVerticalGroup( layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( layout .createSequentialGroup() .addGroup( layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( layout .createSequentialGroup() .addContainerGap() .addGroup( layout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup( layout .createSequentialGroup() .addComponent(poistaKuva) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement .RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(lisaaUusiKuva) .addGap(55, 55, 55)) .addComponent( jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 125, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup( layout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent(Astar) .addComponent( dijkstra, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup( layout .createParallelGroup( javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(bellmanFord) .addComponent(kaydytPisteet)) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(Dijkstra8) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(Ratkaise) .addGap(44, 44, 44) .addComponent( frame, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup( layout .createSequentialGroup() .addGap(87, 87, 87) .addComponent( jFileChooser1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED, 291, Short.MAX_VALUE) .addGroup( layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( layout .createSequentialGroup() .addComponent(kuvaKentta) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup( layout .createParallelGroup( javax.swing.GroupLayout.Alignment.BASELINE) .addComponent( kuvanAlkuPiste, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent( kuvanLoppuPiste, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup( layout .createParallelGroup( javax.swing.GroupLayout.Alignment.BASELINE) .addComponent( jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent( jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent( jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGroup( layout .createSequentialGroup() .addComponent(ratkaisuKentta) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup( layout .createParallelGroup( javax.swing.GroupLayout.Alignment.BASELINE) .addComponent( reitinPituus, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent( kulunutAika, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent( jTextField4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap())); pack(); } // </editor-fold>//GEN-END:initComponents