Witam czy ktoś byłby mi w stanie napisać w inny sposób metodę ponieżej, aby nie było wykonywane kilkakrotnie to samo działanie?
(żeby nie były liczone kilkakrotnie te same wyrażenia)
public void keyPressed(KeyEvent evt)
// Virtual keys (arrow keys, function keys, etc) - handled with keyPressed()
// listener.
{
if (ile == 0)
return;
int dx = 0, dy = 0, zmiana;
Random r = new Random();
if (evt.isShiftDown())
zmiana = r.nextInt(100);
else
zmiana = r.nextInt(10);
switch (evt.getKeyCode()) {
case KeyEvent.VK_LEFT:
dx -= zmiana;
break;
case KeyEvent.VK_RIGHT:
dx += zmiana;
break;
case KeyEvent.VK_UP:
dy -= zmiana;
break;
case KeyEvent.VK_DOWN:
dy += zmiana;
break;
}
figury[biezacy].liczbaRuchow++;
// sprawdzenie czy figura jest wolna lub czy jest zablokowana na obszar
// który został zwolniony
if (figury[biezacy].getZablokowanaNaObszar() == -1
|| sektory.get(figury[biezacy].getZablokowanaNaObszar()) == true) {
figury[biezacy].setZablokowanaNaObszar(-1); // zdjecie blokady z
// figury
int[] wierzcholki = new int[] { -1, -1, -1, -1 };
for (int h = 0; h < ile; h++) {
int i = -1;
for (i = 0; i < figury[h].getWierzcholki().length; i++) {
wierzcholki[i] = getNrSektora(
figury[h].getWierzcholki()[i].podajX(),
figury[h].getWierzcholki()[i].podajY());
}
if ((wierzcholki[0] == -1 || wierzcholki[0] == wierzcholki[1])
&& (wierzcholki[1] == -1 || wierzcholki[1] == wierzcholki[2])
&& (wierzcholki[2] == -1 || wierzcholki[2] == wierzcholki[3])
&& (wierzcholki[3] == -1 || wierzcholki[3] == wierzcholki[0])) {
figury[h].setNrSektora(getNrSektora(figury[h].podajX(),
figury[h].podajY()));
}
}
boolean czyZmianaSektora = false;
// sprawdzenie czy w wyniku ruchu nie nastąpi zmiana sektora
int biezacySektor = getNrSektora(figury[biezacy].podajX(),
figury[biezacy].podajY());
int i = -1;
for (i = 0; i < figury[biezacy].getWierzcholki().length; i++) {
if (getNrSektora(figury[biezacy].getWierzcholki()[i].podajX()
+ dx, figury[biezacy].getWierzcholki()[i].podajY() + dy) != biezacySektor
&& getNrSektora(
figury[biezacy].getWierzcholki()[i].podajX()
+ dx,
figury[biezacy].getWierzcholki()[i].podajY()
+ dy) != figury[biezacy].getNrSektora()) {
czyZmianaSektora = true;
break;
}
}
if (!czyZmianaSektora) {
// ten sam sektor - brak zmiany
figury[biezacy].przesun(dx, dy, getWidth(), getHeight());
} else {
// zmiana sektora jest synchronizowana, ze wzgledu na to, zeby w
// dwie figury nie znalazly sie
// w tym samym sektorze, tylko jeden watek ma prawo zmieniac
// obszar w danej chwili
synchronized (this) {
if (sektory.get(getNrSektora(
figury[biezacy].getWierzcholki()[i].podajX() + dx,
figury[biezacy].getWierzcholki()[i].podajY() + dy))) {
// jesli wolny
sektory.set(
getNrSektora(figury[biezacy].podajX(),
figury[biezacy].podajY()), new Boolean(
true));
sektory.set(
getNrSektora(
figury[biezacy].getWierzcholki()[i]
.podajX() + dx,
figury[biezacy].getWierzcholki()[i]
.podajY() + dy), new Boolean(
false));
figury[biezacy].setNrSektora(getNrSektora(
figury[biezacy].getWierzcholki()[i].podajX()
+ dx,
figury[biezacy].getWierzcholki()[i].podajY()
+ dy));
figury[biezacy]
.przesun(dx, dy, getWidth(), getHeight());
// w momencie kiedy jedna z figur zmieni sektor zwalnia
// ona poprzedni sektor
// wiec wszystkie watki zostaja o tym poinformowane o
// tej sytuacji
notifyAll();
} else {
// jeśli jest zmiana sektora oraz sektor jest
// zablokowany dana figura jest zablokowana
figury[biezacy].setZablokowanaNaObszar(getNrSektora(
figury[biezacy].getWierzcholki()[i].podajX()
+ dx,
figury[biezacy].getWierzcholki()[i].podajY()
+ dy));
}
}
}