X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=spa2-materijali.git;a=blobdiff_plain;f=PretrazivanjeSaVracanjem%2FLavirint%2FSuperKomplikovanoResenje%2FMapa.java;fp=PretrazivanjeSaVracanjem%2FLavirint%2FSuperKomplikovanoResenje%2FMapa.java;h=a39c662ac284ec6068414181c93b7a7437bf3df7;hp=0000000000000000000000000000000000000000;hb=548ea5272576d592053c4e99f512b2fadc1053f7;hpb=1b832014e4d2d31b2502f4688623140d722005b1 diff --git a/PretrazivanjeSaVracanjem/Lavirint/SuperKomplikovanoResenje/Mapa.java b/PretrazivanjeSaVracanjem/Lavirint/SuperKomplikovanoResenje/Mapa.java new file mode 100644 index 0000000..a39c662 --- /dev/null +++ b/PretrazivanjeSaVracanjem/Lavirint/SuperKomplikovanoResenje/Mapa.java @@ -0,0 +1,94 @@ + +/** + * Klasa Mapa koristi se za reprezentaciju lavirint i njegovih polja. + */ +public class Mapa { + + // Vrednosti polja i njihova znacenja + public final static int IZLAZ = -5; + public final static int ZID = -1; + public final static int GRESKA = Integer.MIN_VALUE; + + // Dimenzije mape + private int visina, sirina; + + // Polja mape + private int[][] mat; + + // Prilikom pretrazivanja ovde mozemo pamtiti koja polja smo posetili a koja nismo + private boolean[][] pos; + + public int getSirina() { + return sirina; + } + + public int getVisina() { + return visina; + } + + public void setPos(int x, int y, boolean b) { + if (0 <= x && x < sirina && 0 <= y && y < visina) { + pos[x][y] = b; + } + } + + public boolean getPos(int x, int y) { + if (0 <= x && x < sirina && 0 <= y && y < visina) { + return pos[x][y]; + } else { + return true; + } + } + + public int getMat(int x, int y) { + if (0 <= x && x < sirina && 0 <= y && y < visina) { + return mat[x][y]; + } else { + return GRESKA; + } + } + + public Mapa(int sirina, int visina) { + this.sirina = sirina; + this.visina = visina; + mat = new int[sirina][visina]; + pos = new boolean[sirina][visina]; + } + + public Mapa(String imeFajla) { + if (!Svetovid.testIn(imeFajla)) { + throw new RuntimeException("Fajl za kreiranje mape (" + imeFajla + ") nije prisupacan"); + } + sirina = Svetovid.in(imeFajla).readInt(); + visina = Svetovid.in(imeFajla).readInt(); + mat = new int[sirina][visina]; + pos = new boolean[sirina][visina]; + for (int j = 0; j < visina; j++) { + for (int i = 0; i < sirina; i++) { + mat[i][j] = Svetovid.in(imeFajla).readInt(); + } + } + Svetovid.closeIn(imeFajla); + Prikaz.boja(ZID, Prikaz.CRNA, null); + Prikaz.boja(IZLAZ, Prikaz.CRVENA, Prikaz.BELA); + Prikaz.boja(1, 20, Prikaz.SVETLO_ZELENA, Prikaz.ZELENA, Prikaz.CRNA); + Prikaz.boja(99, Prikaz.ZUTA, Prikaz.CRNA); + Prikaz.mapa("Lavirint", getSirina(), getVisina(), this::getMat); + } + + public void stampaj() { + if (visina != 0 && sirina != 0) { + System.out.println(visina + " " + sirina); + for (int j = 0; j < visina; j++) { + for (int i = 0; i < sirina; i++) { + System.out.print(mat[i][j] + "\t"); + } + System.out.println(); + } + } + } + + public String toString() { + return "Mapa velicine " + sirina + " x " + visina; + } +}