Wątek przeniesiony 2019-01-09 08:06 z Java przez Patryk27.

Mój pierwszy poważny program - chwalę się :)

Odpowiedz Nowy wątek
2019-01-09 03:29
0

Siema,

Chcę wam dziś przestawić moją pierwszą poważniejszą aplikacje. Jest to generator labiryntu, z wyszukaniem drogi opartej na algorytmie przeszukiwaniu grafów.
Kilka kawałków kodu (reszta dodana jako pliki)

    //***************************Wyszykiwanie Drogi *******************************************

    public  void szukajDrogi(int liczbaStart, int liczbaKoncowa,  boolean hermetyk) {
        this.liczbaWywołań++;
        Komórka start=this.getKomórka(liczbaStart);
        start.setDostepnosc(false);
        if(hermetyk){
                start.sortowanietablicy(liczbaStart, liczbaKoncowa, this.liczbaKolumn);
        }
        int i=0;        
        Komórka nextKomórka;

        do {

            nextKomórka=start.getElementOfList(i);
            i++;
            if(nextKomórka.getDostepnosc()) {
                this.listNaRozwiązanie.add(nextKomórka);

                if(nextKomórka.getNumerLiczba() != liczbaKoncowa+1){
                    this.szukajDrogi(nextKomórka.getNumerLiczba()-1, liczbaKoncowa, hermetyk);
                    start=this.getKomórka(liczbaStart);
                    nextKomórka=this.getKomórka(liczbaStart).getElementOfList(i-1);
                    if(nieMamyRozwiązania==true ){
                    this.listNaRozwiązanie.remove(this.listNaRozwiązanie.size()-1);
                    }
                }
                else {
                    this.nieMamyRozwiązania=false;
                    }
            }

        }while(nieMamyRozwiązania && start.getSizeOfList()>i );
    }

    public void ustawianieScian(boolean góra, boolean praw, boolean dół, boolean lewo, int x) {

        Komórka elementDoPrzestawienia = this.getKomórka(x);
        //****************************USTAWIANIE DLA GÓRY**********************************************
        elementDoPrzestawienia.przestawienieGórnejS(góra, liczbaKolumn, listaGłówna);
        //****************************USTAWIANIE DLA PRAWA*********************************************
        elementDoPrzestawienia.przestawieniePrawejS(praw, liczbaKolumn, listaGłówna);
        //****************************USTAWIANIE DLA DOŁU**********************************************
        elementDoPrzestawienia.przestawienieDółS(dół, liczbaKolumn, listaGłówna);
        //****************************USTAWIANIE DLA LEWA**********************************************
        elementDoPrzestawienia.przestawienieLewoS(lewo, liczbaKolumn, listaGłówna);
    }

public  void sortowanietablicy(int start,int koniec, int liczbaKolumn) {
        Komórka sprawdwPierwszej=this;
        if(koniec - start >0 && koniec -start < liczbaKolumn ) { // ten sam rodzaj poziom komórke  idz w prawo
            for(Komórka xx  : this.list) {
                if(xx.getNumerLiczba() == this.getNumerLiczba()+1) {
                    if(this.list.size() >1) {
                        sprawdwPierwszej=xx;
                        }
                }
            }
        }
        if(koniec - start <0 && koniec -start < -liczbaKolumn ) { //ten sam rodzaj poziom komórke  idz w lewo
            for(Komórka xx  : this.list) {
                if(xx.getNumerLiczba() == this.getNumerLiczba()-1) {
                    if(this.list.size() >1) {
                        sprawdwPierwszej=xx;
                        }
                }
            }
        }
        if(koniec - start <0 && koniec - start <-liczbaKolumn) { // idz w góre jeśli koniec jest mniejszy niż początek 
            for(Komórka xx  : this.list) {
                if(xx.getNumerLiczba() == this.getNumerLiczba()- liczbaKolumn) {
                    if(this.list.size() >1) {
                    sprawdwPierwszej=xx;
                    }
                }
            }
        }
        if(koniec - start >0 && koniec - start >liczbaKolumn) { //idz w dół jeśli koniec jest większy niz poczatek 
            for(Komórka xx  : this.list) {
                if(xx.getNumerLiczba() == this.getNumerLiczba()+ liczbaKolumn) {
                    sprawdwPierwszej=xx;
                }
            }   
        }
        if(sprawdwPierwszej !=this) {
            this.list.remove(sprawdwPierwszej);
            this.list.add(0, sprawdwPierwszej);
        }

    }
    void przestawienieGórnejS(boolean góra, int  liczbaKolumn, ArrayList<Komórka> listaGłówna) {
        if(góra==true) { // jeśli mamy połączyć w góre 
            if(this.getNumerLiczba()<= liczbaKolumn) { // sprawdzamy czy możemy połączyć jeśli nie to dajemy komunikat 

            }
            else {
                if(this.getGórnaS()==false) { // sprawdzamy czy są połączone jeśli nie to łączymy 
                    this.laczGóra(listaGłówna, liczbaKolumn);
                }

            }
        }
        else { // jeśli nie mamy połączyć w góre 
            if(this.getNumerLiczba()<= liczbaKolumn) { // sprawdzamy czy możemy usumąć jeśli nie to dajemy komunikat 

            }
            else {
                if(this.getGórnaS()==true) { // sprawdzamy czy są połączone jeśli tak to usuwamy połaczenie 
                    this.usunGóra(listaGłówna, liczbaKolumn);
                }

            }
        }
    }

Zdjęcie okienka aplikacji https://www.fotosik.pl/zdjecie/pelne/78e8116d5cf2006d

Czy jeśli jestem wstanie stworzyć taką aplikacje to mogę próbować załapać się na staż ?

Pozostało 580 znaków

2019-01-09 04:33
1
      Komórka start=this.getKomórka(liczbaStart);
      start.setDostepnosc(false);

Też tak kiedyś pisałem. Ale jest to nieprofesjonalne. Standard w branży jest taki, że nazwy zmiennych, klas itp. się pisze w całości po angielsku. Choćby dlatego, żeby uniknąć potworków typu "setDostepnosc".


((0b10*0b11*(0b10**0b101-0b10)**0b10+0b110)**0b10+(100-1)**0b10+0x10-1).toString(0b10**0b101+0b100);
błąd tym większy, że o ile "setKomorke" jeszcze może być to "setKomórkę" jest absolutnie nie do zaakceptowania - cw 2019-01-09 05:55
Dzięki za odpowiedz. :) - Kinomax 2019-01-09 11:41

Pozostało 580 znaków

2019-01-09 08:05
3

1.

// przykład 1:
if(góra==true) { // jeśli mamy połączyć w góre 

// przykład 2:
//****************************USTAWIANIE DLA GÓRY**********************************************

Kod powinien być w większej mierze samo-dokumentujący się - jeśli potrzebujesz już umieścić komentarz, niech wnosi on coś nowego, czego nie da się zauważyć w ułamek sekundy.

2:

// ten sam rodzaj poziom komórke  idz w prawo

Ani to po polsku, ani po angielsku - co to zdanie oznacza?

3:

public  void szukajDrogi(int liczbaStart, int liczbaKoncowa,  boolean hermetyk) {

Co reprezentują parametry tej funkcji?
Czym jest liczbaStart i co zmienia opcja hermetyk?
Dlaczego nie wynika to z nazewnictwa bądź komentarza do tej metody?

4:

Czy jeśli jestem wstanie stworzyć taką aplikacje to mogę próbować załapać się na staż ?

Spróbować nie zaszkodzi ;-)


edytowany 2x, ostatnio: Patryk27, 2019-01-09 08:06
1. są to resztki komentarza który miał za zadanie powiedzieć mi co ma znajdować w warunku if. Ponieważ najpierw zbudowałem szkielet funkcji a następnie go wypełniłem kodem. 2. jeśli obecnie odwiedzana komórka jest na tym samym poziomie co komórka końcowa to idź do komórki z prawej, jeśli jest to możliwe. Ale masz racje ten kod mógł być lepiej napisany :) - Kinomax 2019-01-09 11:58

Pozostało 580 znaków

2019-01-10 08:54
0

No i koniecznie wrzuć to na githuba, a nie tak wysyłasz klasy w załączniku:)

Pozostało 580 znaków

2019-01-10 09:42
cs
1

"Następną razą" powinieneś popracować nad architekturą. Klasa Komórka praktycznie robi wszystko, i musi wiedzieć wszytko. Tworzeniem labiryntu powinna zajmować się jakaś klasa Board czy Maze, bo ona "wie" jak są komórki ułożone. Stosujesz magiczne wartości jak np. 24, 49, co one znaczą? Po co pola typu boolean: lewaS, prawaS itd. to powinny być funkcje, najlepiej klasy kontenera komórek, a jeśli komórka chce wiedzieć czy ma sąsiada to pyta swój kontener. W tej postaci powielasz dane i gdy przyjdzie Ci do głowy, żeby w labiryncie przestawić komórki, to musisz pamiętać o aktualizacji tych pól w każdej komórce. Komplikujesz sprawę stosując jednowymiarową listę do odwzorowania siatki. Akurat tu zamiast listy mogłeś użyć dwuwymiarowej tablicy bo i tak nie zmieniasz dynamicznie rozmiaru.
labiryntu. Poczytaj też o typie wyliczeniowym, bardzo dobrze się sprawdza do eliminacji tego tłustego od if .. else spagetti code.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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