/**
*
*/
public class World {
/**
* das aktuelle welt-objekt
*/
String[][]world;
/**
* Maßangaben für Welt
*/
int a;
int b;
/**
* beeinhaltet alle erzeugten CargoObjekte
*/
Cargo[]cargomenge;
/**
* zählt das Array hoch, so dass jedes Cargoobjekt Platz hat
*/
int counter;
/**
* zeigt, ob ein feld bereits besetzt ist. anfangs alles false => unbesetzt
*/
boolean[][]besetzt;
/**
* sammelt alle benutzten Buchstaben, damit Objekte unterschiedliche Buchstaben haben
*/
String benutzteBuchstaben = "";
/**
* ein erstes Cargo Objekt:
*/
Cargo object;
String name; // cargoname
/**
* anzahl der benötigten objekte
*/
int anzahl;
/**
* @param a Länge x Koordinate
* @param b Breite y Koordinate
*/
/**Konstruktor
* erstellt eine neue Welt mit der Länge und Breite der Eingabe
* setzt die nötige Anzahl von Objekten und (erstellt diese im Idealfall)
*/
World(int a, int b) {
this.a = a;
this.b = b;
world = new String[a][b];
besetzt = new boolean[a][b];
/**
* Anzahl der benötigten Objekte festlegen
*/
this.anzahl =(min((int)Math.sqrt(this.a * this.b),26));
cargomenge = new Cargo[anzahl];
for (int i = 0; i < anzahl; i++)
setCargo();
}
/**
* erzeugt das Minimum zweier Zahlen
* @param a
* @param b
* @return minimum
*/
int min(int a, int b) {
if (a > b)
return b;
else
return a;
}
/**
* prüft, ob ein Buchstabe schon vorkam
*/
boolean buchstabeBesetzt(char ist) {
for (int i = 0; i < benutzteBuchstaben.length(); i++) {
if (benutzteBuchstaben.charAt(i) == ist) {
return true;
}
}
return false;
}
/**
* erstellt einen Zufallsbuchstaben
* @return char
*/
char randomChar() {
return (char) (64 + (int) Math.ceil(Math.random() * 26));
}
/**
* das übliche toString...
*
*/
public String toString() {
String result= "";
for (int i = 0; i < this.world.length; i++) {
for (int j = 0; j < this.world[i].length; j++) {
if(object.isLocation(i, j)) {
result += gesuchterCargo(i, j).charAt(0);
}
else {
result += ".";
}
}
result += "\n";
}
return result;
}
/**
* Objekt an best Stelle ausgeben
*/
String gesuchterCargo(int i, int j) {
String gesucht = "";
for (int m = 0; m < anzahl; m++) {
if (cargomenge[m].getXPosition() == i && cargomenge[m].getYPosition() == j) {
gesucht += cargomenge[m].toString();
break;
}
else {
gesucht +="?";
}
}
return gesucht;
}
/**
* ein cargo an einer bestimmten stelle erzeugen
*/
Cargo setCargo() {
// Objekte werden zufällig verteilt
char zufall = randomChar();
if(buchstabeBesetzt(zufall)) {
zufall = randomChar();
}
else {
name = zufall + "bot";
}
int x = (int) Math.random()*a;
int y = (int)Math.random()*b;
if(besetzt[x][y]) {
x = (int) (Math.random()*a);
y = (int)(Math.random() *b);
}
Cargo object = new Cargo(x,y, name);
benutzteBuchstaben += zufall;
besetzt[x][y] = true;
cargomenge[counter] = object;
counter++;
System.out.println(object.getName());
return object;
}
/**
* @param args
*/
public static void main(String[]args) {
World test = new World(3 , 4);
System.out.println(test.toString());
}
}
/**
*
*/
public class Cargo {
int[] location = new int[2];
int x;
int y;
String name;
/**
* Konstruktor.
* X und Y Koordinaten, Name
*/
Cargo(int x , int y, String name) {
this.x = x;
this.y = y;
this.name = name;
}
int getXPosition() {
return x;
}
int getYPosition() {
return y;
}
boolean isLocation( int n , int m) {
if (getXPosition() == n && getYPosition() == m) {
return true;
}
else {
return false;
}
}
String getName() {
return name;
}
String cargoToString() {
return getName() + "; " + getXPosition() + " , " + getYPosition();
}
}