Bisher bin ich soweit gekommen den Konstruktor zu erstellen der einen String entgegennimmt und daraus ein zweidimensionales Array macht
Die getCell Methode überprüft ob das Koordinatenpaar innerhalb des feldes liegt oder eben nicht
getNeighborhood gibt die Sigantur zurück die oben im Quelltext erwähnt wird
Allerdings soll ich den Konstruktor jetzt erweitern, er soll in zweierschritten durch die Spielfeldbeschreibung laufen und jeweils die nachbarschaftssignatur ausrechnet und diese als index in das array NEIGHBORHOOD_TO_FILENAME verwendet um damit GameObject-Objekte konstruiert. Die Koordinaten müssen dabei halbiert werden.
Kann mir jemand helfen einen Ansatz zu finden oder das mit mir zsm durchrechnet, meinetwegen auch mit anderen Daten?
Quelltext:
/**
* Diese Klasse repräsentiert ein Spielfeld. Ihr Konstruktur bekommt dieses als
* String-Array übergeben.
*/
class Field
{
/**
* Die Dateinamen der Bodengitterelemente, die direkt mit einer
* Rotation 0 verwendet werden können. Der Index ergibt sich
* aus der Summe der folgenden Zahlen:
* 1: In Richtung 0 (+1, 0) gibt es eine Verbindung.
* 2: In Richtung 1 (0, +1) gibt es eine Verbindung.
* 4: In Richtung 2 (-1, 0) gibt es eine Verbindung.
* 8: In Richtung 3 (0, -1) gibt es eine Verbindung.
*/
private static final String[] NEIGHBORHOOD_TO_FILENAME = {
"floor",
"floor-e-0",
"floor-e-1",
"floor-l-0",
"floor-e-2",
"floor-i-0",
"floor-l-1",
"floor-t-1",
"floor-e-3",
"floor-l-3",
"floor-i-1",
"floor-t-0",
"floor-l-2",
"floor-t-3",
"floor-t-2",
"floor-x"
};
char dieter[][];
/** Ein Testfall, der alle Nachbarschaften enthält. */
static void test()
{
// Auskommentieren, sobald Konstruktor vorhanden
new Field(new String[] {
"O-O-O-O ",
"| | ",
"O O-O-O O",
"| | | | |",
"O-O-O-O-O",
"| | | | |",
"O O-O-O O",
" | |",
" O-O-O-O"
});
}
public Field(String[]field){
dieter=new char[field.length][];
for(int x=0;x<field.length;x++){
dieter[x]=new char[field[x].length()];
for(int y=0; y<field[x].length();y++){
dieter[x][y]=field[x].charAt(y);
}
}
}
private int getNeighborhood(int x, int y){
int counter=0;
if(getCell(x+1,y)!= ' '){
return counter=1;
}
else if(getCell(x,y+1)!= ' '){
return counter=2;
}
else if(getCell(x-1,y)!= ' '){
return counter=4;
}
else if(getCell(x,y-1)!= ' '){
return counter=8;
}
else{
return counter=0;
}
}
private char getCell(int x, int y){
if(x>=0 && y>=0 && dieter[y].length-1>x && dieter.length-1>y){
return dieter[x][y];
}
else{
return ' ';
}
}
}
Die getCell Methode überprüft ob das Koordinatenpaar innerhalb des feldes liegt oder eben nicht
getNeighborhood gibt die Sigantur zurück die oben im Quelltext erwähnt wird
Allerdings soll ich den Konstruktor jetzt erweitern, er soll in zweierschritten durch die Spielfeldbeschreibung laufen und jeweils die nachbarschaftssignatur ausrechnet und diese als index in das array NEIGHBORHOOD_TO_FILENAME verwendet um damit GameObject-Objekte konstruiert. Die Koordinaten müssen dabei halbiert werden.
Kann mir jemand helfen einen Ansatz zu finden oder das mit mir zsm durchrechnet, meinetwegen auch mit anderen Daten?
Quelltext:
/**
* Diese Klasse repräsentiert ein Spielfeld. Ihr Konstruktur bekommt dieses als
* String-Array übergeben.
*/
class Field
{
/**
* Die Dateinamen der Bodengitterelemente, die direkt mit einer
* Rotation 0 verwendet werden können. Der Index ergibt sich
* aus der Summe der folgenden Zahlen:
* 1: In Richtung 0 (+1, 0) gibt es eine Verbindung.
* 2: In Richtung 1 (0, +1) gibt es eine Verbindung.
* 4: In Richtung 2 (-1, 0) gibt es eine Verbindung.
* 8: In Richtung 3 (0, -1) gibt es eine Verbindung.
*/
private static final String[] NEIGHBORHOOD_TO_FILENAME = {
"floor",
"floor-e-0",
"floor-e-1",
"floor-l-0",
"floor-e-2",
"floor-i-0",
"floor-l-1",
"floor-t-1",
"floor-e-3",
"floor-l-3",
"floor-i-1",
"floor-t-0",
"floor-l-2",
"floor-t-3",
"floor-t-2",
"floor-x"
};
char dieter[][];
/** Ein Testfall, der alle Nachbarschaften enthält. */
static void test()
{
// Auskommentieren, sobald Konstruktor vorhanden
new Field(new String[] {
"O-O-O-O ",
"| | ",
"O O-O-O O",
"| | | | |",
"O-O-O-O-O",
"| | | | |",
"O O-O-O O",
" | |",
" O-O-O-O"
});
}
public Field(String[]field){
dieter=new char[field.length][];
for(int x=0;x<field.length;x++){
dieter[x]=new char[field[x].length()];
for(int y=0; y<field[x].length();y++){
dieter[x][y]=field[x].charAt(y);
}
}
}
private int getNeighborhood(int x, int y){
int counter=0;
if(getCell(x+1,y)!= ' '){
return counter=1;
}
else if(getCell(x,y+1)!= ' '){
return counter=2;
}
else if(getCell(x-1,y)!= ' '){
return counter=4;
}
else if(getCell(x,y-1)!= ' '){
return counter=8;
}
else{
return counter=0;
}
}
private char getCell(int x, int y){
if(x>=0 && y>=0 && dieter[y].length-1>x && dieter.length-1>y){
return dieter[x][y];
}
else{
return ' ';
}
}
}