Select Git revision
      
  adminlib.php
  WallBasedPathfinder.java  3.21 KiB 
package approach3.parallel;
import approach3.parallel.operations.Trace;
import structs.Int3;
import structs.Vec3;
import java.awt.*;
import java.util.ArrayList;
public class WallBasedPathfinder {
    public void find() {
        int beginX = SharedRessources.getInstance().getStart().x;
        int beginY = SharedRessources.getInstance().getStart().y;
        int endX = SharedRessources.getInstance().getEnd().x;
        int endY = SharedRessources.getInstance().getEnd().y;
        SharedRessources
                .getInstance()
                .getExecutor()
                .execute(new Trace(endX, endY, beginX, beginY, 0));
    }
    ArrayList<Point> debug = new ArrayList<>();
    public ArrayList<Point> calculatePath(int startX, int startY, int destX, int destY) {
        int x = startX;
        int y = startY;
        while (x != destX || y != destY) {
            debug.add(new Point(x, y));
            Int3 currentDir
                    =
                    SharedRessources.getInstance().getData(x, y);
            int dx = (int) currentDir.getX();
            int dy = (int) currentDir.getY();
            if (dx == 0 && dy == 0)
                break;
            x += dx;
            y += dy;
        }
        System.out.println("Done.");
        return debug;
    }
    public void draw(Graphics g) {
        for (int j = 0; j < SharedRessources.getInstance().getHeight(); j++) {
            for (int i = 0; i < SharedRessources.getInstance().getWidth(); i++) {
                if (SharedRessources.getInstance().isWall(i, j)) {                    g.setColor(Color.blue);
                    g.fillRect(i * 5, j * 5, 5, 5);
                } else {
                    int dx = (int) SharedRessources.getInstance().getData(i, j).getX() * 5;
                    int dy = (int) SharedRessources.getInstance().getData(i, j).getY() * 5;
                    if (dx != 0 || dy != 0) {
                        int green = SharedRessources.getInstance().getStep(i, j);
                        if (green >= 255)
                            green = 255;
                        Color color
                                = new Color(0, 255, 0);
                        g.setColor(color);
                        g.fillRect(i * 5, j * 5, 5, 5);
                        g.setColor(Color.red);
                        g.drawLine(i * 5, j * 5, i * 5 + dx, j * 5 + dy);
                    } else {
                        g.setColor(Color.black);
                        g.fillRect(i * 5, j * 5, 5, 5);
                    }
                }
            }
        }
        if (SharedRessources.getInstance().getEnd() == null || SharedRessources.getInstance().getStart() == null)
            return;
        g.setColor(Color.yellow);
        g.fillRect(SharedRessources.getInstance().getEnd().x * 5,
                SharedRessources.getInstance().getEnd().y * 5, 5
                , 5);
        g.setColor(Color.red);
        g.fillRect(SharedRessources.getInstance().getStart().x * 5,
                SharedRessources.getInstance().getStart().y * 5
                , 5, 5);
        g.setColor(Color.red);
        for (int i = 0; i < debug.size(); i++)
            g.fillRect(debug.get(i).x * 5, debug.get(i).y * 5, 5, 5);
    }
}