labyrinth im 2d array

tameck

Erfahrenes Mitglied
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
Code:
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
Code:
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
 
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.
 
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
 
Gut, sagen wir mal eine Mauer ist bei dir "#" eine Raute:

Code:
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.
 
hey danke funktioniert fast
habs jetzt so gemacht
Code:
	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
 
@mimij85
Hab ich ihm vorgeschlagen, damit er besser sieht ob es funktioniert.

@tameck
Versuchs mal mit 'equals("#")'. Warum machst du eigentlich
Code:
(char)35
?
 
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"
 
Zurück