Boulder Dash nachbauen

babuschka

Top Contributor
Natürlich sollst du selber die Textdateien mit den Spielfeldern bestücken.

Das sähe ungefähr so aus:

Java:
wwwwwwwwww
weeeeeeeeeeew
weeeeeeeeeeew
weeeeeedeeeew
weeeeesseeeew
weeeeeeeeeeew
weeeeeeeeeeew
weeeedeeeeeew
weeeeeeeeeeew
wwwwwwwwww

Du erstellst dir selber die Dateien und dann liest du sie zeilenweise ein und füllst dein Spielfeld mit Elementen, die in der Textdatei vorgegeben sind.


Okay, aber wo übergebe ich die von mir erstellten txt.Dateien an die Methode?
 

langhaar!

Bekanntes Mitglied
Gar nicht. Die Methode loadMaps() liest sie von Festplatte.

Geht aber aus der Beschreibung hervor: :rtfm:
Displays a File-Open Dialog to load 1 to n .txt files.
Du musst dir deine Aufgabe schon anschauen.
Klar, dass irgendwann gehässige oder genervte Kommentare kommen.
Man kann dir nur helfen, wenn du auch mitmachst.
 
Zuletzt bearbeitet:

babuschka

Top Contributor
Also, ich muss nachhaken, sorry.

Ich schreibe (zum Beispiel in Notepad) sowas auf, wie Du es eben getan hast.

Ich speichere es - unter welchem Namen? Wo?

Und dann?



Sorry, ich verstehe nicht, wie das funktioniert.

Das grobe Vorgehen ist doch:


1. txt.-Datei erstellen

2. Mit MapProvider einlesen

3. damit Matrix füllen


Aber den Schritt von 1 nach 2 verstehe ich nicht.
 

babuschka

Top Contributor
Das heißt, ich kann also dann auswählen, welche txt-Dateien ich öffnen möchte.

Und in Zeile 22 kann ich das mit dem Matrix-Füllen machen, also mit der Methode aus der Klasse MapParser?
 

Sonecc

Gesperrter Benutzer
Ok, ab jetzt klinke ich mich aus.
Du liest die Hilfe nicht, die Aufgabe nicht und du scheinst nichtmal mit den grundlegendsten Grundlagen von Computern vertraut.
Das ganze macht so leider keinen Sinn und ist für mich reine Zeitverschwendung.
Such dir jemanden der dir direkt helfen kann. Am besten solltest du dabei nochmal ganz von vorne anfangen
 

babuschka

Top Contributor
Ich sage doch, ich verstehe die zeilen 18-26 nicht.

Schreibe ich erst die txt.-Dateien und benutze dann die Klasse MapProvider

oder

benutze ich erst die Methode aus der Klasse MapProvider und erstelle dann die txt.-Datei?
 

langhaar!

Bekanntes Mitglied
Das heißt, ich kann also dann auswählen, welche txt-Dateien ich öffnen möchte.
Ja

Und in Zeile 22 kann ich das mit dem Matrix-Füllen machen, also mit der Methode aus der Klasse MapParser?

Du benutzt den dortigen Beispiel Code und fügst den z.B. in eine Klasse Spiel ein, die den ganzen Ablauf steuert.

benutze ich erst die Methode aus der Klasse MapProvider und erstelle dann die txt.-Datei?
Wie willst du eine Datei laden, die es nicht gibt?
Ich bin auch raus hier.

Vergiss die Aufgabe und lies dir ein Einsteiger Java Buch durch.
 
Zuletzt bearbeitet:

babuschka

Top Contributor
Muss ich
Java:
//for each level
     *    for(String line : level)
     *    {  //for each line in each level
     *       //do some super cool stuff :)

nicht durch irgendwelche Anweisungen ersetzen?...
 
G

Gast2

Gast
Ok, ab jetzt klinke ich mich aus.
Du liest die Hilfe nicht, die Aufgabe nicht und du scheinst nichtmal mit den grundlegendsten Grundlagen von Computern vertraut.
Das ganze macht so leider keinen Sinn und ist für mich reine Zeitverschwendung.
Such dir jemanden der dir direkt helfen kann. Am besten solltest du dabei nochmal ganz von vorne anfangen

Ich schließe mich dem an...

Egal was man dir erklärt du verstehst nichts davon, da dir sämtliche Grundlagen fehlen. Entweder kannst du das alles einfach nicht oder du warst übers Semester einfach zu faul. Ich kann das nicht beurteilen, da wir dir aber auch nicht alles vorkauen können (doch das ist absolut das richtige Wort dafür!) musst du dir ernsthaft Gedanken machen wie das bei dir weitergehen soll.

Mein Tipp ebenfalls: Such dir dringend einen Kommilliton der das mit dir en Persona macht!

Ich hab jetzt Urlaub, daher Adé und viel Glück!
 

babuschka

Top Contributor
Wieder so eine tolle Hilfe...


Ich habe doch eine normale Frage gestellt:

Wo kommt die Klasse MapParser ins Spiel?

Meine Vermutung: In Zeile 22/23 (also in dem Beispiel)
 
F

Firephoenix

Gast
Nochmal als Zusammenfassung zu dem parser (falls der Begriff unklar ist: http://de.wikipedia.org/wiki/Parser):

Du hast Maps in Form einer .txt-Datei. In der ist das Level in der Form beschrieben die schon genannt wurde (Felder bzw Elemente werden durch ihren buchstaben representiert).
Ein Level ist also erstmal nichts anderes als eine Liste aus Textzeilen, also eine Liste aus String, genauer eine List<String>.

Zum merken: List<String> ist hier eine Liste die die Zeilen deiner Datei enthält.
Jetzt willst du aber nicht nur ein Level sondern gleich mehrere auf einmal laden.
Du kriegst also eine Liste von Leveln, genauer eine Liste von Listen von Zeilen = List<List<String>>

Jetzt zum Zugriff darauf:
Angenommen du hast die Level geladen und irgendwo abgelegt.
Jetzt musst du diese überprüfen.
Da du den Code vermutlich öfters benötigen wirst lohnt es sich wohl die prüfung eines Levels als eigene Methode zu schreiben.
ein Möglicher methodenkopf wäre
Java:
public boolean validateLevel(List<String> level){

//Implementierung

}
Die Methode bekommt das Level als Liste aus Strings und prüft es nach den von dir genannten Kriterien:
 es komplett von Wänden umgeben ist.
 genau eine Spielfigur existiert.
 mindestens ein Ausgang existiert.
 es rechteckig ist.
Und jetzt gehst du mal in die Java-Api Java Platform SE 6
und schaust dir dort mal die Klassen String und List an.
Dann überlegst du dir was du in deiner Liste aus zeilen genau prüfen willst, suchst in den entsprechenden Klassen nach Methoden die dir helfen können und versucht das ganze einmal.

Gruß
 

babuschka

Top Contributor
Damit nicht wieder der Eindruck entsteht, dass ich diese Antwort ignoriere:

Ich komme darauf zurück!!


Aber zuerst nochmal: Wo kommt MapParse denn eigentlich dann ins Spiel?...

Also wo im Code?



Ich muss ja die Klasse MapParse schreiben.

Da brauche ich doch die Methode charAt?

Um die Zeilen durchzugehen und damit das Spielfeld zu beschgreiben?
 
Zuletzt bearbeitet von einem Moderator:
F

Firephoenix

Gast
An deinem Code ist das schwer zu sagen, fehlt evtl noch etwas von der Aufgabenstellung oder vorgegebenem Code?

An sich kannst du dir den MapParser aber vorstellen wie eine Schnittstelle die benutzt wird um Level von der Festplatte zu laden.

Benutzt werden könnte er in einem Menü das sich in der Applikation befindet "Load Level..."
Oder auch beim Programmstart um direkt ein Level zu laden das vorgegeben ist.
Das hängt aber davon ab, wie eure Vorgaben sind, bzw wie du selbst dein Programm gestalten willst.

Gruß
 

babuschka

Top Contributor
Habe ich es denn jetzt richtig verstanden, dass ein Element für eine ganze Zeile des Spielfelds steht und dass ich in der Klasse MapParse dann wiederum jede Zeile durchgehen muss und damit das zweidimensionale Arry füllen muss?



Und dass ich dann die Methode aus MapParse dort verwende bei Zeile 22-23?


Edit:

Achso, das ist die ganze Aufgabe 2.

Aber hier noch Aufgabe 3:
Damit das Spiel spielbar wird benotigt ihr noch eine Klasse, die alles zusammenhalt. Entwickelt
dazu die Klasse BoulderDash.
Die Klasse soll zunachst drei Spielwelten von der Festplatte laden. Nehmt dazu Euren MapParser
zur Hilfe. Sind die Welten geladen, soll die erste Welt in der GUI angezeigt werden. Die Benutzung
der Gui lasst sich aus der Doxygen-Dokumentation entnehmen.
Anschlieend werden so lange Spielzuge ausgefuhrt bis die Spiel gur entweder zermalmt ist oder
gefressen wurde oder auf den Ausgang bewegt wurde. Im letzteren Fall geht es weiter zum
nachsten Level. Die Punkte bleiben naturlich erhalten.
Ein Spielzug lauft dabei wie folgt ab:
1. frage die Benutzereingabe aus der Gui ab und teile sie dem Spieler-Objekt mit
2. rufe auf dem Spieler-Objekt performTurn() auf
3. rufe auf allen anderen Elementen performTurn() auf
4. Aktualisiere die Gui
 

babuschka

Top Contributor
Das ist meine Idee zu der Klasse MapParser:

Java:
import java.util.List;

//Die Klasse MapParser

public class MapParser{
	
	
	
	Element[][] parseMap(List<String> map){
		
                           Element[][]spielfeld=new Element[map.size()][map.get(1).length()];                          

		for(int i=0; i<=map.size(), i++){
			
			for(int j=0; j<=map.get(i).length(); j++){
			spielfeld[i][j]=map.get(i).charAt(i);
		}
	}
                    return spielfeld;
}
	
}
 
Zuletzt bearbeitet von einem Moderator:
F

Firephoenix

Gast
Java:
spielfeld[i][j]=map.get(i).charAt(i);
spielfeld[j] ist vom Typ Element
map.get(i).charAt(i) enthält zwar semantisch für dich die Information welches Feld das ist,
für Java ist das allerdings nicht zuweisungskompatibel.
Du musst überprüfen welcher Char genau das ist und basierend darauf ein neues Element-Objekt erzeugen (z.B. einen Diamanten)
Gruß
 

R3van

Mitglied
Hallo java_,

Da in der Lehrveranstaltung Praktische Informatik I an der Universität Bremen genau die selbe Aufgabe gestellt wurde (Wortgleich :D), gehe ich davon aus, dass du ein Teilnehmer dieser Veranstaltung bist.
Ich finde es ein bisschen schade, dass du deine Fragen zu erst in diesem Forum und nicht an uns (die Tutoren) stellst. Erwecken wir den Eindruck, dass wir dir/euch nicht helfen würden?? Es ist unsere Aufgabe euch bei Problemen jeder Art zu helfen (und wenn es die Frage ist, was ein JFileChooser ist). Bei der Aufgabe mit der Kneipe hast du dich auch erst an das Forum gewendet http://www.java-forum.org/java-basics-anfaenger-themen/128437-modellierung-kneipe.html ...

Wenn du weiterhin noch Fragen hast, stehe(n) ich/wir dir gerne zur Verfügung. Du kannst im StudIP einfach ins Forum schreiben, oder dich an einen(oder deinem) Tutor wenden.

Grüße
 

babuschka

Top Contributor
Hallo java_,

Da in der Lehrveranstaltung Praktische Informatik I an der Universität Bremen genau die selbe Aufgabe gestellt wurde (Wortgleich :D), gehe ich davon aus, dass du ein Teilnehmer dieser Veranstaltung bist.

Das ist der Fall.



Ich habe nicht den Eindruck, daß mir nicht geholfen würde; im Gegenteil, mir wurde schon oft geduldig geholfen.


Ich scheue mich auch nicht, meine Fragen an den Tutor zu stellen, nur kann ich wohl kaum Fragen stellen wie "Wie geht das?" - wenn ich mir nicht vorher den Hauch einer Ahnung verschafft habe. Daher stelle ich meine Fragen zuerst hier.
 

babuschka

Top Contributor
Erstmal wünsche ich ein gutes Jahr 2012!

Und dann habe ich meine Klasse "MapParser" ein bisschen weiterentwickelt. Dabei habe ich versucht, mich an die Tipps von Firephoenix zu halten:

Java:
import java.util.List;
 
//Die Klasse MapParser
 
public class MapParser{
	List<String> map;
	Element[][]spielfeld=new Element[map.size()][map.get(1).length()];
    
    Element[][] parseMap(List<String> map){
        
    	   
                           char certainchar;
                           Element newElement;
 
        for(int i=0; i<=map.size(); i++){
            
            for(int j=0; j<=map.get(i).length(); j++){
            certainchar=map.get(i).charAt(i);
            switch(certainchar){
            
            case'P': newElement=new Player(i,j,this); spielfeld[i][j]=newElement; break;
            case'E': newElement=new Erde(i,j,this); spielfeld[i][j]=newElement;break; 
            case'S': newElement=new Stein(i,j,this); spielfeld[i][j]=newElement;break;
            case'M': newElement=new Monster(i,j,this); spielfeld[i][j]=newElement;break;
            case'D': newElement=new Diamant(i,j,this); spielfeld[i][j]=newElement;break;
            case'G': newElement=new Ausgang(i,j,this); spielfeld[i][j]=newElement;break;
            case' ': newElement=new LeeresFeld(i,j,this); spielfeld[i][j]=newElement;break;
            }
            
            
            }
        }
    
                    return spielfeld;
    }       


public char getSpielfeld(int i, int j){
	return spielfeld[i][j].getChar();
}

public void setSpielfeld(int i, int j, char k){
	
	Element newElement2;
	switch(k){
    
    case'P': newElement2=new Player(i,j,this); spielfeld[i][j]=newElement2; break;
    case'E': newElement2=new Erde(i,j,this); spielfeld[i][j]=newElement2;break; 
    case'S': newElement2=new Stein(i,j,this); spielfeld[i][j]=newElement2;break;
    case'M': newElement2=new Monster(i,j,this); spielfeld[i][j]=newElement2;break;
    case'D': newElement2=new Diamant(i,j,this); spielfeld[i][j]=newElement2;break;
    case'G': newElement2=new Ausgang(i,j,this); spielfeld[i][j]=newElement2;break;
    case' ': newElement2=new LeeresFeld(i,j,this); spielfeld[i][j]=newElement2;break;
    }
	
}

}

Wäre das so besser?


Jetzt fehlt noch der Test, ob das Spielfeld valide ist.
Darum kümmere ich mich als nächstes.
 

R3van

Mitglied
Versuche etwas mehr in Komponenten zu denken. Du solltest zunächst eine Klasse haben, welche das Spielfeld repräsentiert und nichts anderes. Sie könnte weiterhin Methoden anbieten, welche dir Zugriff auf die Elemente der Spielwelt gewährt. Eine solche Methode könnte zB. sein:

Java:
public Element getElementAt(int x, int y)
Ich nenne diese Klasse einfach mal World (Map wäre eine ungute Wahl, da es in Java bereits ein solches Interface gibt, welches in einem völlig anderen Kontext steht)

Als nächstes benötigst du eine Komponente, welche dir es ermöglicht Spielfelder anhand einer String-Liste zu erzeugen. Eine, in meinen Augen, gut geeignete Methode könnte doch sein:

Java:
public static World createWorld(List<String> list)
Diese Methode erzeugt nun, so wie du es zB. gemacht hast, die Elemente und schreibt sie in das Array rein. Sinnig wäre es bestimmt einem Element die Referenz auf das jeweilige Array im Konstruktor mitzugeben.
 
Zuletzt bearbeitet:

babuschka

Top Contributor
Danke, ich versuche es noch besser zu strukturieren nach Deinen Tipps.


Jetzt nochmal eine Frage zur Klasse "Player". Die sieht bei mir sehr länglich aus, ich muss da noch besser zusammenfassen. Im Moment geht es mir aber um die Zeile 31, wo ich versuche, das Drücken der Pfeiltasten einzubauen. Da kommen die Fehlermeldungen:

1. illegal start of expression
2. ; expected

Doch ich weiß nicht, wieso.



Java:
//Die Klasse Spieler

public class Player extends Teilnehmer implements Element, KeyListener{

char ElementSymbol1;
char ElementSymbol2;
char ElementSymbol3;
char ElementSymbol4;


public Player(int x_position, int y_position, MapParser map){

   super(x_position, y_position, map);

}

public char getChar(){

   return 'P';
}

public void performTurn(){
	
	

ElementSymbol1=spielfeld.getSpielfeld(this.x_position+1,this.y_position);
ElementSymbol2=spielfeld.getSpielfeld(this.x_position-1,this.y_position);
ElementSymbol3=spielfeld.getSpielfeld(this.x_position,this.y_position+1);
ElementSymbol4=spielfeld.getSpielfeld(this.x_position,this.y_position-1);

  public void keyPressed(KeyEvent e){
	  
	  if(keyEvent.getKeyChar()==KeyEvent.Char_UNDEFINED){
		  if(keyEvent.getKeyCode()==KeyEvent.VK_RIGHT){

                                if(ElementSymbol1==' '){
                                      this.x_position=this.x_position+1;
                                      spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                                      
                               }
                                if(ElementSymbol1=='S'){
                                
                               }
                                 if(ElementSymbol1=='E'){
                                  
                                  this.x_position=this.x_position+1;
                                  spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                                  
                             }
                               if(ElementSymbol1=='M'){
                               this.x_position=this.x_position+1;
                               spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar()); 
                               System.out.println("GameOver");
                               
                             }
                              if(ElementSymbol1=='G'){
                                this.x_position=this.x_position+1;
                                spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                               System.out.println("LevelFinished");
                               
                             }
                              break;
                              
	  }
	  }

		  if(keyEvent.getKeyChar()==KeyEvent.Char_UNDEFINED){
			  if(keyEvent.getKeyCode()==KeyEvent.VK_LEFT){
	  
	                   if(ElementSymbol2==' '){
                       this.x_position=this.x_position-1;
                       spielfeld.setSpielfeld(this.x_position, this.y_position, this.getChar());
                       
                  }
                    if(ElementSymbol2=='S'){
                        
                 }
                    
  
                        if(ElementSymbol2=='E'){
                       
                         this.x_position=this.x_position-1;
                       spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                        
                      }
                   if(ElementSymbol2=='M'){
                   this.x_position=this.x_position-1;
                   spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                  System.out.println("GameOver");
                   
                  }
                 if(ElementSymbol2=='G'){
                 this.x_position=this.x_position-1;
                 spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                 System.out.println("LevelFinished");
                 
              }
                 break;
	  }
		  }
	  
	  
			  if(keyEvent.getKeyChar()==KeyEvent.Char_UNDEFINED){
				  if(keyEvent.getKeyCode()==KeyEvent.VK_UP){
                       
		               if(ElementSymbol3==' '){
                       this.y_position=this.y_position+1;
                       spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                       break;
                  }
                  if(ElementSymbol3=='S'){
                       break;
                 }
                 if(ElementSymbol3=='E'){
                      
                      this.y_position=this.y_position+1;
                      spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                      break;
                }
                 if(ElementSymbol3=='M'){
                    this.y_position=this.y_position+1;
                    spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                    System.out.println("GameOver");
                    break;
               }
                if(ElementSymbol3=='G'){
                  this.y_position=this.y_position+1;
                  spielfeld.setSpielfeld(this.x_position, this.y_position, this.getChar());
                  System.out.println("LevelFinished");
                  break;
                }
	  }
			  }
	  
	  

				  if(keyEvent.getKeyChar()==KeyEvent.Char_UNDEFINED){
					  if(keyEvent.getKeyCode()==KeyEvent.VK_DOWN){
	  
	                         if(ElementSymbol4==' '){
                             this.y_position=this.y_position-1;
                             spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                             break;
                         }
                       if(ElementSymbol4=='S'){
                           break;
                        }
                       if(ElementSymbol4=='E'){
                           
                           this.y_position=this.y_position-1;
                           spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                           break;
                       }
                     if(ElementSymbol4=='M'){
                          this.y_position=this.y_position-1;
                          spielfeld.setSpielfeld(this.x_position, this.y_position, this.getChar());
                          System.out.println("GameOver");
                          break;
                      }
                    if(ElementSymbol4=='G'){
                         this.y_position=this.y_position-1;
                         spielfeld.setSpielfeld(this.x_position, this.y_position, this.getChar());
                         System.out.println("LevelFinished");
                         break;
                      }
					  }
				  }
	 
  }
}

}
 

R3van

Mitglied
Schau mal in Zeile 22, dort steht:
Java:
public void performTurn(){
Dh. du definierst hier eine neue Methode mit dem Namen performTurn()
In Zeile 33 steht dann:
Java:
public void keyPressed(KeyEvent e){
Dh. du definierst eine weitere Methode, jedoch im Methodenrumpf der Methode performTurn(), und das geht natürlich nicht... Dieses Konstrukt erscheint mir auch etwas komisch, da auf dem Aufgabenzettel steht, dass die GUI benutzt werden soll um die gedrückte Taste zu ermitteln. Was du hier, so glaube ich jetzt erst mal, gemacht hast, ist den Code der Methode step() aus GUI.java kopiert. Dies war aber nicht Sinn der Übung. Lies doch bitte nochmal den Zettel und vor allem die Doku zu GUI.java (Doxygen), dort erfährst du, wie du diese Klasse zu verwenden hast.
 

babuschka

Top Contributor
Das mit der GUI habe ich gelesen.

Zu meiner Schande muss ich aber gestehen, dass ich nichtmal weiß, was das ist.

Deswegen habe ich versucht, das Ermitteln der gedrückten Taste so hinzubekommen.
 

R3van

Mitglied
GUI ist ein Akronym für Graphical user interface und bezeichnet halt eben eine grafische Schnittstelle für den Benutzer eines Programms. Der Editor in dem du zB. die Texte schreibst für dieses Forum ist auch nur eine GUI um komfortabel Nachricht in diesem Forum zu verfassen.

Also, im Sinne der Aufgabe haben wir euch die Arbeit zum Entwickeln einer GUI abgenommen und liefern diese halt eben in der Datei GUI.java mit. Praktischer Weise hat die Klasse GUI eine Methode step(), welche eine ganz nützliche Funktion bereitstellt. Um dir diese Funktion anzeigen zu lassen generiere doch erst mal die Doxygen-Doku zu dieser Datei. Dann sollte dir einiges klarer werden :)
 
Zuletzt bearbeitet:

babuschka

Top Contributor
Ah, danke!

Ich habe dann dies mit folgender Fehlermeldung:

Player.java:39 cannot find symbol
symbol: method step()
location: class Player
stepcontrol=step();



Java:
//Die Klasse Spieler





public class Player extends Teilnehmer implements Element{

char ElementSymbol1;
char ElementSymbol2;
char ElementSymbol3;
char ElementSymbol4;



public Player(int x_position, int y_position, MapParser map){

   super(x_position, y_position, map);

}

public char getChar(){

   return 'P';
}

public void performTurn(){
	
	

ElementSymbol1=spielfeld.getSpielfeld(this.x_position+1,this.y_position);
ElementSymbol2=spielfeld.getSpielfeld(this.x_position-1,this.y_position);
ElementSymbol3=spielfeld.getSpielfeld(this.x_position,this.y_position+1);
ElementSymbol4=spielfeld.getSpielfeld(this.x_position,this.y_position-1);

  
	  String stepcontrol;
	  
	  stepcontrol=step();
	  
	  if(stepcontrol=="RIGHT"){

                                if(ElementSymbol1==' '){
                                      this.x_position=this.x_position+1;
                                      spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                                      
                               }
                                if(ElementSymbol1=='S'){
                                
                               }
                                 if(ElementSymbol1=='E'){
                                  
                                  this.x_position=this.x_position+1;
                                  spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                                  
                             }
                               if(ElementSymbol1=='M'){
                               this.x_position=this.x_position+1;
                               spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar()); 
                               System.out.println("GameOver");
                               
                             }
                              if(ElementSymbol1=='G'){
                                this.x_position=this.x_position+1;
                                spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                               System.out.println("LevelFinished");
                               
                             }
                              
                              
	  }
	  

		  if(stepcontrol=="LEFT"){
	  
	                   if(ElementSymbol2==' '){
                       this.x_position=this.x_position-1;
                       spielfeld.setSpielfeld(this.x_position, this.y_position, this.getChar());
                       
                  }
                    if(ElementSymbol2=='S'){
                        
                 }
                    
  
                        if(ElementSymbol2=='E'){
                       
                         this.x_position=this.x_position-1;
                       spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                        
                      }
                   if(ElementSymbol2=='M'){
                   this.x_position=this.x_position-1;
                   spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                  System.out.println("GameOver");
                   
                  }
                 if(ElementSymbol2=='G'){
                 this.x_position=this.x_position-1;
                 spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                 System.out.println("LevelFinished");
                 
              }
                 
	  }
		  
	  
	  
			  if(stepcontrol=="UP"){
                       
		               if(ElementSymbol3==' '){
                       this.y_position=this.y_position+1;
                       spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                       
                  }
                  if(ElementSymbol3=='S'){
                       
                 }
                 if(ElementSymbol3=='E'){
                      
                      this.y_position=this.y_position+1;
                      spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                      
                }
                 if(ElementSymbol3=='M'){
                    this.y_position=this.y_position+1;
                    spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                    System.out.println("GameOver");
                    
               }
                if(ElementSymbol3=='G'){
                  this.y_position=this.y_position+1;
                  spielfeld.setSpielfeld(this.x_position, this.y_position, this.getChar());
                  System.out.println("LevelFinished");
                  
                }
	  }
			  
	  
	  

				  if(stepcontrol=="DOWN"){
	  
	                         if(ElementSymbol4==' '){
                             this.y_position=this.y_position-1;
                             spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                             
                         }
                       if(ElementSymbol4=='S'){
                           
                        }
                       if(ElementSymbol4=='E'){
                           
                           this.y_position=this.y_position-1;
                           spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                           
                       }
                     if(ElementSymbol4=='M'){
                          this.y_position=this.y_position-1;
                          spielfeld.setSpielfeld(this.x_position, this.y_position, this.getChar());
                          System.out.println("GameOver");
                          
                      }
                    if(ElementSymbol4=='G'){
                         this.y_position=this.y_position-1;
                         spielfeld.setSpielfeld(this.x_position, this.y_position, this.getChar());
                         System.out.println("LevelFinished");
                         
                      }
					  }
				  
	 
  
}

}







Und noch eine Frage:

Ich muss nur in der Klasse "Player" die Methode step benutzen?

(Man benutzt doch nur für den Spieler die Pfeiltasten.)
 

R3van

Mitglied
Hmm warum rufst du denn einfach step() auf... das ist doch eine Methode der Klasse GUI. Wie du eine Methode einer Klasse (eines Objektes) aufrufst, solltest du schon wissen.
 

babuschka

Top Contributor
Ja, mit dem Punktoperator.

Muss ich auch erst eine Instanz der Klasse GUI erzeugen? (Ich hab sie gui genannt.)

Dann kommt eine andere Fehlermeldung:

Zeile 36: '(' or '[' expected


Java:
//Die Klasse Spieler
 
 
 
 
 
public class Player extends Teilnehmer implements Element{
 
char ElementSymbol1;
char ElementSymbol2;
char ElementSymbol3;
char ElementSymbol4;
 
 
 
public Player(int x_position, int y_position, MapParser map){
 
   super(x_position, y_position, map);
 
}
 
public char getChar(){
 
   return 'P';
}
 
public void performTurn(){
    
    
 
ElementSymbol1=spielfeld.getSpielfeld(this.x_position+1,this.y_position);
ElementSymbol2=spielfeld.getSpielfeld(this.x_position-1,this.y_position);
ElementSymbol3=spielfeld.getSpielfeld(this.x_position,this.y_position+1);
ElementSymbol4=spielfeld.getSpielfeld(this.x_position,this.y_position-1);
 
      GUI gui=new GUI;
      gui.Key stepcontrol;
      
      stepcontrol=gui.step();
      
      if(stepcontrol==Key.RIGHT){
 
                                if(ElementSymbol1==' '){
                                      this.x_position=this.x_position+1;
                                      spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                                      
                               }
                                if(ElementSymbol1=='S'){
                                
                               }
                                 if(ElementSymbol1=='E'){
                                  
                                  this.x_position=this.x_position+1;
                                  spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                                  
                             }
                               if(ElementSymbol1=='M'){
                               this.x_position=this.x_position+1;
                               spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar()); 
                               System.out.println("GameOver");
                               
                             }
                              if(ElementSymbol1=='G'){
                                this.x_position=this.x_position+1;
                                spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                               System.out.println("LevelFinished");
                               
                             }
                              
                              
      }
      
 
          if(stepcontrol==Key.LEFT){
      
                       if(ElementSymbol2==' '){
                       this.x_position=this.x_position-1;
                       spielfeld.setSpielfeld(this.x_position, this.y_position, this.getChar());
                       
                  }
                    if(ElementSymbol2=='S'){
                        
                 }
                    
  
                        if(ElementSymbol2=='E'){
                       
                         this.x_position=this.x_position-1;
                       spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                        
                      }
                   if(ElementSymbol2=='M'){
                   this.x_position=this.x_position-1;
                   spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                  System.out.println("GameOver");
                   
                  }
                 if(ElementSymbol2=='G'){
                 this.x_position=this.x_position-1;
                 spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                 System.out.println("LevelFinished");
                 
              }
                 
      }
          
      
      
              if(stepcontrol==Key.UP){
                       
                       if(ElementSymbol3==' '){
                       this.y_position=this.y_position+1;
                       spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                       
                  }
                  if(ElementSymbol3=='S'){
                       
                 }
                 if(ElementSymbol3=='E'){
                      
                      this.y_position=this.y_position+1;
                      spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                      
                }
                 if(ElementSymbol3=='M'){
                    this.y_position=this.y_position+1;
                    spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                    System.out.println("GameOver");
                    
               }
                if(ElementSymbol3=='G'){
                  this.y_position=this.y_position+1;
                  spielfeld.setSpielfeld(this.x_position, this.y_position, this.getChar());
                  System.out.println("LevelFinished");
                  
                }
      }
              
      
      
 
                  if(stepcontrol==Key.DOWN){
      
                             if(ElementSymbol4==' '){
                             this.y_position=this.y_position-1;
                             spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                             
                         }
                       if(ElementSymbol4=='S'){
                           
                        }
                       if(ElementSymbol4=='E'){
                           
                           this.y_position=this.y_position-1;
                           spielfeld.setSpielfeld(this.x_position,this.y_position, this.getChar());
                           
                       }
                     if(ElementSymbol4=='M'){
                          this.y_position=this.y_position-1;
                          spielfeld.setSpielfeld(this.x_position, this.y_position, this.getChar());
                          System.out.println("GameOver");
                          
                      }
                    if(ElementSymbol4=='G'){
                         this.y_position=this.y_position-1;
                         spielfeld.setSpielfeld(this.x_position, this.y_position, this.getChar());
                         System.out.println("LevelFinished");
                         
                      }
                      }
                  
     
  
}
 
}
 

R3van

Mitglied
Ich kann schon verstehen, warum einige Personen in diesem Forum dir nicht mehr helfen wollen. Es wirkt leider immer so, als wenn du unsere Vorschläge annimmst, etwas hincodest, kompilieren willst und wenn dass dann nicht klappt, also ein Kompilerfehler erscheint, postest du die Nachricht hier, ohne dir wohl Gedanken gemacht zu haben, was da eigentlich steht. Bei diesem Fehler werde ich dir nicht helfen, den musst du wirklich alleine finden, vor allem weil die Ausgabe wirklich alles sagt was du benötigst... Sobald das läuft, du also die Methode step aufrufen kannst, werde ich dir weiter helfen.
 

babuschka

Top Contributor
Okay, ich muss schreiben:

Java:
GUI gui=new GUI();

Wenn ich das mache, entstehen aber wiederum neue Fehlermeldungen, nämlich steht da dann, daß die Variablen Key.DOWN usw. unbekannt sind...



Da weiß ich jetzt aber wirklich nicht weiter.
So blöde das rüberkommen mag.
 
G

gman

Gast
Zeile 36: '(' or '[' expected

Ich weise einfach nochmal darauf hin! Kümmer dich doch erstmal darum.
Frag dich mal was du mit den Zeilen erreichen willst und schau dann in ein
Buch wie man das umsetzt (Stichwort: Konstruktor).

Edit: Mist, zu langsam ;-) Dieser Beitrag hat sich damit wohl erledigt.
 

babuschka

Top Contributor
Dort steht, daß LEFT, RIGHT usw. zu dem Aufzählungstypen Key gehören.


Java:
GUI gui=new GUI();
Key stepcontrol;

stepcontrol = gui.step();

if(stepcontrol == Key.RIGHT){...}


...


Sorry, ich sehe nicht, wie das gehen soll.
 

R3van

Mitglied
Das Enum ist in der Klasse GUI spezifiziert. Also:
Java:
GUI.Key key = gui.step();

Der Vergleich sieht dann wohl so aus:
Java:
switch(key) {
           case: GUI.Key.LEFT
...
 

babuschka

Top Contributor
Okay, das man als TYP

Java:
GUI.KEY

nehmen muss, weil die Aufzählung in der Klasse GUI steht, war mir nicht klar.



Letzte blöde Frage für heute:

Wieso nicht:

Java:
gui.Key
?
 

babuschka

Top Contributor
Hallo, wie kann ich schauen, ob ein Level rechteckig ist?




Für die Überprüfung, ob ein Level genau einen Spieler und mindestens einen Ausgang hat und von Wänden umgeben ist, habe ich jeweils eine Methode für einen String geschrieben, die ich dann in der Methode, in der ich teste, ob dies für ein Level gilt, verwende.

Nur zu der Überprüfung, ob das Level rechteckig ist, fällt mir nichts ein.
 
F

Firephoenix

Gast
Du kriegst eine Liste aus Strings als Level:
(Element der Liste) "String"
(0) "XXXX"
(1) "XXXX"
(2) "XXXX"

und eine 2.:
(0) "XXXX"
(1) "XXXXXX"
(2) "XXXX"


bzw eine 3.:,
(0) "XXXX"
(1) "XXXX"
(2) "XXXX"
(3) "X"

warum sind die 2. und die 3. nicht Rechteckig, woran erkennst du den Unterschied.

Wo die Klasse String ist weißt du, eine passende Methode findet man schnell und wenn man dann nur noch das runterschreibt was man selber per hand macht "alle strings durchgehen und auf gleiche länge prüfen" (lösung *hust*) ist man fertig.

Das ist damit auch mein letzter Post in dem Thread - ich sehe es nicht ein einem Studenten sowas vorkauen zu müssen. Das hat nichtmal mehr was mit Java zu tun (ansonsten wäre sowas gekommen wie:
"Warum klappt meine Rechteck-prüfung mit den 2 verschachtelten for-schleifen und den paar Variablen nicht, könnte das an der Methode .irgendwas() aus der Klasse String liegen oder habe ich da einen denkfehler drin")
Hier fehlen einfach Grundsätzliche Skills wie Abstraktion, ein Grundwissen über die Sprache kann man nach 2.5 Monaten vorraussetzen, ebenso wie OOP-Fertigkeiten - aber auch hier kommen zuviele Grundsatzfragen. Und Selbststudium bedeutet sich selbst Wissen suchen und aneignen können - eine Grundlage auf einer Universität - und nicht sich alles zusammenfragen zu müssen, selbiges kann man machen wenns mal echt irgendwo hängt und man tiefere Fachprobleme hat (und hinter einem Konstruktoraufruf die () zu vergessen und dafür gleich mehrfach zu posten ;( )
 

babuschka

Top Contributor
Mehr als mir Mühe geben kann ich auch nicht.
Ich muss mir auch nicht hier ständig anhören, wie unfähig ich bin.
Ich bin doch nicht hier, um mich demütigen zu lassen.
Dann lass es halt sein, wenn es unter Deiner Würde ist.

Langsam habe ich es oft genug gehört.



Also dies habe ich mir überlegt.
Ich hoffe, es hagelt jetzt nicht wieder böse Kritik. Sollen sich halt alle raushalten, die es zu doof finden. Ich finde auch so Manches zu doof, zum Beispiel, daß ich in einem Hilfe-Forum keine Hilfe, sondern demotivierende Backpfeifen bekomme.

Die Kritik ist ja um Gottes Willen angekommen und sie ist berechtigt.
Dennoch muss man sie nicht immer und immer und immer wieder wiederholen.


Und dann noch ein Wort zu dem hilfsbereiten Tutor, der hier netterweise geholfen hat: Hieß es in Deinen eigenen Worten nicht sinngemäß, daß man jede Frage stellen könne?

Achso, aha, ich verstehe. Und schon drei Messages weiter muss ich mir dann anhören, daß es nur allzu verständlich ist, daß mir hier nicht geholfen wird und schon weitere zwei Messages weiter fließen dann nette indirekte Kommentare ein wie "... - ich wiederhole es nochmal----"..

Aha, so war das also gemeint, daß man jede Frage stellen kann.
Können ja, aber auch mögen?


(Und nochmal: Ich sehe es ein, daß ich nicht talentiert bin und frage, frage, frage. Man werfe mir also zumindest bitte nicht vor, daß ich selbst die Kritik ausblende.)

Java:
//Es folgen Methoden, die für den Test der Validität eines Levels benutzt werden.

//Zähle die Anzahl der Spieler.

public int countPlayer(String string, char aChar){

  int counter=0;

    for(int i=0; i<string.length(); i++){
            
               if(string.charAt(i)==aChar){
                      counter++;
                  }
        
     }

return counter;
}


//Teste, ob am Anfang und Ende eines Strings ein bestimmes Char steht.

public boolean sourroundedByWalls(String string){

   boolean sourrounded=true;

         if(string.charAt(0)!='W' || string.charAt(string.length()-1)!='W'){
                  sourrounded=false;
          }

     return sourrounded;
}


//Zähle die Anzahl der Ausgänge.

public int countExists(String string, char aChar){

  int counter2=0;

    for(int i=0; i<string.length(); i++){
            
               if(string.charAt(i)==aChar){
                      counter2++;
                  }
        
     }
        return counter2;

}

//Teste, ob ein übergebenes Level valide ist (mittels der obigen Methoden).
//1. Genau ein Player?
//2. Level von Wänden umgeben?
//3. Mindestens ein Ausgang?
//4. Spielfeld rechteckig?


public boolean validateLevel(List<String> level){
	
	boolean validate=false;
	int counter=0;
	int counter2=0;
	boolean sourrounded=false;

 for(int j=0; j<level.size(); j++){

             counter=countPlayer(level.get(j), 'P');
             sourrounded=sourroundedByWalls(level.get(j));
             counter2=countExists(level.get(j), 'G');
             
    }
         
 if(counter==1 && sourrounded==true && counter2>=1){
	    validate=true;
 }
 
 
 
      return validate;
}

(Das mit der rechteckigen Form fehlt noch.)

Doch wenn ich die letzte Methode jetzt anwenden will, also das in Zeile 9 schreibe, funktioniert es nicht. Es fehlt ein identifier, steht dort.


Java:
import java.util.List;
 
//Die Klasse MapParser
 
public class MapParser{
	List<String> map;
	Element[][]spielfeld=new Element[map.size()][map.get(1).length()];
	
	validateLevel(map);
	
	
    
    Element[][] parseMap(List<String> map){
        
    	   
                           char certainchar;
                           Element newElement;
 
        for(int i=0; i<=map.size(); i++){
            
            for(int j=0; j<=map.get(i).length(); j++){
            certainchar=map.get(i).charAt(i);
            switch(certainchar){
            
            case'P': newElement=new Player(i,j,this); spielfeld[i][j]=newElement; break;
            case'E': newElement=new Erde(i,j,this); spielfeld[i][j]=newElement;break; 
            case'S': newElement=new Stein(i,j,this); spielfeld[i][j]=newElement;break;
            case'M': newElement=new Monster(i,j,this); spielfeld[i][j]=newElement;break;
            case'D': newElement=new Diamant(i,j,this); spielfeld[i][j]=newElement;break;
            case'G': newElement=new Ausgang(i,j,this); spielfeld[i][j]=newElement;break;
            case' ': newElement=new LeeresFeld(i,j,this); spielfeld[i][j]=newElement;break;
            }
            
            
            }
        }
    
                    return spielfeld;
    }
 
Zuletzt bearbeitet von einem Moderator:

R3van

Mitglied
Du kannst uns und damit meine ich ausschließlich uns Tutoren jede Frage stellen, die du möchtest. Wir werden dir auch jeder Zeit gerne weiterhelfen, denn das ist unser Job, dafür werden wir bezahlt. Für Mitglieder dieses Forums gilt das jedoch nicht, du darfst nicht voraussetzen, dass dir hier jeder sofort helfen wird, da alles hier auf einer freiwilligen Basis geschieht.

Vlt. sollte ich das Wort Hilfe auch mal etwas anders beschreiben. Hilfe bedeutet, dass wir die die Richtung in der du selbstständig lernen sollst vorgeben. Die Vorlesung vermittelt dabei tatsächlichen Inhalt, was nicht unbedingt bedeutet, dass die Vorlesung vollständig sein muss, sondern eher Ausschnitte von den Themen zeigt, in denen du dich gerade bewegen solltest. Die Übungsaufgaben und das Tutorium sind nun dazu da, um das Wissen, welches du dir eben aneignen sollst, praktisch um zu setzten. In der Informatik lässt sich dies besonders gut in Programmieraufgaben umsetzten.

Wir Tutoren helfen euch bei den Übungen. Wenn ihr euch zB. total verrennt, dann helfen wir euch mit Tipps wieder auf die Spur zu kommen. Wenn ihr also zu uns kommen würdet und uns fragen würdet, wie ihr die Länge eines Strings ermitteln könnt, dann würden wir euch sagen, hey schaut doch mal in Java-Doc von String nach, da gibts einige Methoden die euch evtl. gut helfen können. Ob wir in den Tutorien Kompilerfehler etc. fixen steht uns frei. Die Devise lautet: Hilfe zur Selbsthilfe.

Wenn ich dir also sage, schau doch mal bitte in die Doxygen-Doku der Klasse GUI nach, dann tu das doch einfach erst mal. Dann würde sich bestimmt auch die Frage erübrigen, welchen Rückgabetyp die Methode step() hat und wo dieses Enum definiert ist. Ich werde dir nun diese Ausschnitt einfach mal hier posten:

/**
* This method implements one step of the Boulder Dash game. If this method
* is called for the first time after setting a new level
* ({@link setLevel(int, Element[][])}) a countdown is displayed. After that
* this method sleeps for 50ms and then determines and returns the first
* key press that has not yet been processed.
* This means that subsequent key presses will be ignored until the first
* key press has been handled. If no key has been pressed, this method
* returns the element @em NONE of the enumeration {@link GUI.Key}.
*
* @return the pressed key
*/

Niemand hier möchtet dich fertig machen oder dir nicht weiterhelfen. Jedoch, und das wirst du lernen müssen, heißt Studium immer selbstständiges lernen.

Leider muss ich Firephoenix recht geben. Du scheinst noch viele Probleme mit den Grundlagen zu haben. Wenn du diese nicht umgehend beseitigst, dann sehe ich da große Probleme auf dich zukommen... Diese Probleme können wir (also der Dozent und wir Tutoren) nicht mehr für dich lösen, da der Stoff der Vorlesung bereits viel zu fortgeschritten ist. Ich würde dir empfehlen ein Grundlagenbuch raus zu holen und nochmal alles ganz von vorne durch zu gehen.
 

babuschka

Top Contributor
Alles sicher weise gesprochene Worte, das möchte ich auch gar nicht anzweifeln.

Vielleicht zieht man ja aber in Erwägung, daß man aus dieser Doxygen-Dokumentation durchaus auch nicht schlau werden kann.

Mir ist zum Beispiel trotz dieses zitierten Ausdrucks nicht klar, daß der Rückgabetyp

GUI.Key

ist und es stellt sich mir noch immer die Frage, wieso der Rückgabetyp nicht

gui.Key

ist, da ich ja schließlich eine neue Instanz der Klasse GUI erzeugt habe.



Wenn auf solche Fragen aber immer die Antwort kommt, man müsste bei den Grundlagen anfangen, verstehe ich das nicht. Sowas SIND doch Grundlagen. Und so tritt man immer auf der Stelle und ist, so viel kann ich sagen, sicherlich nicht weniger frustriert als die Helfer, die den Eindruck haben, man käme keinen Schritt voran. Wie denn aber auch, wenn man immer die Antwort bekommt, dieses oder jenes sei doch Grundlagenwissen und müsse man so herausfinden. Schön und gut und sicher in den meisten Fällen wahr, aber nicht immer.

Ich muss mir doch jetzt nicht wieder angucken, was ein Rückgabetyp ist, das ist mir klar. Wenn ich mir jetzt meine Grundlagenbücher hernehme und das nachschlage, sehe ich nicht, wie mir das in diesem konkreten Fall weiterhelfen soll, deswegen frage ich das ja schließlich so konkret, sonst würde ich ja fragen, was im Allgemeinen ein Rückgabetyp ist, worüber dann auch wieder die Augen verdreht würden. Ich glaube, Manche sind sich selbst nicht darüber klar, was sie sagen: Wegen Grundlagen soll man nachschlagen, aber wenn man nachschlägt und dann nachfragt, bekommt man wieder nur den Hinweis, man solle doch das mal nachschlagen.

In DIESEM Fall ist es mir eben nicht klar, wie man auf den Rückgabetyp kommt.
 
Zuletzt bearbeitet von einem Moderator:
G

gman

Gast
Mir ist zum Beispiel trotz dieses zitierten Ausdrucks nicht klar, daß der Rückgabetyp

GUI.Key

ist und es stellt sich mir noch immer die Frage, wieso der Rückgabetyp nicht

gui.Key

ist, da ich ja schließlich eine neue Instanz der Klasse GUI erzeugt habe.

Der Rückgabetyp ist GUI.Key. PUNKT.

Mit [c]gui.Key[/c] kommst du auch an die Elemente des Enums (vermute ich mal, den
Code der Klasse GUI haben wir hier ja nicht zur Verfügung). Das ist aber dann der
konkrete Wert. Grob gesagt: Typ = Definition, Wert = das was eine Methode bei der
konkreten Ausführung zurück gibt (eine initialisierte Instanz des Rückgabetyps).

Ich hoffe ich kann dir damit etwas weiterhelfen.
 

babuschka

Top Contributor
Hallo, ich würde jetzt gerne die Klasse "BoulderDah" gemäß dieser Aufgabenstellung erstellen (zumindest versuchen):

Damit das Spiel spielbar wird benötigt ihr noch eine Klasse, die alles zusammenhält. Entwickelt
dazu die Klasse BoulderDash.
Die Klasse soll zunächst drei Spielwelten von der Festplatte laden. Nehmt dazu Euren MapParser
zur Hilfe. Sind die Welten geladen, soll die erste Welt in der GUI angezeigt werden. Die Benutzung
der Gui lässt sich aus der Doxygen-Dokumentation entnehmen.
Anschließend werden so lange Spielzüge ausgeführt bis die Spielfigur entweder zermalmt ist oder
gefressen wurde oder auf den Ausgang bewegt wurde. Im letzteren Fall geht es weiter zum
nächsten Level. Die Punkte bleiben natürlich erhalten.
Ein Spielzug läuft dabei wie folgt ab:
1. frage die Benutzereingabe aus der Gui ab und teile sie dem Spieler-Objekt mit
2. rufe auf dem Spieler-Objekt performTurn() auf
3. rufe auf allen anderen Elementen performTurn() auf
4. Aktualisiere die Gui


Ich habe drei Spielwelten erstellt und als txt.-Dateien gespeichert.

Den Beginn der Aufgabe habe ich versucht und zwar so:

Java:
//Die Klasse BoulderDash
import java.util.ArrayList;
import java.util.List;


public class BoulderDash{

public static void main( String[] args){
	
	MapParser mapparser=new MapParser();
	List<List<String>> maps = MapProvider.loadMaps();
	Element[][] spielfeld=null;
	GUI gui=new GUI();
	
	for (List<String> level : maps){
		spielfeld=mapparser.parseMap(level);
	}
	
	
	gui.setLevel(1, spielfeld);
	
//weiter bin ich noch nicht
}

}


Ich wüsste gerne, ob das der richtige Ansatz ist.
Danke für jede Mühe.
 

Neue Themen


Oben