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];
}
}