Cześć, mam taki kod w androidzie i dwa problemy poważne.
Pierwszy to wyrzuca mi przekroczenie tablicy, mimo, że jest warunek gdzie y+1>5 co sprawdza czy współrzędna Y w tablicy jest większa od zakresu kolumn tablicy(komentarz niżej)
Drug problem jest z orientacją pionową. Pozwala wstawić statek pomimo tego, że wiersz nizej jest jakiś obiekt już inny od wody. A czasami po prostu pisze kolizja tam gdzie normalnie można wstawic statek... Wg mnie wszystko powinno być dobrze?
Wybrany przycisk;
@Override
public void onClick(View v) {
Toast toast = null;
for (int i = 0; i < mapa.length; i++) {
for (int j = 0; j < mapa.length; j++) {
if (v.getId() == mapa[i][j].getId()) {
collision(i,j,Ship.get(0));
}
}
}
}
Ustawienie statków
public void setShip(int x, int y) {
if (Ship.size() != 0) {
if (orient.isChecked()) {
if (Ship.get(0).equals("Jednomasztowy")) {
mapa[x][y].setImageResource(R.drawable.dostepnystatek);
mapa[x][y].setTag(R.drawable.dostepnystatek);
}
if (Ship.get(0).equals("dwumasztowy")) {
for (int i = 0; i < 2; i++) {
mapa[x +i][y].setImageResource(R.drawable.dostepnystatek);
mapa[x+i][y].setTag(R.drawable.dostepnystatek);
}
} else if (Ship.get(0).equals("trójmasztowy")) {
for (int i = 0; i < 3; i++) {
mapa[x + i][y].setImageResource(R.drawable.dostepnystatek);
mapa[x+i][y].setTag(R.drawable.dostepnystatek);
}
}
}
else
{
if (Ship.get(0).equals("Jednomasztowy")) {
mapa[x][y].setImageResource(R.drawable.dostepnystatek);
mapa[x][y].setTag(R.drawable.dostepnystatek);
}
else if (Ship.get(0).equals("dwumasztowy")) {
for (int i = 0; i < 2; i++) {
mapa[x][y+i].setImageResource(R.drawable.dostepnystatek);
mapa[x][y+i].setTag(R.drawable.dostepnystatek);
}
} else if (Ship.get(0).equals("trójmasztowy")) {
for (int i = 0; i < 3; i++) {
mapa[x][y+i].setImageResource(R.drawable.dostepnystatek);
mapa[x][y+i].setTag(R.drawable.dostepnystatek);
}
}
}
}
text.setText(Ship.get(0));
Ship.remove(0);
}
Kolizja
//wykrywa kolizje
public void collision(int x, int y, String statek) {
boolean flaga=true;
Toast toast;
if((!mapa[x][y].getTag().equals(R.drawable.blog_dp_5058985_7848593_tr_woda))) {
flaga=false;
}
if(statek.equals("dwumasztowy")) {
try {
if (!mapa[x][y + 1].getTag().equals(R.drawable.blog_dp_5058985_7848593_tr_woda) || y + 1 > 5) //kolizja z drugim obiektem obok lub końcem tablicy? {
flaga = false;
}
} catch (ArrayIndexOutOfBoundsException e) {
toast = Toast.makeText(getApplicationContext(), "jest kolizja", Toast.LENGTH_SHORT);
toast.show();
}
}
else if (statek.equals("trójmasztowy")) {
if (!mapa[x][y + 2].getTag().equals(R.drawable.blog_dp_5058985_7848593_tr_woda)) {
{
flaga = false;
}
}
if (orient.isChecked()) {
if((!mapa[x][y].getTag().equals(R.drawable.blog_dp_5058985_7848593_tr_woda))) {
flaga=false;
}
if (statek.equals("dwumasztowy")) {
if (!mapa[x + 1][y].getTag().equals(R.drawable.blog_dp_5058985_7848593_tr_woda)) {
flaga = false;
}
}
else if (statek.equals("trójmasztowy")) {
if (!mapa[x + 2][y].getTag().equals(R.drawable.blog_dp_5058985_7848593_tr_woda)) {
flaga = false;
}
}
}
}
//
if(flaga==false)
{
toast=Toast.makeText(getApplicationContext(), "jest kolizja", Toast.LENGTH_SHORT);
toast.show();
}
//jeśli tak ustaw statek
if (flaga==true){
setShip(x, y);
}
}