# labyrinth im 2d array



## tameck (4. Dezember 2007)

hallo zusammen 

bin immer noch mit meinen labyrinth beschäftigt funktioniert bis jetzt einwandfrei nur muss ich jetzt noch die mauern aktivieren... 
das labyrinth wird in ein 2d array geladen und mit ascii zeichen gefüllt die spielfigur und das ziel sind auch ascii zeichen die spielfigur darf nicht durch die ascii mauern laufen weiß aber nicht wie ich das machen soll 
ich poste euch mal den kompletten quelltext vielleicht weiß ja einer von euch eine lösung würde mich freuen 

Main

```
package Schule;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Labyrinth lab= new Labyrinth();
		lab.generiere();
		lab.setzespielfigur();
		lab.setzeziel();
		lab.zeichneFeld();
		lab.bewegespielfigur();
		
	}

}
```

Labyrinth Klasse

```
package Schule;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;

	public class Labyrinth{
		private static Random zufallszahl = new Random();
		private static int ergebnis;
		private static int[] [] array = new int[10][40];
		private static int x;
		private static int y;
		private static int beenden = 0;
		private static String input;
		private static int k;
		private static int j;
		private static int u;
		private static int i;
		private static int kory;
		private static int korx;
		private static int a;
		private static int s;
		
		
//Generiere Spielfeld---------------------------------------
		public void zeichneFeld(){
			for(k=0; k<10; k++){
				for(j=0; j<40; j++){			    	  
			    	  System.out.print((char)array[k][j]);
				}
				System.out.println();
			}
		
		}
//Generiere Labyrinth---------------------------------------	
		public void generiere(){
			System.out.println("Spielfeld");
			
			for( i=0; i<10; i++){			
		      for( u=0; u<40; u++){		    	   
		    	  ergebnis=Math.abs(zufallszahl.nextInt() % 4)+ 1;
		    	  if(ergebnis==1)
		    	  array[i][u]= 35;
		    	  
		    	  if(ergebnis==2||ergebnis==3||ergebnis==4)
		    	  array[i][u]= 160;
		    	  
		    	  for(kory = 0; kory<=39;kory++){
						array[0][kory]=35;	
						array[9][kory]=35;
				}
		    	  for(korx = 0; korx<=9;korx++){
		    		  	array[korx][0]=35;
		    		  	array[korx][39]=35;
		    	  }
		      }
			} 
		}
//Generiere Spielfigur------------------------------------------------------
		public void setzespielfigur(){	
				x=Math.abs(zufallszahl.nextInt()%10)+1;
				y=Math.abs(zufallszahl.nextInt()%10)+1;
				array[x][y]=169;
		
		}
//Generiere Ziel------------------------------------------------------------
		public void setzeziel(){
		
			array[8][26]=90;

		}
//Generiere Steuerung-------------------------------------------------------
		public void bewegespielfigur() {
		
			InputStreamReader isr = new InputStreamReader ( System.in );
			BufferedReader stdin = new BufferedReader ( isr ); 
		
			while(beenden==0){
				try {
					input = stdin.readLine();
				} catch (IOException e) {
				
					e.printStackTrace();
				}
		//Taste zum nach oben laufen----------------------------------------- 
				if(input.equals("w")){
					
					array[x][y]=32;	
					x=x-1;
					array[x][y]=169;
					
					if(array[x][y]== (char)35){
						x=x+1;
					}
				
					for(int i=0; i<=8; i++){
						System.out.println();	
					}
				
					for(k=0; k<10; k++){
						for(j=0; j<40; j++){			    	  
					    	  System.out.print((char)array[k][j]);
						}
						System.out.println();
					}
					System.out.println("X"+x+"Y"+y);
					
					if(x==8&&y==26){
						System.out.println("Sie haben Gewonnen!\n Drücken Sie e zum Beenden! ");
						System.out.println("X"+x+"Y"+y);
					}
					
					for(kory = 0; kory<=26;kory++){
					if(x==0&&y==kory){
						array[x][y]=160;
						x=x+1;
					}
					}
					array[x][y]=169;
					
				}
		//Taste zum links laufen-------------------------------------------- 
				else if(input.equals("a")){
					
					array[x][y]=160;
					
					y=y-1;
					
					array[x][y]=169;
					
					for(int i=0; i<=8; i++){
						
						System.out.println();
						
					}
					
					for(k=0; k<10; k++){
						for(j=0; j<40; j++){			    	  
					    	  System.out.print((char)array[k][j]);
						}
						System.out.println();
					}
					System.out.println("X"+x+"Y"+y);
					if(x==8&&y==26){
						System.out.println("Sie haben Gewonnen!\n Drücken Sie e zum Beenden! ");
						System.out.println("X"+x+"Y"+y);
					}
					for(int korx = 0; korx<=10;korx++){
						if(x==korx&&y==0){
							array[x][y]=160;
							y=y+1;
						}
						}
				}
		//Taste zum runter laufen-----------------------------------------------------------
				else if(input.equals("s")){
					
					array[x][y]=160;
					
					x=x+1;
					
					array[x][y]=169;
					
					for(int i=0; i<=8; i++){
						
						System.out.println();
						
					}
					
					for(k=0; k<10; k++){
						for(j=0; j<40; j++){			    	  
					    	  System.out.print((char)array[k][j]);
						}
						System.out.println();
					}
					System.out.println("X"+x+"Y"+y);
					
					if(x==8&&y==26){
						System.out.println("Sie haben Gewonnen!\n Drücken Sie e zum Beenden! ");
						System.out.println("X"+x+"Y"+y);
					}
					for(kory = 0; kory<=26;kory++){
						if(x==9&&y==kory){
							array[x][y]=160;
							x=x-1;
						}
						}
					
				}
		//Taste zum rechts laufen---------------------------------------------------------
				else if(input.equals("d")){
					
					array[x][y]=160;
					
					y=y+1;
					
					array[x][y]=169;
					
					for(int i=0; i<=8; i++){
						
						System.out.println();
						
					}
					
					for(k=0; k<10; k++){
						for(j=0; j<40; j++){			    	  
					    	  System.out.print((char)array[k][j]);
						}
						System.out.println();
					}
					System.out.println("X"+x+"Y"+y);
					
					if(x==8&&y==26){
						System.out.println("Sie haben Gewonnen!\n Drücken Sie e zum Beenden! ");
						
					}
					for(int korx = 0; korx<=10;korx++){
						if(x==korx&&y==39){
							array[x][y]=160;
							y=y-1;
						}
						}
				}
		//Taste für Ende------------------------------------------------------------------------
				else if(input.equals("e")){
					
					System.out.println("ende");
					beenden = beenden + 1;
				}
				
			}
			
		}
}
```

freue mich über eure antworten 

mfg tameck


----------



## Matze (4. Dezember 2007)

Wo ist jetzt die Frage? Wenn es darum geht dass man nicht durch Mauern kann, dann ist das ganz einfach:
Wenn deine Figur z.b. auf Feld 5 (mal nur X Achse) steht und du drückst links, dann will deine Figur ja auf Feld 4. Also frägst du vorher ab, ob da (Feld 4) eine Mauer ist. Wenn ja, dann soll die Figur ihre Position behalten.


----------



## tameck (4. Dezember 2007)

genau das ist mir klar nur bekomme ich diese abfrage einfach nicht hin wenn du in meinen anderen beitrag schaust char wert in 2d array siehst du wie ich es schon versucht habe 

gruß tameck


----------



## Matze (4. Dezember 2007)

Gut, sagen wir mal eine Mauer ist bei dir "#" eine Raute:


```
switch(Richtung){
  case links: {
                  if(array[<jetzige X Position> - 1][jetzige Y Position] == "#"){
                    System.out.println("Hier ist eine Mauer");
                  }else{
                    <Hier deine Bewegung hin>
                  }
}
```

Ist jetzt mal ein Pseudocode.


----------



## tameck (4. Dezember 2007)

hey danke funktioniert fast 
habs jetzt so gemacht 

```
if(array[x-1][y]== (char)35){
						System.out.println("hier mauer");
						array[x][y]=160;
						x=x+1;
						array[x][y]=169;
					}
```

nur erkennt er manchmal en leerzeichen als mauer


----------



## MiMi (4. Dezember 2007)

Warum machst du was wenn dort an der Stelle ine Mauer ist?!


----------



## Matze (4. Dezember 2007)

@mimij85
Hab ich ihm vorgeschlagen, damit er besser sieht ob es funktioniert.

@tameck
Versuchs mal mit 'equals("#")'. Warum machst du eigentlich 
	
	
	



```
(char)35
```
?


----------



## tameck (4. Dezember 2007)

ich zeichne die spielfigur eine koordinate zurück 

x=x+1; 

weil sonst läuft die da doch immernoch druch


----------



## MiMi (4. Dezember 2007)

Also wenn du die die Forwaertstaste drueckst, und dort ist ne Mauer, laesst du sie zuruecklaufen? 
Die muss doch dann einfach gar nichts machen?

@Matze
Du hast ihm aber in das "else" geschrieben "hier die Bewegung hin" und net in das "if"


----------



## Matze (4. Dezember 2007)

Der Teil ist wircklich sinnlos. Du solltest erst Prüfen und dann eventuell gehen.


----------



## tameck (4. Dezember 2007)

und wie sage ich ihr das wenn da ne mauer kommt das die spielfigur in diese richtung nicht weiterlaufen kann ?


----------



## Matze (4. Dezember 2007)

@mimij
Ob mans jetzt so macht oder umgedreht ist doch erstmal egal.


----------



## Matze (4. Dezember 2007)

Das erzähl ich dir doch die ganze Zeit. Prüfe ob da ne Mauer ist. Wenn ja, dann führe keine Bewegung aus und wenn da keine ist, dann führe die Bewegung aus


----------

