Zdravím všechny!
Chci vytvořit v javě hru - standardní miny jen s tím rozdílem, že po hracím poli hráč "chodí", tedy vždy se mu zobrazí barevné kolečko tam kam zrovna klikne. Zatím mi vše funguje, nicméně myslím si, že by to mělo jít udělat lépe, jen nevím jak, zjevně mi z OOP stále něco uniká, google nepomáhá. Příklad níže je jen stručným popisem, popisující důležité části kódu.
Uplně stručně: jde mi vlastně o to, jak mohu v jedné třídě zjistit proměnnou nějaké instance nebo volat její metodu, když tu instanci mám vytvořenou v jiné třídě.
Mám tedy třídy:
public class Vrstva extends Canvas implements Runnable - zde spouštím vlákno, mám zde metody update (vlákno ji spouští 60x za vteřinu) a render.
- v konstruktoru volám:
this.poleVrstva = new Pole();
this.hracVrstva = new Hrac();
this.addMouseListener(hracVrstva);
- v metodě render pak volám metodu render instancí poleVrstva a hracVrstva - vykreslí se.
- v metodě update volám mimo jiné:
poleVrstva.odkryjPole(hracVrstva.getPoziceX(), hracVrstva.getPoziceY());
public class Pole - zde mám krom jiného metodu:
public void odkryjPole(int x,int y) - tato metoda aktualizuje dvourozměrné pole proměnných poleOdkryta, které obsahuje souřadnice polí, která již byla odkryta a mají na nich tedy být vykreslena čísla - aktualizováno na základě poziceX a poziceY hráče, je voláno ze třídy vrstva. Zjednodušeně je tam: If (poleOdkryto[x][y] != true) {poleOdkryto[x][y] = true}
- dále metoda render - vykresluje pole a čísla na odkrytých polích (na základě hodnot v poleOdkryta)
public class Hrac implements MouseListener - zde využívám metodu:
public void mouseClicked(MouseEvent e) - v této metodě vždy po kliknutí aktualizuji pozici hráče (souřadnice x a y)
- dále tu mám metodu render - vykreslení kolečka na pozici (pro příklad nedůležité)
A TEĎ TEDY:
Celé to funguje jen díky tomu, že metoda update a z ní metoda odkryjPole se volá 60x za vteřinu a aktualizuje mi poleOdkryto. I kdyby hráč klikl myší jednou za hodinu, metody se volají stále - vlastně zbytečně. Chtěl bych to udělat tak, aby se metoda odkryjPole volala pouze když je kliknuto myší. Ale jak to mám udělat, když mouseListener mám ve třídě Hrac, metodu odkryjPole mám ve třídě Pole a instance těchto dvou třít vytvářím v matodě Vrstva??? Co mám napsat např. do metody mouseClicked, aby to spustilo metodu poleVrstva.odkryjPole?
Díky všem za jakoukoli pomoc!
Latalik