Java/Tutorials/Entwicklung eines einfachen Karteneditors III/Kapitel 1

Aus Scientia
Wechseln zu: Navigation, Suche

Als erstes erweitern wir unsere Karten Klasse vom Maker und von der Engine um eine Klassevariable:

int passmap[];

und am Ende des Konstruktor schreiben wir, dies hinzu:

this.passmap=new int[tileset.size()];

Das machen wir, weil wir bestimmen wollen welche Tile begehbar und welche nicht ist.

In der Karten-Klasse der Engine fügen wir zusätzlich noch in der Methode ladeKarte folgendes hinzu:

int[] passmap=(int[]) lese.readObject();

Nach dem laden der Karte:

geladeneKarte.passmap=passmap;

Das machen wir, weil wir die passmap, in jeder Karte erneut bestimmen wollen.

Am Ende sieht es so aus wie diese beiden Klassen, man beachte die Position der Änderungen!

Karten-Klasse der Engine

 
public class Karte
{
 
	int[] passmap;
	int[][] karte;
 
	int breite;
	int höhe;
 
	String kartenName;
	String tilesetDateiname;
 
	ArrayList<BufferedImage> tileset=new ArrayList<BufferedImage>();
 
	public Karte(int[][] karte, String dateiname, String name)
	{
		this.kartenName=name;
		this.karte=karte;
		this.tilesetDateiname=dateiname;
		breite=karte.length;
		höhe=karte[0].length;
 
		try {
			BufferedImage bildTileset=ImageIO.read(new File(dateiname));
			int breite=bildTileset.getWidth()/32;
			int höhe=bildTileset.getHeight()/32;
			for(int x=0;x<breite;x++)
			{
				for(int y=0;y<höhe;y++)
				{
					BufferedImage tile=bildTileset.getSubimage(x*32, y*32, 32, 32);
					this.tileset.add(tile);
				}				
			}
		} catch (IOException fehler) {
			fehler.printStackTrace();
		}
		this.passmap=new int[tileset.size()];
	}
 
 
	public BufferedImage getTileImage(int x, int y)
	{
		int tile=karte[x][y];
		return tileset.get(tile);
	}
 
	public void setTile(int x, int y, int tileID)
	{
		karte[x][y]=tileID;
	}
 
	public static Karte ladeKarte(String kartendateiname)
	{
		try {
			FileInputStream datei = new FileInputStream(new File(kartendateiname));
			BufferedInputStream buf=new BufferedInputStream(datei);
			ObjectInputStream lese = new ObjectInputStream(buf);
 
			int[][]karte=(int[][]) lese.readObject();
			String name=(String) lese.readObject();
			String dateiname=(String) lese.readObject();
 
			Karte geladeneKarte=new Karte(karte,dateiname, name);
 
			lese.close();
			return geladeneKarte;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return null;
	}
}


Engine Karten-Klasse:

public class Karte
{
	int[][] karte;
	int[] passmap;
 
	String kartenName;
	String tilesetDateiname;
 
	ArrayList<BufferedImage> tileset=new ArrayList<BufferedImage>();
 
	public Karte(int[][] karte, String dateiname, String name)
	{
		this.kartenName=name;
		this.karte=karte;
		this.tilesetDateiname=dateiname;
		try {
			BufferedImage bildTileset=ImageIO.read(new File(dateiname));
			int breite=bildTileset.getWidth()/32;
			int höhe=bildTileset.getHeight()/32;
			for(int x=0;x<breite;x++)
			{
				for(int y=0;y<höhe;y++)
				{
					BufferedImage tile=bildTileset.getSubimage(x*32, y*32, 32, 32);
					this.tileset.add(tile);
				}				
			}
		} catch (IOException fehler) {
			fehler.printStackTrace();
		}
		this.passmap=new int[tileset.size()];
	}
 
 
	public BufferedImage getTileImage(int x, int y)
	{
		int tile=karte[x][y];
		return tileset.get(tile);
	}
 
	public void setTile(int x, int y, int tileID)
	{
		karte[x][y]=tileID;
	}
}