Witam szukam pomysły na rozwiązanie problemu. Napisałem gotowy program konsolowy, jednak chciałbym zrobić go w graficznej formie. Tutaj pojawia się problem w programie samoloty mają poruszać się pomiędzy punktami, jednak cały program jest bez współrzędnych opiera się na odległościach. Czy jest możliwość wykonania czegoś takiego w taki sposób, czy jednak muszę przerabiać wszystko na współrzędnych?

package data;

import java.util.ArrayList;
import java.util.Random;

public class Start {

    public static void main(String[] args) {
        new Start();
    }
    public Start()
    {
        String[] airportName = {"Wrocław", "Karków", "Warszawa"};
        double[][] distance = {{0, 235, 308}, {235, 0, 527}, {235, 409, 0} };
        ArrayList<Airport> airport = new ArrayList<Airport>();
        Random generator = new Random();

        for(int i=0; i<airportName.length; i++)
        {
            airport.add(new Airport (airportName[i], distance [i]));
        }

        int planeNumber = generator.nextInt(40)+10, start, end;

        for(int i=0; i<planeNumber; i++)
        {
            start = generator.nextInt(3);
            end = generator.nextInt(3);
            while(start==end)
            {
                end = generator.nextInt(3);
            }   
            (new Airplane(i, start, end, 350+generator.nextInt(250), airport)).start();
            try{
                Thread.sleep(150);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }       
}
package data;

import java.util.ArrayList;
import java.util.Random;

public class Airplane extends Thread {
    private int id;
    private int fuel;
    private int start;
    private int end;
    private ArrayList<Airport> air;
    public Airplane(int id, int start, int end, int fuel, ArrayList<Airport> air) {
        super();
        this.id = id;
        this.fuel = fuel;
        this.start = start;
        this.end = end;
        this.air = air;
    }
    public long getId() {
        return id;
    }
    public int getFuel() {
        return fuel;
    }
    public int getStart() {
        return start;
    }
    public int getEnd() {
        return end;
    }
    public void setId(int id) {
        this.id = id;
    }
    public void setFuel(int fuel) {
        this.fuel = fuel;
    }
    public void setStart(int start) {
        this.start = start;
    }
    public void setEnd(int end) {
        this.end = end;
    }
    public void run () {
        int fly=0;
        Random generator = new Random();
        while(true){
            if(fly==0){
                System.out.println("Samolot "+id+" wylecial z lotniska w "+air.get(start).getName()+" do " + air.get(end).getName());
                air.get(start).setRunway(false);
                System.out.println("Samolot o nr "+id+ " leci do lotniska "+ air.get(end).getName());
            }
            if(fly>fuel){
                System.out.println("Samolot "+id+" rozbil sie z powodu paliwa");
                System.out.println("Utworzenie nowego samolotu o id "+id+"");
                int start2, end2;
                start2 = generator.nextInt(3);
                end2 = generator.nextInt(3);
                while(end2==start2)
                {
                    end2 = generator.nextInt(3);
                }
                (new Airplane(id, 350+generator.nextInt(250), start2, end2, air)).start();
                break;
            }
            if(fly<air.get(start).getDistance(end)){
                fly++;
            }
            else{
                if(air.get(end).getRunway()==true){
                    System.out.println("Samolot "+id+" oczekuje na zwolnienie pasa w "+air.get(end).getName());
                    fly++;
                }
                else{
                    air.get(end).setRunway(true);
                    System.out.println("Samolot "+id+" zajmuje pas na lotnisku w "+air.get(end).getName());
                    System.out.println("Samolot "+id+" wyladowal na lotnisku w "+air.get(end).getName());
                    start=end;
                    end = generator.nextInt(3);
                    while(end==start){
                        end = generator.nextInt(3);
                    }
                    fly = 0;
                }
            }
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    e.printStackTrace();

            }
        }

    }

}
package data;

public class Airport {
    private String name;
    private boolean runway;
    private double[] distance;
    public Airport(String name, double[] distance) {
        super();
        this.name = name;
        this.runway = false;
        this.distance = distance;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public synchronized boolean getRunway() {
        return runway;
    }
    public synchronized void setRunway(boolean runway) {
        this.runway = runway;
    }
    public double getDistance(int id) {
        return distance[id];
    }

}