Spisu treści:
- Krok 1: Materiały
- Krok 2: Poznaj program – Zarząd
- Krok 3: Poznaj program - kafelek
- Krok 4: Poznaj program - Gra
- Krok 5: Ważne metody - ruch
Wideo: Zaprogramuj własną grę 2048 w Javie!: 8 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:26
Przez PranP1My (niekompletna) SiteŚledź Więcej autora:
Uwielbiam grę 2048. Postanowiłem więc zaprogramować własną wersję.
Jest bardzo podobny do rzeczywistej gry, ale samodzielne programowanie daje mi swobodę zmiany wszystkiego, co chcę, kiedy tylko chcę. Jeśli chcę gry 5x5 zamiast typowego 4x4, prosta zmiana przy użyciu konstruktora „Board” pozwoli mi to zrobić. Powiedzmy, że chcę utrudnić grę, dodając elementy w pozycjach, które uczynią ją najbardziej złożoną dla gracza, a nie losowo. Używając prostego algorytmu, mogę to zrobić. Chociaż nie omówię wszystkich tych modyfikacji w tym Instruktażowym, planuję dodawać więcej, gdy idę.
Na razie jednak zaprogramujemy typową grę 2048.
Zacznijmy!
(Uwaga: ten Instructable wymaga umiarkowanej znajomości programowania - szczególnie w języku Java)
Krok 1: Materiały
Do tego projektu nie będziesz potrzebować wiele, ponieważ jest to tylko przewodnik po programowaniu.
Materiały:
- Laptop
- Eclipse (lub dowolne IDE do wyboru)
Tak. Otóż to.
Krok 2: Poznaj program – Zarząd
Cały kod wgrałem na GitHub - sprawdź tutaj:
Podzieliłem grę na 3 klasy: Board, Tile i Game.
Deska:
Opis: Klasa Board zajmuje się planszą do gry, konfigurując tablicę elementów 'Tile', pobierając bieżący wynik i najwyższy kafelek oraz umieszczając tablicę w ciągu (do użycia później w 'Game'). Większość logiki również jest tutaj, klasa zapewnia metody odradzania się 2 i 4 w losowych miejscach, poruszania się w górę, w dół, w lewo i w prawo oraz powiadamiania graczy o zakończeniu gry.
Konstruktorzy:
/* Domyślny konstruktor tablicy - ustawia macierz 4x4 */
tablica publiczna() {…}
/* Konstruktor tablicy - ustawia macierz o określonej wielkości siatki */
tablica publiczna (siatki wewnętrzne) {…}
Metody:
/* Metoda pobierająca zwracająca tablicę */
Płytka publiczna getBoard() {…}
/* Metoda pobierająca zwracająca wynik */
public int getScore() {…}
/* Znajduje najwyższą płytkę na planszy i zwraca ją */
public int getHighTile() {…}
/* Wypisuje tablicę na konsolę - w celach testowych */
public void print() {…}
/* Zwraca tablicę jako ciąg znaków - używany w GUI */
public String toString() {…}
/* Odradza 2 (lub 4) na pustym polu w momencie wykonania ruchu */
public void spawn() {…}
/* Sprawdza, czy tablica jest całkowicie zaciemniona, a jeśli tak, skłoni graczy do ponownego uruchomienia */
public boolean blackOut() {…}
/* Sprawdza, czy gra się skończyła - gdy plansza jest zaciemniona i żadna z płytek nie może się łączyć */
publiczna gra logicznaOver() {…}
/* Wywoływane po naciśnięciu 'w' lub strzałki w górę - wywołuje 'verticalMove' dla każdej płytki na planszy z parametrem 'up' */
public void up() {…}
/* Wywoływane po naciśnięciu 's' lub strzałki w dół - wywołuje 'verticalMove' dla każdej płytki na planszy z parametrem 'down' */public void down() {…}
/* Wywoływane po naciśnięciu 'd' lub strzałki w prawo - wywołuje 'horizontalMove' dla każdej płytki na planszy z parametrem 'right' */public void right() {…}
/* Wywoływane po naciśnięciu 'a' lub strzałki w lewo - wywołuje 'horizontalMove' dla każdej płytki na planszy z parametrem 'left' */
public void left() {…}
/* Porównuje wartości dwóch płytek razem i jeśli są takie same lub jeśli jedna jest równa 0 (płytka gładka) - ich wartości są dodawane (pod warunkiem, że porównywane płytki to dwie różne płytki i poruszają się w odpowiednim kierunku) - rekursywnie porusza się po rzędzie */
public void horizontalMove (int row, int col, String direction) {…}
/* Porównuje wartości dwóch płytek razem i jeśli są takie same lub jeśli jedna jest równa 0 (płytka gładka) - ich wartości są dodawane (pod warunkiem, że porównywane płytki to dwie różne płytki i poruszają się w odpowiednim kierunku) - rekursywnie porusza się po kolumnie */
public void verticalMove (int row, int col, String direction) {…}
Tak, to wiele metod - ale nie martw się, większość z nich jest niezwykle łatwa do zrozumienia. Do tego klasa 'Board' jest najbardziej złożona, więc wszystko po niej będzie stosunkowo proste.
Krok 3: Poznaj program - kafelek
Płytka:
Opis: Klasa Tile zajmuje się poszczególnymi płytkami i jest najmniejszą ze wszystkich klas. Każda płytka ma wartość całkowitą i kolor. Ma dwa konstruktory, które tworzą kafelki o wartości 0 (domyślnie) lub o wartości #. Metody są w większości oczywiste, przy czym metody „getter” i „setter” stanowią większość całości.
Konstruktorzy:
/* Konstruuje podstawowy kafelek o wartości 0 */
Płytka publiczna() {…}
/* Konstruuje kafelek o wartości liczby */
Płytka publiczna (numer wewnętrzny) {…}
Metody:
/* Pobiera wartość kafelka */
public int getValue() {…}
/* Ustawia wartość kafelka - używana przy dodawaniu dwóch kafelków razem */
public void setValue (wartość int) {…}
/* Reprezentuje kafelek jako String - używany w GUI */
public String toString() {…}
/* Ustawia kolor kafelka na podstawie jego wartości */
public void setColor() {…}
/* Pobiera kolor kafelka */
public void pobierzKolor() {…}
Krok 4: Poznaj program - Gra
Gra
Opis: Klasa gry zawiera główną metodę, większość metod GUI i interakcje z klawiszami. Wykorzystuje zarówno klasy Tile, jak i Board i umożliwia im współpracę.
Konstruktorzy:
Nic
Metody:
/* ustawia GUI o odpowiednich rozmiarach i dodaje Key Listener */
public static void setUpGUI() {…}
/* Sprawdza, czy naciśnięto klawisze wasd lub strzałek i wykonuje odpowiednie akcje - aktualizuje JFrame przy każdym ruchu */
public void keyPressed (KeyEvent e) {…}
/* Maluje GUI serią ciągów, planszy, kafelków i zapewnia, że zostaną odmalowane po zakończeniu gry */
public void paint (Grafika g) {…}
/* rysuje pojedynczy kafelek - wywoływany z metody paint */
public void drawTiles (Grafika g, Tile tile, int x, int y) {…}
/* Metoda główna - ustawia GUI i uruchamia grę */
public static void main(String args) {…}
Krok 5: Ważne metody - ruch
Najważniejsze do zrozumienia są metody poruszania się, ale dobrą wiadomością jest to, że gdy zrozumiesz ruchy pionowe, możesz zastosować to zrozumienie do ruchów poziomych. W rzeczywistości trzy metody ruchu pionowego są dokładnie takie same, jak trzy ruchy metodą poziomą, z wyjątkiem jednego ruchu przez rzędy, a drugiego przez kolumny. Z tego powodu skupmy się tylko na metodach ruchu pionowego.
private void verticalMove(int row, int col, String direction)
{ inicjał płytki = tablica[granica][kol]; Porównanie kafelków = tablica[rząd][kol]; if (initial.getValue() == 0 || initial.getValue() == porównaj.getValue()) { if (wiersz > granica || (kierunek.equals("w dół") && (wiersz < granica))) { int addScore = początkowa.getValue() + porównaj.getValue(); if (initial.getValue() != 0) { score += addScore; } Initial.setValue(addScore); porównaj.setValue(0); } } else { if (direction.equals("w dół")) { border--; } inny { granica++; } verticalMove(wiersz, kolumna, kierunek); } }
Powyższa metoda, verticalMove, jest wywoływana przez metody 'up' i 'down'. Przyjrzyjmy się metodzie „w górę”.
publiczne nieważne w górę ()
{ for (int i = 0; i < siatki; i++) { obramowanie = 0; for (int j = 0; j < grids; j++) { if (tablica[j].getValue() != 0) { if (granica <= j) { verticalMove(j, i, "w górę"); } } } } }
Ta metoda przechodzi przez całą planszę i wywołuje verticalMove dla każdej płytki z parametrem „w górę”. verticalMove następnie porównuje płytkę na pozycjach „j” i „i” z płytką na pozycjach „border” i „i”. Jeśli oba są równe, są połączone. Jeśli tak nie jest, kafelek obramowania jest zwiększany o 1 (ponieważ parametr w miejscu to „w górę”) i ponownie wywoływana jest funkcja verticalMove.
Zalecana:
Zaprogramuj dowolną płytę/moduł ESP8266 za pomocą poleceń AT Firmware: 5 kroków
Zaprogramuj dowolną płytkę/moduł ESP8266 z oprogramowaniem układowym poleceń AT: Każdy moduł i płytkę ESP8266 można zaprogramować na wiele sposobów: polecenia Arduino, Python, Lua, AT, prawdopodobnie o wiele więcej … Pierwsze trzy z nich są najlepsze do samodzielnej pracy, oprogramowanie układowe AT służy do używania ESP8266 jako modułu lub do szybkiego testowania z TTL RS232 c
Zaprogramuj ATtiny z Arduino: 7 kroków (ze zdjęciami)
Zaprogramuj ATtiny z Arduino: Poniżej przedstawiono wskazówki dotyczące programowania mikrokontrolerów ATtiny za pomocą Arduino IDE. W prostym języku angielskim jest to sposób programowania 8-pinowych układów Atmel tak, jak normalnie w Arduino. To fajnie, bo ATtiny jest malutkie i – cóż – pozwala
Stwórz własną grę 1D Pong: 5 kroków (ze zdjęciami)
Stwórz własną grę ponga 1D: W tym projekcie pokażę, jak połączyłem płytę MDF z przyciskami brzęczyka, diodami LED i Arduino Nano, aby stworzyć grę w ponga 1D, w którą gra się naprawdę fajnie. Po drodze pokażę Ci, jak stworzyć układ elektroniczny i jak różni
Jak zrobić grę w pokera w Javie: 4 kroki
Jak zrobić grę w pokera w Javie: Ta instrukcja jest przeznaczona dla tych, którzy już znają Javę i chcą stworzyć grę w pokera w Javie. Przede wszystkim będziesz potrzebować komputera z jakąś aplikacją kodującą lub stroną internetową, która umożliwia korzystanie z Javy. Polecam używać DrJ
Napisz własną grę w kółko i krzyżyk w Javie: 6 kroków
Napisz własną grę w kółko i krzyżyk w Javie: Jestem pewien, że wszyscy wiecie o klasycznej grze w kółko i krzyżyk. Od czasów szkoły podstawowej Tic Tac Toe była popularną grą, w którą grałem z przyjaciółmi. Zawsze fascynowała mnie prostota gry. Na pierwszym roku moje