Denkfehler ^^ ?!

kaoZ

Top Contributor
Ich spiele grad ein wenig mit den Graphics Objekten herum und habe hier glaube ich einen Denkfehler den ich übersehe , also ich habe eine map in form einer Map Datei

Map1-1.map
Code:
10
10
1 1 1 1 1 1 1 1 1 1 
1 0 0 1 1 1 0 0 0 1
1 1 1 1 0 0 0 0 0 1
1 0 0 0 0 0 1 1 1 1
1 0 0 0 1 1 0 0 0 1
1 1 1 0 0 0 0 0 0 1
1 0 0 0 0 0 1 1 1 1
1 1 1 0 0 0 0 1 1 1
1 0 0 0 0 0 0 0 0 1 
1 1 1 1 1 1 1 1 1 1

Die erste Zeile repräsentiert Zeilen , die zweite die Spalten ab der 3ten wird die map gemapped ^^

Die map wird dann im Konstruktor über den Pfad direkt eingelesen:

Java:
	public SimpleMapTest(String s) {
		
		InputStreamReader in;
		BufferedReader reader;
		
		try {
			in = new InputStreamReader(getClass().getResourceAsStream(s));
			reader = new BufferedReader(in);
			
			numRows = Integer.parseInt(reader.readLine());
			numCols = Integer.parseInt(reader.readLine());
			
			map = new int[numRows][numCols];

			String delimiter = "\\s+";

			for (int row = 0; row < numRows; row++) {
				String line = reader.readLine(); // read line
				String[] tokens = line.split(delimiter); // split line
				for (int col = 0; col < numCols; col++) {
					map[row][col] = Integer.parseInt(tokens[col]);
				}
			}
			
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		
	}


das klappt wunderbar, auch die ausgabe in der Konsole über diese Methode habe ich erfolgreich implementiert :

Java:
public void printMap(){
		for (int row = 0; row < numRows; row++) {
			for (int col = 0; col < numCols; col++) {
				System.out.print(map[row][col]);
			}
			System.out.println();
		}
	}

nun möchte ich die Map optisch darstellen, und habe hierzu folgende methode implementiert :

Java:
	public void drawMap(Graphics g){
		
		for (int row = 0; row < numRows; row++) {
			for (int col = 0; col < numCols; col++) {
				if (map[row][col] == 0) {
					g.setColor(Color.WHITE);
				}
				if (map[row][col] == 1) {
					g.setColor(Color.BLACK);
				}
				
				g.fillRect(row * 30, col * 30, 50, 50);
			}
		}
		
		
	}

funktioniert auch soweit nur das er mir die map dann vollkommen spiegelverkehrt, wie man hier schön erkennen kann




abbildet, es muss also ein Denkfehler mit dem 2dim array sein ich sehe ihn nur grade nicht :D

vielleicht erblickt es ja jemand auf Anhieb :D

hier noch die main Methode, die ja eigentlich irrelevant sein sollte :

Java:
public class Foo {

	public static void main(String[] args) {
		final SimpleMapTest t = new SimpleMapTest("Map1-1.map");
		
		JPanel panel = new JPanel(){
			
			@Override
			public void paintComponent(Graphics g){
				super.paintComponent(g);
				t.drawMap(g);
			}
		};
		
		JFrame f = FrameUtil.createFrame("test", 2, null, panel);
		f.setSize(250,50);
		f.setVisible(true);
	}
	
}
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
die Größe war erst einmal nur um zu sehen ob er es überhaupt zeichnet , und nicht nur mit einem pixel darstellt ^^

dammit , immer diese Grüzte mit dem x und y bei n-dim Arrays im Vergleich zum normalen Koordinaten System:lol:


danke für den denkanstoß :D

so passt es nun :

Java:
public class SimpleMapTest {
	
	int numRows;
	int numCols;
	int position;
	
	int tileSize;
	int numTilesAcross;
	
	int[][] map;
	
	public SimpleMapTest(String s) {
		
		setTileSize(10);
		
		InputStreamReader in;
		BufferedReader reader;
		
		try {
			in = new InputStreamReader(getClass().getResourceAsStream(s));
			reader = new BufferedReader(in);
			
			numRows = Integer.parseInt(reader.readLine());
			numCols = Integer.parseInt(reader.readLine());
			
			numTilesAcross = numRows;
			
			map = new int[numRows][numCols];

			String delimiter = "\\s+";

			for (int row = 0; row < numRows; row++) {
				String line = reader.readLine(); // read line
				String[] tokens = line.split(delimiter); // split line
				for (int col = 0; col < numCols; col++) {
					map[row][col] = Integer.parseInt(tokens[col]);
				}
			}
			
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		
	}
	
	public void printMap(){
		for (int row = 0; row < numRows; row++) {
			for (int col = 0; col < numCols; col++) {
				System.out.print(map[row][col]);
			}
			System.out.println();
		}
	}
	
	public void drawMap(Graphics g){
		
		for (int row = 0; row < numRows; row++) {
			for (int col = 0; col < numCols; col++) {
				if (map[row][col] == 0) {
					g.setColor(Color.WHITE);
				}
				if (map[row][col] == 1) {
					g.setColor(Color.BLACK);
				}
				g.fillRect(col * tileSize, row * tileSize, tileSize, tileSize);
			}
		}
	}
	
	public void setTileSize(int size){
		this.tileSize = size;
	}
	
	public int getNumTilesAcross()			{return this.numTilesAcross;}
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen

Ähnliche Java Themen


Oben