Obrazki logiczne

1

Chciałbym napisać program wykorzystujący Swing w którym można rozwiązywać obrazki logiczne
przykład łamigłówki żeby zobrazować problem:
user image

Całość mógłbym reprezentować jako tablice o wartościach 0 -puste 1-zamalowane 2-krzyżyk
oraz 2 tablice intow u góry i w lewej strony

potrzebowałbym tylko prostej metody na:

  1. klikaniem zmianę stanu kratki [ ] -> [X] -> [||] ->[ ] -> .... (poprzez || mam na myśli cały czarny)
  2. przy tablicach krawędziowych chciałbym dać możliwość przekreślania całego wiersza, oraz przekreślania pojedynczych komórek (chodzi o to jak zrobić żeby po kliknięciu np na 2 zmieniła się ona w przekreślone 2)
0

Hmm, ciekawy pomysł. Chcąc rozwijać projekt mógłbyś np. rysować obrazek a później po prostu dopasowywać do niego liczby.

public void Click(int x, int y) {
//0 to puste, 1 to zamalowane, 2 to krzyżyk. Kolejność: 0>2>1>0>2>1...
if (pola[x][y] = = 0) pola[x][y] = 2;
else if (pola[x][y] == 1) pola[x][y] = 0;
else if (pola[x][y] == 2) pola[x][y] = 1;
}
  1. Swing nie daje chyba możliwości używania czcionki przekreślonej, ale jeżeli jest możliwość korzystania ze znaczników HTML w Stringach i JLabel, to wystarczy znacznik "s". Co do samej metody, to gdyby HTML działał w JLabelach, mógłbyś po prostu zmieniać zawartość JLabel po kliknięciu. Problem jest, gdy chcesz odróżnić przekreślenie jednej liczby od całej grupki, ale można się tu bawić w osobne akcje dla kliknięcia lewym i prawym przyciskiem myszki.
0
  1. Bardziej chodziło mi o zobrazowanie tego nie sam algorytm klikania :P. Dokładniej rzecz biorąc czym ma być pole takiej tabeli:
    -polem tekstowym z listenerem które zmienia kolor po kliknięciu na nie (czy taki listener można wywołać samym kliknięciem w pole tekstowe? Kolor jak mi się zdaje nie trudno zmienić) czyli cykl byłby taki: puste->czarne->wstawiena kropki/myslnik/albo jakis inny kolor->puste->czarne -> itd...
  • nie wpadłem na razie na żaden inny pomysł. Oczywiście za każdy lepszy będę wdzięczny.
  1. Najlepiej jakby była możliwość własnie przekreślenia, ale ja nie ma to trudno. Z HTML nie miałem większej styczności, więc też odpada. Innym rozwiązaniem (nie tak doskonałym) było by zmiana koloru czcionki (co chyba jest możliwe) albo całkowite uniewidocznienie danej liczby (warto jednak widzieć wyeliminowane liczby to pomaga w rozwiązywaniu).

Pozostaje tylko pytanie (takie samo jak w poprzednim) jak to zaprezentować? Czy da się stworzyć właśnie tabele samych teks fieldów (zablokowanych do edycji przez użytkownika) które po kliknięciu na nie zmienią stan(tekst field z listenerem "kliknięcia")? Nie proszę o żaden ko źródłowy jedynie stwierdzenie czy takie rozwiązanie jest logiczne i wykonalne (nie znam WSZYSTKICH możliwości javy i chciałbym ograniczyć się własnie do swingow) i ewentualnie wskazówki do elementów które mógłbym użyć.

Edycje liczb w tabelach bocznej i tej na górze myślałem zrobić automatycznie np:

[ ]-pusta kratka
[x]-kratka zaznaczona

stan przed zaznaczeniem
rząd: 5,1 [x][x][x][x][ ][ ]

stan po zaznaczeniu piątek kratki przez użytkownika

rząd: 5,1 [x]x][x][x][x][ ]

czyli automatyczne wykrycie skreślonych 5 kratek obok siebie i wyeliminowaniu (skreśleniu,zmianie czcionki) odpowiedniej liczby

stan po zaznaczeniu szóstej kratki przez użytkownika (czyli błąd)

rząd: 5,1 [x][x][x][x][x][x] ERROR!

czyli odznaczenie automatyczne liczby 5 o komunikat o błędzie (gdyż wśród liczb nie ma liczby 6 ,czyli 6 kratek zamalowanych obok siebie)

1

Pole zajmowane przez obrazek możesz zrobić jako tablicę(gridLayaut) jButtonów z akcjami na kliknięcie i po kliknięciu w któryś piksel obrazka sprawdzasz w co ktoś kliknął( evt.getSource() ) i już tylko zmieniasz kolor.

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