algorytm.org

Snake



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Snake
Ocena użytkowników:***** / 26
SłabyŚwietny 
Wpisany przez Dominik Goździuk, 05 stycznia 2012 11:43

Snake – gra komputerowa, w której gracz za pomocą klawiszy strzałek steruje wężem. Wąż porusza się w zamkniętym prostokącie i nie może „uderzyć” w samego siebie. Zadaniem gracza jest zdobycie jak największej liczby punktów, poprzez karmienie węża pojawią cym się na ekranie pokarmem (przyjąłem, że są to jabłka).

Założenia gry:


Inicjalizacja gry
Inicjalizacja gry polega na utworzeniu planszy, ściany, ustawieniu węża na planszy, wylosowaniu współrzędnych pokarmu i wyświetlenie go na planszy oraz utworzenie obiektu klasy Timer, który steruje całym programem. Współrzędne każdego kawałka ciała węża przechowywane są w liście ArrayList, osobno współrzędna x i y (równie dobrze można użyć tablicy dwuwymiarowej). Potrzebne są również cztery zmienne logiczne, które będą przechowywały aktualny kierunek poruszania się węża. W danym momencie tylko jedna z tych zmiennych przyjmuje wartość prawda, a pozostałe mają wartość fałsz (wąż porusza się w jednym kierunku na raz ;) Przyda się również zmienna liczbowa, która będzie przechowywała liczbę elementów ciała węża. Ciało węża, pokarm i cegiełki ściany są obrazkami. Dla odróżnienia głowa i reszta ciała są innego koloru.

Sprawdzenie kolizji
Sprawdzenie kolizji odbywa się za pomocą metody checkCollision(). Metoda ta sprawdza czy którekolwiek dwa kawałki ciała węża nie mają tych samych współrzędnych. Następnie sprawdza czy wąż nie przekroczył którejkolwiek ze ścian. Jeśli jeden z tych warunków jest spełniony gra kończy się.

Poruszanie
Za poruszanie się węża odpowiada metoda move(). Metoda ta przypisuje każdemu kawałkowi ciała węża współrzędne elementu który znajduje się przed nim, oprócz głowy. (Załóżmy, że mamy w liście pięć elementów. Interesują nas indeksy od 1 do 4, ponieważ nie uwzględniamy głowy. Tak więc element o indeksie 4 otrzyma wartość elementu o indeksie 3, element o indeksie 3 otrzyma wartość elementu o indeksie 2 itd. ). Sprawa głowy jest nieco trudniejsza ponieważ musimy sprawdzić w którą stronę aktualnie porusza się wąż. (z pomocą przychodzą wcześniej wspomniane zmienne logiczne). W zależności od kierunku poruszania się węża odpowiednio zmieniamy współrzędne głowy. (dodajemy lub odejmujemy 10 pikseli do pierwszego elementu listy x lub y).

Wyświetlenie pokarmu
Jeśli wąż zjadł swój pokarm, należy wyświetlić następny. Odpowiada za to metoda locateApple(). W tym celu losujemy dwie wartości całkowite. Sprawdzamy czy na wylosowanej współrzędnej nie znajduje się ciało węża. Jeśli nie wyświetlamy w tym miejscu pokarm, w przeciwnym wypadku powtarzamy losowanie.

Zjedzenie pokarmu
Do sprawdzenia czy wąż zjadł swój pokarm służy metoda checkApple(). W metodzie tej sprawdzamy czy współrzędna głowy węża pokrywa się ze współrzędną pokarmu. Jeśli tak wyświetlamy nowy pokarm, powiększamy węża (zwiększamy o jeden liczbę jego elementów) i dodajemy 10 punktów do wyniku. W mojej implementacji całością programu steruje klasa Timer. Po naciśnięciu przycisku "Start" Timer jest uruchamiany. Klasa ta wykonuje podane w metodzie actionPerformed() działania co pewien podany okres czasu. Jest to kolejno:

Pliki źródłowe:

arkanoid



Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Dominik GoździukJava
.java
.java
***** / 19
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język
programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie

Poprawiony: 05 stycznia 2012 11:51
Komentarze
photo
+1 # anonim 2016-04-09 18:08
Metoda losowania pokarmu nie jest zbyt dobra - możliwe, że bedziemy wiele razy losować liczby na ciele węża, potencjalnie w nieskończoność...
program może się więc zawieszać
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz