Informatik 1 - Translation Studies in Information Technology INF2 – TSIT – M USTERLÖSUNG : P FLICHTÜBUNG 2 Musterlösung zum Aufgabenblatt der ersten Pflichtübung im Sommersemester 09, Praktikum zur Vorlesung Informatik 1 (INF2), Bachelorstudiengang Stephan Mechler, [email protected] A UFGABE 1 import java.io.*; import java.util.*; /** * Osereier- Suchspiel * * Es werden Ostereier hinter Büschen versteckt. * Der Spieler muss diese Positionen durch die Eingabe von Koordinaten eraten. * */ public class Ostern { /** * Konstante Parameter */ final static double BUSCH_DICHTE = 0.50; // Dichte der Büche final static double EIER_DICHTE = 0.50; // Dichte der Eier final static char[] buesche = {'#','*','.'}; // Verschiedene Symbole für das Gebüsch /** * Zeichnet das Spielfeld */ public static void drawSpielfeld(char[][] spielfeld, int dim_X, int dim_Y) { // erste Reihe mit Buchtaben X-Achse System.out.print(" |"); for (int j=0;j<dim_X; j++) System.out.print((char)(j+65)); System.out.println('|'); // Trennlinie for (int j=0;j<dim_X; j++) System.out.print('-'); System.out.println("----"); // Restliches Spielfeld for (int i=0;i<dim_Y; i++) { // Zuerst die Zahl der Y-Achse System.out.printf("%2d|",(i+1)); // Dann den Inhalt des Array spielfeld => Büsche, Leeraum od. Eier. for (int j=0;j<dim_X; j++) { System.out.print(spielfeld[i][j]); } System.out.println('|'); } } /** – Seite 1 von 3 – GDI, Musterlösung Pflichtübung 1 * Erstellt das Spielfeld */ public static int createSpielfeld(char[][] spielfeld,boolean[][] eier, int dim_X, int dim_Y ) { // Abwechselnd wird als Beispiel java.lang.Math Random r=new Random(); int eier_anz=0; und java.util.Random für Zufallszahlen verwendet // Alle Koordnaten durchlaufen (0 bis dim_Y-1 und 0 bis dim_X-1) for (int i=0;i<dim_Y; i++) { for (int j=0;j<dim_X; j++) { // Zufällig prüfen, ob ein Busch gezeichnet werden soll (Math.random) if (Math.random()<BUSCH_DICHTE ) { // Zufällig ein Busch-Symbol auswählen (Random.nextInt) spielfeld[i][j]=buesche[r.nextInt(3)]; // Zufällig ein Eier verteilen (Random.nextFloat) if (r.nextFloat()<EIER_DICHTE ) { eier[i][j]=true; eier_anz++; } else { eier[i][j]=false; } } else { spielfeld[i][j]=' '; } } } return eier_anz; } public static void main(String[] args) throws IOException { // Variablen int dim_X=0; // Spielfeldgröße X-Richtung int dim_Y=0; // Spielfeldgröße Y-Richtung int eier_gefunden=0; // Anzahl der Gefundenen Eier int eier_anz=0; // Gesamtanzahl der Eier int versuche=0; // Anzahl der Versuche StringTokenizer tokens; String eingabeZeile; // zweidimensonaler - Array für das Spielfeld char[][] spielfeld; // zweidimensonaler - Array Array für die Kennzeichnung, ob ein es ein Versteck ist. boolean[][] eier; // Für die Eingabe von der Tastatur // Hierfür (BufferedReader,InputStreamReader) wird java.io.* benötigt! BufferedReader eingabe = new BufferedReader( new InputStreamReader(System.in)); boolean eingabe_richtig=false; do { // Ausgabe Anleitung I System.out.println("Eiersuchen: "); System.out.println("oOooOooOooOooo \n"); System.out.println("Wie groß soll das Spielfeld sein (X,Y) (Max:26,99): "); // Eingabe, Double-Wert einlesen eingabeZeile = eingabe.readLine(); // Am Komma trennen tokens = new StringTokenizer(eingabeZeile,","); // Wenn mehr als 2 Werte eingeben wurden diese als dim_X,dim_Y speichern if (tokens.countTokens()==2) { dim_X = Integer.parseInt(tokens.nextToken()); dim_Y = Integer.parseInt(tokens.nextToken()); } // Prüfung ob Dimensionen zwischen 0-26 und 0-99 eingabe_richtig=( ( (dim_X>0) && (dim_Y<=26) ) && ( (dim_Y>0) && (dim_Y<=99) ) ); } while (!eingabe_richtig); – Seite 2 von 3 – GDI, Musterlösung Pflichtübung 1 // Erstellung des Spielfelds spielfeld = new char[dim_Y][dim_X]; eier = new boolean[dim_Y][dim_X]; eier_anz=createSpielfeld(spielfeld,eier,dim_X,dim_Y); // Schleife: Solange bis alle Eier endeckt sind: while (eier_gefunden<eier_anz) { int x=-1,y=-1; // Ausgabe Spielfeld drawSpielfeld(spielfeld,dim_X,dim_Y); // Ausgabe Anleitung II System.out.println("Geben Sie eine Koordinate an (Y= Buchstaben, X = Zahlen, Beispiel: a,1 ): "); // Eingabe eingabeZeile = eingabe.readLine(); // Am Komma trennen tokens = new StringTokenizer(eingabeZeile,","); if (tokens.countTokens()==2) { // Umrechnung von Buchstaben in Zahlen für x String s=tokens.nextToken(); char a=s.charAt(0); if ( (a>='A') && (a<='Z') ) { x = a - 'A'; } if ( (a>='a') && (a<='z') ) { x = a - 'a'; } // Umrechnung von y => y = eingabe -1 y = Integer.parseInt(tokens.nextToken())-1; } // Wenn die eingabe innerhalb der Koordinaten if ( ( (y>=0) && (y<dim_Y) ) && ( (x>=0) && (x<dim_X) ) ) { versuche++; // Ist ein Ei an diesem Punkt? if (eier[y][x]) { eier_gefunden++; System.out.printf("Sie haben ein Ei gefunden. ( Versuche: %d, Eier: %d, Gefunden: %d).\n",versuche,eier_anz,eier_gefunden); spielfeld[y][x]='O'; } else { System.out.printf("Leider ist hier kein Ei versteckt ( Versuche: %d, Eier: %d, Gefunden: %d).\n",versuche,eier_anz,eier_gefunden); } } else { // Wenn die Eingabe nicht innerhalb der Koordinaten System.out.println("Sie haben eine falsche Eingabe gemacht!"); } } // Ende -Schleife: Solange bis alle Eier endeckt sind: System.out.println("\n Das Spiel ist zu Ende"); } } – Seite 3 von 3 –