MUSTERLÖSUNG: PFLICHTÜBUNG 2 AUFGABE 1

Werbung
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 –
Herunterladen