Kłopoty przy tworzeniu gry w warcaby.

0

Witam , próbuje stworzyć gre warcaby.
Stworzyłem pole poprzez setLayout(new GridLayout(8,8,0,0));
Kolejne pola dodałem w klasie pochodnej po Jbutton jako tablica[8][8],
w odpowiednich polach wywołałem obiekty klasie wywołującej metodę metody paintComponent(Graphics g), która tworzy kolejne pionki. Dodałem je za pomocą add(pionek).
Próbuj teraz w metodzie actionPerformed usuwać pierwsza kliknięta kartę na pusto tzn znika zn niej pionek. Co sie nie udaje zwykłym wywołaniem setBackground. Oraz próbuje w drugiej klikniętej karcie dodać add(pionek). jednak ten sposób nie działa. Jak powiewem zdefiniować metody tworzenia pionka w pustym polu. oraz usuwania pionka z starego pola.

Kolejne pytanie jak uniemożliwić klikanie w pola, w których ustawione sa np pionki białe.

0

Najlepiej dla siebie zrobisz pisząc odpowiednią logikę niezależną od GUI - ot, sama teoria w programie - i jej symulacje.

Kolejne pytanie jak uniemożliwić klikanie w pola, w których ustawione sa np pionki białe.

Odpowiednia walidacja.

0

Nie za bardzo rozumie, co miałbym zrobić, jak miało by wygląda stworzenie takiej logiki ?

0

Reprezentuj w logiczny sposób to wszystko.
Mapa zawierająca pole, które mogą być puste, lub też może stać na nich konkretny pionek
Co się dzieje, gdy pole jest zajęte?
i tak dalej.

0

Wygląd przycisku możesz zmieniać metodą setIcon(...). Argumentem może być null - gdy pole jest puste, lub rysunek pionka.
Przyciski maja metodę setEnabled(false), która wyłącza reakcję na kliknięcie.

0

Dzięki za pomoc, mam jednak problem z pobraniem aktualnej ikony z pola. Ustawiłem ikony na czarny i biały , które reprezentują pionki.
Próbowałem zwrócić obiekt Icon za pomocą getIcon(), jednak nie pobiera mi obiektu ustawionego na klikniętym polu. Czy dobrze wywołuje ta metodę np pole1.getIcon(), dodam , że działa zarówno setIcon(null) dla danego pola czy ustawinienie pionka na polu pustym

0

Coś zmyślasz.przycisk.getIcon() zwraca referencję do ikony.

0

Sorki, chyba miałem jakiś udar w tym dniu porównywałem obiekty za pomoca == ;p

0

Jeśli kod jest dobrze zaprojektowany, to tak właśnie powinieneś porównywać. Np. rysunek białego pionka raz wczytujesz z pliku lub raz rysujesz w kodzie, zapamiętujesz do zmiennej whitePawn. Potem

przycisk.setIcon(whitePawn);
if(przycisk.getIcon() == whitePawn)
...
0

OK, dzięki za wyjaśnienie, jeszcze jedno pytanko jak zwrócić indexy wybranego pola? Tzn chce odblokować możliwość kliknięcia takim polom że, jesli pole wybrane to wybrane[n][m] to set Enabled ustawim dla pol [n+1][m+1] lub [n+1][ m-1]

0

Na szybko widzę dwa rozwiązania:

  1. Tworzysz nową klasę Pole extends JButton, w której są dwie składowe z indeksami.
  2. Tworzysz HashMap<JButton,Point> i w tym Point pamiętasz indeksy pola.
0

Mam taką klasę a konkretne pola utworzyłem w petli

  for(int j = 0; j<8; j++){
                   Pole pole = new Pole(i , j);
                   pola[i][j] =pole;
                   pola[i][j].addActionListener(this);
                   add(pole);
               
               } 

Jednak gdy chce w metodzie actionPerformed utworzyć nowe zmienne bez przypisania im wartosic tak bay byly indeksami tablicy zwróconego pola wskakuje błąd niezainicjowania zmiennych

1

Masz w klasie Pole taki kod:

class Pole extends JButton{
    int x;
    int y;
    ....
   Pole(int x,int y){
       this.x = x;
       this.y = y;

A w listenerze taki:

Pole p = (Pole)(ae.getSource());
0

Zgadza się jak teraz dla obiektu p wybrać pole , które będzie miało indeks o jedne wiekszy lub o jedne mniejszy ?

0

Ok problem już rozwiązany.
Czy istnieję jakiś algorytm, który zoptymalizuje mi warunki poruszania się pionków
Aktualnie mam 300 linni kodu i tylko ustawianą możliwości poruszania się pionków. wszystko robię na if-ach
Czy można zmienic metode setEnabled() wizualnie, tak bay przycisk nie robil sie calkowcie szary ?

Przedstawiam, tutaj fragment tylko dla mozliwości ustawiania pionka czarnego zaleznie od pozycji
http://pastebin.com/JUEFuMDc

0

Pomoże ktoś?

1 użytkowników online, w tym zalogowanych: 0, gości: 1