Mamy napisać grę Sokoban, nie używając intrukcji if.
Mam problem z jedną funkcją.
Mam klasę abstrakcyjną Pole po którym dziedziczą Puste, Skrzynia, Ludzik,Mur.
Klasa Plansza zawiera pozycję ludzika i tablicę dwuwymiarową Pól, na razie 6x6.
Mam problem z działaniem tej funkcji z klasy plansza:
public void przesunSkrzynie(int ax,int ay,int bx, int by)//współrzędne skrzyni i pola docelowego
{
try{
Pole tmp=pola[ax][ay].copy();
//zapamietuje jakie bylo tu pole, zwraca nowy obiekt klasy puste,mur itp w zależności czym było
Pole nowaPozycja= pola[ax][ay].przesun(pola[bx][by]);
/*ta funkcja ma zwrócić miejsce w tablicy w którym ma znaleźć się przesuwane pole. Konstrukcja jest dziwna ponieważ nie mogę używać if więc korzystam z polimorfizmu.
znajduje nowa pozycje dla przesuwanego pola, zwraca this albo argument jeśli wywołano ją na skrzynce. Czyli jeśli to nie skrzynia, lub jeśli skrzyni nie można przesunąć zwróci pola[ax][ay] a jeśli to skrzynia to zwróci puste pole czyli pola[bx][by], niby to działa ale później jak robie tak: */
pola[ax][ay]=new Puste();//ok wstawiam tu puste pole, usuwam to co tu stało
nowaPozycja=tmp;/*i tu powinno to wrzucić do tablicy ten obiekt który był przedtem pod indeks ax,ay, którego skopiowałem, jeśli to nie skrzynia wstawiony jest w to samo miejsce, jeśli to skrzynia przesuwane jest dalej, ale tego nie robi nie wiem czemu, wygląda tak jakby rezultat zwracany przez przesuń nie był referencją.
*/
}catch(ArrayIndexOutOfBoundsException e){};
}
A tak wygląda funkcja przesuń dla Skrzynia:
public Pole przesun(Pole docelowe){return docelowe;}
Czyli zwróci pole na które ma zostać przeniesione, wiem na razie że nie sprawdzam czy coś nie stoi na drodze ale to tylko do testów używam. Teraz powinno przesunąć skrzynie niezależnie od tego co stoi za nią, ale skrzynia po prostu znika i na planszy nie jest tworzona nowa.
W javie dopiero od paru dni programuje, wcześniej bylo C i C++ i nie mogę się w tym połapać. Chodzi mi o to żeby funkcja przesuń działała jak taka funkcja w C++: pole.przenies(pole2) zwraca to wskaźnik albo na pole albo na pole2 w zależności jakiego jest dokładnie typu, tym zajmie się polimorfizm i później tylko bym sobie wpisał pod ten adres coś innego, typu Pole.