Spielfeld für SchiffeVersenken auf Kommandozeilenebene

Status
Nicht offen für weitere Antworten.

p.tryfle

Mitglied
Hallo,
wir sollen für die uni ein Spiel im Schiffeversenken - Stil bauen.
Ich bin jetzt gerade erst einmal dabei, dass Schlachtfeld aufzubauen.

Dieses soll nämlich einem bestimmten Muster entsprechen:

Code:
    1   2   3   4    5  6                 // die Zahlen sollen als koordinatensystem dienen,
  +---+---+---+---+---+---+        sorry die 5 hat sich etwas verschoben.
1 | @ | @ | @ | @ | @ | @ |…     Aber ich denke es wird deutlich wie es gemeint ist.
  +---+---+---+---+---+---+
2 | @ | @ | @ | @ | @ | @ |…
  +---+---+---+---+---+---+
3 | @ | @ | @ | @ | @ | @ |…
  +---+---+---+---+---+---+
4 | @ | @ | @ | @ | @ | @ |…
  +---+---+---+---+---+---+
5 | @ | @ | @ | @ | @ | @ |…

usw....


Ich habe mich für ein 15x15 Spielfeld entschieden, welches ich mit hilfe eines zweidimensionalem Array [][] realisieren möchte.
Die Ausgabe des Feldes läuft über zwei For-Schleifen.


MEIN PROBLEM LIEGT NUN BEI DEN UMRAHMUNGEN DER FELDER +---+ ,
DIESE KRIEGE ICH NUR IN DER VERTIKALEN-RICHTUNG HIN.
UND DIE ZAHLENBESCHRIFTUNG AM RAND! DENN DIE BEKOMME ICH NUR IN DER HORIZONTALEN HIN.
WIE KANN ICH DIESE VERSCHÖNERUNGEN IN DIE SCHlEIFEN EINBAUEN SO DASS DIE AUSGABE EXAKT SO AUSSIEHT; WIE DIE VORGABE?

HIER ERSTMAL MEINE AUSGABE:
Code:
   1   2   3   4   5   6    7   8   9  10   11 12  13  14  15 
 +---+  
 | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | 
 +---+ 
 | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | 
 +---+ 
 | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | 
 +---+ 
 | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | 
 +---+ 
 | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | 
 +---+ 
 | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | 
 +---+ 
 | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | 
 +---+ 
 | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | 
 +---+ 
 | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | 
 +---+ 
 | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | 
 +---+ 
 | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | 
 +---+ 
 | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | 
 +---+ 
 | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | 
 +---+ 
 | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ | @ |

nun mein quellcode:

Code:
public class DotComVersenken {
	
	
	static boolean [][] schlachtFeld = new boolean[14][14];

	

	static void spielEinrichten(boolean [][] schlachtFeld){
		
		
		
	 System.out.println("   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15 ");
		 System.out.println(" +---+ ");	
		 
	
	
       for ( int vertikal = 0; vertikal < schlachtFeld.length; vertikal++){
				
				
				    
       for( int horizontal = 0; horizontal < schlachtFeld.length; horizontal++){
						
	
						 
			 System.out.print(" | " + "@" );
				 }
				
				            
				 
				        
			System.out.println(" | " + "@" + " | ");
				
			 System.out.println(" +---+ ");	
					
						 
			 }
	}
		public static void main ( String [] args){
	spielEinrichten(schlachtFeld);
}
}

Wäre wunderbar wenn mir jemand helfen könnte.
gruß
p.tryfle
 
Das sieht so aus, als ob Du beim ersten Hinderniss das Handtuch geworfen hättest...

Die Zeilennummer sind doch schon mal einfach. Vor Beginn der Schleife, welche Dir die horziontalen Felder hinpinselt, einfach mal die Zeilenummer hinpinseln.

Setz' das mal um, dann sehen wir weiter.
 
Weil ich grade gute Laune habe:
Java:
public class SchiffeVersenken {
  
  private static int width = 15;
  private static int height = 15;
  
  private static void ausgabe() {
    //x-coordinates
    System.out.print("  ");
    for(int x = 0; x < width; x++) {
      System.out.printf(" %2d ",x+1);
    }
    System.out.println();
    for(int y = 0; y < height; y++) {
      printLine();
      System.out.printf("%2d|", y+1);
      for(int x = 0; x < width; x++) {
        System.out.printf(" " + get(x,y) + " |");
      }
      System.out.println();
    }
    printLine();
  }
  
  private static void printLine() {
    System.out.print("  +");
    for(int x = 0; x < width; x++) {
       System.out.print("---+");
    }
    System.out.println();
  }
  
      
  public static char get(int x, int y) {
      return '@'; 
  }
      
  public static void main(String[] args) {
    ausgabe();
  }
}
Das ganze sollte natürlich später hübsch in ein Objekt gepackt werden, also ohne static. Damit es dann interessanter aussieht, solltest du die get-Methode entsprechend anpassen.
 
HAllo,

@ Landei,

Ich versuche nun schon seit einiger Zeit diesen Code nachzuvollziehen und verstehe noch nicht alles.
Das mit dem System.out.printf() ist ne super sache, die wusste ich noch garnicht. Danke! Gut zu wissen.
Bin ebend ein absoluter Anfänger! Und muss halt irgendwie immer erst einen Anfang finden und komme auch nicht so schnell auf Ideen úm Probleme zu lösen. :rtfm:

Ich habe deinen code mehrfach umgeschrieben um ihn genau zu verstehen, doch wie gesagt noch sind einige Fragen offen.

Z.B. Ich habe versucht zuerst die x-Koordinaten dann die y-koordinaten
und danach erst den Rahmen und die @ - Felder zu setzen.
Mir ist klar das das für die Ausgabe kein unterschied ausmacht. Doch geht es mehr um den didaktischen sinn, es funktioniert überhaupt nicht!

Wie ist das denn mit den Schleifen und den Achsen des Koordinatensystems?
und warum hast du eine get - methode verwendet um die @ zu setzen? :bahnhof:???:L

Rätsel rätsel..
schönen gruß
p.tryfle
 
HAllo,
Z.B. Ich habe versucht zuerst die x-Koordinaten dann die y-koordinaten
und danach erst den Rahmen und die @ - Felder zu setzen.
Mir ist klar das das für die Ausgabe kein unterschied ausmacht. Doch geht es mehr um den didaktischen sinn, es funktioniert überhaupt nicht!
Aha, der Grund für die ganze Konfusion.
In der Konsole geht es nur von links nach rechts und von oben nach unten, genau wie bei einer Schreibmaschine. Eine geschriebene Zeile ist geschrieben, nix mehr zu ändern, Einbahnstraße, nicht mal Tipp-Ex.

Du könntest natürlich erst mal ein Riesen char[][] Array machen, eine Art Malfläche, in der du frei schalten und walten kannst, und das du erst ganz am Ende zu Strings zusammenbaust und ausgibst. Das macht aber niemand, weil man ja einfach nur die Reihenfolge einzuhalten hat.

und warum hast du eine get - methode verwendet um die @ zu setzen? :bahnhof:???:L
Weil ich nicht weiß, woher du deine Informationen holen willst. Kann ein Array sein, muss nicht. Können direkt die Werte im Array sein, müssen aber nicht. Du kannst natürlich statt get direkt deine jeweilige Datenstruktur ansprechen, aber mit extra Methode läßt es sich halt leichter ändern, und es gibt eine klar definierte Stelle dafür, nicht irgendwo versteckt in einer Parameterliste beim String-Zusammenbau.
 
achso,
ich wollte einen zweidimensionalen Array [][] verwenden. Der das gesamte Spielfeld ausmacht.
Das Spielfeld soll sich zum Spielstart wie oben beschrieben aufbauen und die DotComAdressen:
String moodle;
String amazon;
String uni-due;
String google;
String youtube;
String studivz;
String facebook;
(anzusehen wie Schiffe)
sollen zufällig per random()-methode gesetzt werden.
Jede Adresse soll aus drei feldern bestehen.

Danach soll der spieler tipps abgeben.
Das spiel-feld soll sich dann auch noch aktualisieren, so dass der spieler sieht welche felder noch frei sind.
Das spiel DotComVersenken läuft solange bis alle Schiffe versenkt sind.

Deswegen weiß ich nicht ob das mit einer get - methode funktioniert, im nachhinein.

Für einige tipps wäre ich dankbar, aber ich muss das hinbekommen.:rtfm:

Mal schauen wieviele stunden und tage ich da noch dran sitze. 🙁

gruß
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben