Wątki i ticks w grze Snake

0

Witam, piszę grę Snake na podstawie poradnika, ale nie rozumiem dokładnie jak działa pojedynczy wątek w mojej grze. Mam jeszcze pytanie co do ticks, mógłby ktoś powiedzieć jak dokładnie działa? Całą resztę już rozumiem :-) Z góry dzięki i przepraszam za problem

https://pastebin.com/t225zxXR

1

Błagam, błagam, błagam !!!!!! Staraj się nie używać polskich słów jako nazwy bo wejdzie Ci to w krew i zaczniesz robić takie kwiatki w robocie. Jak już bardzo musisz używać polskich słów to chociaż NIE UŻYWAJ polskich liter jak w przypadku (wątek ) Ticks liczy Ci czas (na zasadzie procesor przydziela na wątek swoją moc, wykonuje to ticks++ kilka razy i parę innych metod (poczytaj o wątkach) i znów go usypia. Jak licznik przekroczy 180000 to wąż się przesuwa) i przesuwa węża w odpowiednią stronę. Robiąc to (błagam zmień tą polską nazwę albo choć wywal "ą"):

  wątek.start();

uruchamiasz wątek czyli wywołujesz metodę:

 public void run()
    {
        while(running){
            tick();
            repaint();
        }

a co robi ta metoda sam widzisz

0

Dzięki dobry człowieku! Oczywiście wszystko zmieniłem na angielskie nazwy :-) Już wszystko rozumiem, prawie wszystko :) Nie jestem pewny czy dobrze zrozumiałem, po zmianie kierunku ruchu weża tworzony jest nowy obiekt (głowa?)

if (snake.size() > size) {
                    snake.remove(0);
                }

A co z tym fragmentem? Gdy go wykomentuje to wąż ciągle się wydłuża, po stworzeniu nowej głowy kasujemy starą?

1

Musiałbyś pokazać jak wygląda klasa body bo tak trudno zgadnąć ale pewnie tak, tworzy się tam coś w rodzaju piksela (grupy pikseli ), które reprezentują następny człon węża, dodawany jest do listy, w której trzymasz wszystkie pozycje członów węża (chyba, nie widzę klasy body). Ta linijka sprawdza Ci czy rozmiar węża nie jest większy niż zdefiniowany, jeżeli tak jest to kasujesz ze swojej listy pierwszy obiekt opisujący "tył" węża. Możesz to zrozumieć tak, że jak przesuniesz się o jedną pozycję do przodu do wszystko przesunie się o jedną pozycję do przodu a tym samym ostatni człon węża (pierwszy obiekt w liście) musi zniknąć czyli zostać skasowany. Jak skasujesz to, to koniec węża nie jest kasowany a w związku z tym wąż sie wydłuża tak jak mówisz

0

Tak wygląda klasa Body, wielkie dzięki za chęć pomocy. Bardzo to doceniam :-) I co teraz o tym sadzisz?
https://pastebin.com/7Ezqczqt

1

No to jest tak jak mówiłem i Ty mówiłeś. Tworzony jest nowy obiekt reprezentujący kolejny człon węża i obiekt ten dodawany jest do listy. Pierwszy obiekt listy (koniec węża) jest natomiast usuwany aby zapewnić efekt przemieszczania się. Wyjaśnienie dokładniejsze masz wyżej. Jak dalej czegoś nie rozumiesz to pisz, to się postara inaczej to wyjaśnić.

0

Chciałbym się jeszcze dopytać o wątki. Mój program wykorzystuje jeden wątek aby zapewnić wężowi efekt przejścia, dobrze zrozumiałem? Czy możesz powiedzieć swoimi słowami jak to opisać?

1

Myślę, że wykładowca, który zlecił Ci to i tak się kapnie że nie ogarniasz :P Nie widzę całego kodu ale ogólnie uruchamiając program uruchamiasz metodę public static void main(String args[]) i to jest jakby wątek główny. Dalej robisz coś w tym main co skutkuje odpalenie wątku pobocznego z klasy Screen. W tym wątku poboczny wykonujesz to:

public void run()
    {
        while(running){
            tick();
            repaint();
        }
    }

czyli póki while() jest spełniony odpalasz tick() to jest to tworzenie nowego członu węża, przesunięcie itd. o czym rozmawialiśmy i metodę repaint(), która to jak głosi nazwa odświeża/rysuje/aktualizuje nazwij jak chcesz to co wyświetla Ci się w Gui czyli pewnie przesuwającego się węża

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