JavaRush /Blog Java /Random-PL /Sekcja „Gry” w JavaRush: Silnik gry

Sekcja „Gry” w JavaRush: Silnik gry

Opublikowano w grupie Random-PL
„Gry” w JavaRush to nowa sekcja zawierająca duże projekty zadań do pisania popularnych gier komputerowych. Ich wykonanie jest prostsze niż się wydaje: każdy projekt podzielony jest na dwa tuziny podzadań. Wykonując zadania krok po kroku napiszesz swoją grę, a następnie będziesz mógł dodać do niej unikalne „funkcje” i udostępnić ją znajomym. RozdziałGry wykorzystują prosty silnik gry JavaRush . W tym artykule porozmawiamy o jego kluczowych cechach i tym, jak wygląda proces pisania gry.
  1. Wstęp
  2. Inicjalizacja gry
  3. Tworzenie pola gry
  4. Prymitywny program
  5. Praca z komórkami pola gry
  6. Praca z kolorem
  7. Okna dialogowe
  8. Metody użytkowe
  9. Ograniczenia silnika gry

1. Wstęp

Wdrażanie gry komputerowej po stronie twórcy składa się z trzech etapów:
  1. Inicjalizacja gry to działania przygotowawcze: ustawienie rozmiaru i rysunku pola gry, utworzenie i zainstalowanie obiektów gry w pozycji początkowej, a także inne czynności, które należy wykonać na początku gry.

  2. Proces gry. Obejmuje to ruch obiektów w grze, działania graczy, rozliczanie zdobytych punktów, a także inne czynności, które należy wykonywać w określonych odstępach czasu lub poprzez naciśnięcie przycisków.

  3. Zakończenie gry. Obejmuje to zatrzymanie animacji, ogłoszenie zwycięstwa lub porażki i inne czynności, które należy wykonać na koniec gry.

2. Inicjalizacja gry

Inicjowanie gry składa się tylko z dwóch kroków:

Krok 1: utwórz główną klasę gry.

Aby stworzyć swoją grę w oparciu o silnik gry JavaRush, należy utworzyć klasę i odziedziczyć ją z klasy Game (com.javarush.engine.cell.Game). Dzięki temu Twoja klasa będzie mogła wywoływać metody w silniku gry, a silnik będzie mógł wywoływać Twoje metody. Przykład:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}

Krok 2: zastąp metodę inicjalizacji().

W tej metodzie zostaną wykonane wszystkie czynności niezbędne do rozpoczęcia gry: utworzenie pola gry, utworzenie obiektów gry itp. Wystarczy zadeklarować tę metodę w klasie, która dziedziczy po klasie Game . Przykład:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
        //  Тут выполняем все действия по инициализации игры и ее obiektов
    }
}
Metoda inicjalizacji() jest odpowiednikiem metody main() : w tym miejscu rozpoczyna się wykonywanie całego kodu napisanego dla gry.

3. Tworzenie pola gry

Tworzenie pola gry również składa się tylko z dwóch kroków.

Krok 1: podziel pole gry na komórki.

Całe pole gry jest podzielone na komórki przez silnik gry. Minimalny rozmiar to 3x3, maksymalny to 100x100. Ekran gry ma stały rozmiar. Można go podzielić na różną liczbę komórek. Na przykład szerokość 7 i wysokość 9:
Rozdział
Należy pamiętać, że numeracja komórek zaczyna się od lewego górnego rogu. Aby ustawić rozmiar pola gry, użyj metody void setScreenSize(int szerokość, int wysokość) . Określa wielkość pola gry. Jako parametry przyjmuje liczbę komórek w poziomie (szerokość) i w pionie (wysokość). Zwykle jest wywoływany raz na początku gry. Przykład:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
       //  задали размер поля 7x9 клеток
       setScreenSize(7, 9);
        ...
    }
}
Podczas pisania gry może być konieczne uzyskanie aktualnej szerokości i wysokości pola gry. W tym celu przydatne są metody int getScreenWidth() i int getScreenHeight() .

Krok 2: Włącz lub wyłącz siatkę (opcjonalnie).

Jeśli nie podoba Ci się czarna siatka oddzielająca komórki na boisku, możesz ją wyłączyć. Metoda void showGrid(boolean isShow) włącza i wyłącza siatkę oddzielającą komórki. Domyślnie wyświetlana jest siatka. Aby to wyłączyć, wywołaj tę metodę z parametrem false:
showGrid(false);
Wynik:
Rozdział
Aby ponownie włączyć sieć zadzwoń:
showGrid(true);

4. Program prymitywny

Przykładowy program:
public class MySuperGame extends Game {

    @Override
    public void initialize() {

        //  Создаем игровое поле 3x3 клетки
        setScreenSize(3, 3);
        //  Выключаем отображение сетки
        showGrid(false);
        //  Меняем фон центральной клетки на синий, и отображаем в ней “Х”
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
    }
}
W tym przykładzie rozmiar pola gry jest ustawiony na 3x3, wyświetlanie siatki jest wyłączone, a pomarańczowy symbol „X” wielkości połowy komórki jest ustawiony pośrodku na niebieskim tle. Będzie to pierwsza rzecz, którą zobaczy gracz rozpoczynając grę.

5. Praca z komórkami pola gry

Fakt, że możemy podzielić pole gry na komórki, jest wspaniały, ale co możemy zrobić z samymi komórkami? Każdą komórkę pola gry można ustawić:
  • kolor komórki (kolor tła komórki);
  • tekst (tekst lub liczba);
  • kolor tekstu;
  • rozmiar tekstu jako procent w stosunku do rozmiaru komórki.
Rozważmy metody pracy z komórkami pola gry :
  1. void setCellColor(int x, int y, Color color) — ustawia kolor komórki o współrzędnych (x, y):

    setCellColor(0, 0, Color.RED);
    setCellColor(3, 6, Color.BLACK);
    setCellColor(6, 8, Color.NONE);

  2. Color getCellColor(int x, int y) - zwraca kolor komórki o współrzędnych (x, y):

    Color myColor = getCellColor(2, 0);

  3. void setCellValue(int x, int y, String value) - umieszcza wartość tekstową w komórce o współrzędnych (x, y):

    setCellValue(3, 3, "text");
    setCellValue(0, 8, "W");
    setCellValue(4, 1, "2222");
    setCellValue(6, 6, "");

  4. String getCellValue(int x, int y) - zwraca tekst zawarty w komórce o współrzędnych (x, y):

    String s = getCellValue(3, 3);
    System.out.println(getCellValue(4, 1));

  5. void setCellTextSize(int x, int y, int size) - ustawia rozmiar zawartości komórki wraz ze współrzędnymi (x, y). rozmiar – wysokość tekstu jako procent wysokości komórki:

    setCellTextSize(2 , 0, 70); //  70% высоты клетки

  6. int getCellTextSize(int x, int y) - zwraca rozmiar zawartości komórki wraz ze współrzędnymi (x, y):

    int size = getCellTextSize(2 , 0);

  7. void setCellNumber(int x, int y, int value) - umieszcza wartość liczby w komórce o współrzędnych (x, y):

    setCellNumber(3, 3, 40);
    setCellNumber(0, 8, -8);
    setCellNumber(4, 1, 2222);
    setCellNumber(6, 6, 0);

  8. int getCellNumber(int x, int y) - zwraca liczbę zawartą w komórce wraz ze współrzędnymi (x, y). Jeśli komórka nie zawiera liczby, zwraca 0:

    int i = getCellNumber(3, 3);
    System.out.println(getCellNumber(4, 1));

  9. void setCellTextColor(int x, int y, Color color) — ustawia kolor zawartości (tekstu) w komórce o współrzędnych (x, y):

    setCellTextColor(2, 1, Color.GREEN);
    setCellTextColor(0, 1, Color.NONE);

  10. Color getCellTextColor(int x, int y) - zwraca kolor zawartości (tekstu) w komórce o współrzędnych (x, y):

    Color textColor = getCellTextColor(1, 3);
Dla wygody istnieje kilka metod setCellValueEx() z różnymi zestawami parametrów:
  1. void setCellValueEx(int ​​x, int y, Color cellColor, String value) — ustawia komórkę o współrzędne (x, y) kolor tła cellColor i wartość zawartości:

    setCellValueEx(0, 2, Color.BLUE, "56");

  2. void setCellValueEx(int ​​x, int y, Color cellColor, String value, Color textColor) — ustawia komórkę ze współrzędnymi (x, y) kolorem tła cellColor, wartością treści i kolorem treści textColor:

    setCellValueEx(0, 2, Color.BLACK, "56", Color.GREEN);

  3. void setCellValueEx(int ​​x, int y, Kolor komórkiKolor, Wartość ciągu, Kolor tekstuKolor, int rozmiar tekstu); — ustawia komórkę ze współrzędnymi (x, y) kolorem tła cellColor, wartością treści, kolorem treści textColor i rozmiarem treści textSize:

    setCellValueEx(0, 2, Color.BLACK, "56", Color.GREEN, 70);

6. Praca z kolorem

Kolorami w silniku gry steruje wyliczenie Color , które zawiera unikalne wartości dla 148 kolorów. A także wartość specjalna NONE - brak koloru. Przykład pracy z kolorem:
Color myColor = Color.WHITE;  //  переменной myColor присваивается белый цвет.
Color redColor = Color.RED; //  переменной redColor присваивается красный цвет.
Color blueColor = Color.BLUE; //  переменной blueColor присваивается синий цвет.
Czasami możesz chcieć uzyskać tablicę wszystkich istniejących kolorów. Aby to zrobić, użyj metody wartości() . Na przykład:
//  переменной colors присваивается массив, содержащий все доступные цвета.
Color[] colors = Color.values();
Uzyskanie numeru koloru w palecie jest bardzo proste:
Color color = Color.RED;
int redIndex = color.ordinal(); //  Номер красного цвета

int blueIndex = Color.BLUE.ordinal(); //  Номер синего цвета
Możesz także uzyskać kolor według jego numeru:
//  переменной color присваивается цвет с индексом 10 из enum Color.
Color color = Color.values()[10];

7. Okna dialogowe

Na koniec gry gracz musi zostać poinformowany o zwycięstwie lub porażce. Jest na to specjalna metoda, która wyświetla okno dialogowe na ekranie gry:
void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
Tutaj:
  • cellColor — kolor tła okna dialogowego;
  • wiadomość — tekst wiadomości;
  • textColor — kolor tekstu wiadomości;
  • textSize — rozmiar tekstu wiadomości.
Okno dialogowe zamyka się samoczynnie, jeśli użytkownik naciśnie spację.

8. Metody użyteczności

Liczby losowe są często używane podczas pisania gier. Aby ułatwić uzyskanie liczb losowych, możesz skorzystać z metod silnika złomu:
  1. int getRandomNumber(int max) - zwraca losową liczbę całkowitą od 0 do (max–1) włącznie.

  2. int getRandomNumber(int min, int max) - zwraca losową liczbę całkowitą od min do (max–1) włącznie.

9. Ograniczenia silnika gry

Aby uruchomić gry w serwisie, są one tłumaczone na serwer JavaScript. W związku z tym pojawiają się pewne ograniczenia. W szczególności podczas pisania gier przy użyciu silnika JavaRush nie można pracować z plikami ani używać wszystkich metod klasy System z wyjątkiem currentTimeMillis() , setOut() , setErr() , arrayscopy() . Można także użyć pól err i out . Naruszając te ograniczenia, grę oczywiście będzie można skompilować i uruchomić, ale nie będzie można jej opublikować. Nie będziesz mógł także opublikować gry z nieskończonymi pętlami. To wszystko! Jeśli chcesz dowiedzieć się więcej o sekcji Gry, oto przydatna dokumentacja, która może Ci pomóc:
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION