Witam,
Robię projekt (gra memory — odwracanie kart i szukanie par) w JavieFX na programowanie obiektowe, choć nie za bardzo się na tym znam. Jest jednak za słaby, żeby zdać, więc chcę go jakoś polepszyć.** Miałem zrobić wczytywanie grafik zamiast kolorów, ale nie umiem tego zrobić.**
Ma ktoś jakieś pomysły jak w miarę łatwy sposób rozbudować ten program?
Z góry dzięki za podpowiedzi, pozdrawiam :)
Dodałem jeszcze załącznik z całą paczką z Eclipse jakby jakiś dobry człowiek chciał na to spojrzeć i się pobawić ;)
Jak na razie wygląda to tak:
Próbowałem zmieniać to tak:
Kod odpowiadający za działanie programu:
(powycinałem wszystkie elementy które nie tyczą się problemu)
public class Controller implements Initializable {
ArrayList<Title> titles = new ArrayList<>();
Title firstSelected = null;
Title secondSelected = null;
int correct = 0;
int licznik = 0;
long start;
long stop;
@FXML
Rectangle b11, b12, b13, b14, b21, b22, b23, b24, b31, b32, b33, b34, b41, b42, b43, b44;
@FXML
Label counter;
// obsługa przycisków
public void b11Clicked() {
showTitle(b11);
}
//tak zrobione dla wszystkich przycisków (...)
public void b44Clicked() {
showTitle(b44);
}
public void buttonStartClicked() {
generateNewMap();
start = System.currentTimeMillis();
licznik = 0;
correct = 0;
}
public void hideTitles() {
for (Title title : titles) {
if (title.isDark()) {
title.getButton().setFill(Color.DODGERBLUE);
}
}
}
public void showTitle(Rectangle buttonTitle) {
if (correct < 8) {
for (Title title : titles) {
counter.setText("Ilość prób: " + Integer.toString(licznik));
if (title.getButton().equals(buttonTitle)) {
int x = title.getPairID();
if (x == 1) {
// tu już zacząłem kombinować
buttonTitle.getClass().getResource("p1.jpg");
} else if (x == 2) {
buttonTitle.setFill(Color.CHOCOLATE);
} else if (x == 3) {
buttonTitle.setFill(Color.AZURE);
} else if (x == 4) {
buttonTitle.setFill(Color.GREY);
} else if (x == 5) {
buttonTitle.setFill(Color.INDIGO);
} else if (x == 6) {
buttonTitle.setFill(Color.GOLD);
} else if (x == 7) {
buttonTitle.setFill(Color.VIOLET);
} else if (x == 8) {
buttonTitle.setFill(Color.BROWN);
}
// algorytm sprawdzający
if (firstSelected == null) {
firstSelected = title;
} else {
if (secondSelected == null) {
licznik++;
secondSelected = title;
if (firstSelected.getPairID() == secondSelected.getPairID()
&& !firstSelected.equals(secondSelected)) {
firstSelected.setDark(false);
secondSelected.setDark(false);
correct++;
}
} else {
hideTitles();
firstSelected = null;
secondSelected = null;
}
}
}
}
}
if (correct == 8) {
save();
}
public void generateNewMap() {
newMap();
// wymieszanie kafelek tak aby ograniczyć sztuczność losowania par
Random random = new Random();
for (int k = 0; k < 16; k++) {
boolean x = random.nextBoolean();
if (x) {
Title temp = titles.get(k);
titles.remove(k);
titles.add(random.nextInt(16), temp);
}
}
// przydzielanie pomieszanym kafelkom par id
int pair = 1;
for (int k = 0; k < 16; k += 2) {
titles.get(k).setPairID(pair);
titles.get(k + 1).setPairID(pair);
pair++;
}
correct = 0;
firstSelected = null;
secondSelected = null;
}
public void newMap() {
titles.clear();
for (int x = 0; x < 16; x++) {
Title title = new Title(0);
titles.add(title);
}
titles.get(0).setButton(b11);
titles.get(1).setButton(b12);
titles.get(2).setButton(b13);
titles.get(3).setButton(b14);
titles.get(4).setButton(b21);
titles.get(5).setButton(b22);
titles.get(6).setButton(b23);
titles.get(7).setButton(b24);
titles.get(8).setButton(b31);
titles.get(9).setButton(b32);
titles.get(10).setButton(b33);
titles.get(11).setButton(b34);
titles.get(12).setButton(b41);
titles.get(13).setButton(b42);
titles.get(14).setButton(b43);
titles.get(15).setButton(b44);
b11.setFill(Color.DODGERBLUE);
b12.setFill(Color.DODGERBLUE);
b13.setFill(Color.DODGERBLUE);
b14.setFill(Color.DODGERBLUE);
b21.setFill(Color.DODGERBLUE);
b22.setFill(Color.DODGERBLUE);
b23.setFill(Color.DODGERBLUE);
b24.setFill(Color.DODGERBLUE);
b31.setFill(Color.DODGERBLUE);
b32.setFill(Color.DODGERBLUE);
b33.setFill(Color.DODGERBLUE);
b34.setFill(Color.DODGERBLUE);
b41.setFill(Color.DODGERBLUE);
b42.setFill(Color.DODGERBLUE);
b43.setFill(Color.DODGERBLUE);
b44.setFill(Color.DODGERBLUE);
}
@Override
public void initialize(URL location, ResourceBundle resources) {
newMap();
generateNewMap();
}
}