CodeGym /Java блог /Случаен /Раздел за игри в CodeGym: Game engine
John Squirrels
Ниво
San Francisco

Раздел за игри в CodeGym: Game engine

Публикувано в групата
„Игри“ от CodeGym е нов раздел с големи задачи, които включват писане на популярни компютърни игри. Те са по-лесни за създаване, отколкото изглежда: всеки проект е разделен на двадесет подзадачи. Изпълнявайки задачи стъпка по стъпка, вие ще напишете своя собствена игра и след това можете да добавите уникални функции и да я споделите с приятели. Раздел „Игри“ в CodeGym: Двигател за игри – 1Игрите използват простия двигател на играта CodeGym . В тази статия ще опишем нейните ключови характеристики и How изглежда процесът на писане на играта.

1. Въведение

За разработчика има три етапа за внедряване на компютърна игра:
  1. Инициализация на играта — Този етап се състои от подготвителни действия: задаване на размера на игралното поле, чертане на игралното поле, създаване на игрови обекти и поставянето им в първоначалните им позиции и други действия, които трябва да бъдат извършени в началото на играта.

  2. Процес на игра. Този етап включва преместване на игрални обекти, действия на играча, запазване на резултата и други действия, които трябва да се извършват на определена честота or при натискане на бутони.

  3. Завършване на играта. Този етап включва спиране на анимация, отчитане на печалба or загуба и други действия, които трябва да бъдат извършени в края на играта.

2. Инициализация на играта

Инициализирането на играта се състои само от две стъпки: Стъпка 1: Създайте основния клас на играта. За да разработите своя собствена игра с помощта на игровия двигател CodeGym, трябва да създадете клас, който наследява Gameкласа (com.codegym.engine.cell.Game). Това дава на вашия клас възможността да извиква методите на двигателя на играта и дава възможност на двигателя да извиква вашите методи. Например:

import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}
Стъпка 2: Заменете метода за инициализация(). Всички действия, необходими за стартиране на играта, ще се извършват в този метод: създаване на игрално поле, създаване на игрови обекти и т.н. Просто трябва да декларирате този метод в класа, който наследява класа Game. Например:

import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
        // Here we perform all actions to initialize the game and its objects
    }
}
Методът initialize()е аналогичен на main()метода: той е отправната точка за целия code, написан за играта.

3. Създаване на игрално поле

Създаването на игрално поле също се състои само от две стъпки. Стъпка 1: Разделете игралното поле на клетки. Цялото игрално поле е разделено на клетки от двигателя на играта. Минималният размер е 3x3; максимумът е 100х100. Размерите на екрана на играта са постоянни. Тя може да бъде разделена на различен брой клетки. Например 7 клетки широки и 9 клетки високи: Раздел „Игри“ в CodeGym: Двигател за игри – 2Имайте предвид, че клетките са номерирани, започвайки от горния ляв ъгъл. За да зададете размера на игралното поле, използвайте void setScreenSize(int width, int height)метода. Той определя размера на игралното поле. Параметрите му представляват броя на клетките хоризонтално (ширина) и вертикално (височина). Обикновено се извиква веднъж при стартиране на играта. Например:

import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
       // Set the field size to 7 cells x 9 cells
       setScreenSize(7, 9);
        ...
    }
}
Когато пишете игра, може да се наложи да получите текущата ширина и височина на игралното поле. За да направите това, методите int getScreenWidth()и int getScreenHeight()ще ви бъдат полезни. Стъпка 2: Включете or изключете решетката (по избор). Ако не ви харесва черната решетка, разделяща клетките на игралното поле, можете да я изключите. Методът void showGrid(boolean isShow)включва и изключва мрежата. По подразбиране се показва мрежата. За да го изключите, извикайте този метод с false като аргумент:

showGrid(false);
Резултат: Раздел „Игри“ в CodeGym: Двигател на играта – 3За да включите отново мрежата, обадете се на:

showGrid(true);

4. Примитивна програма

Ето пример за програма:

public class MySuperGame extends Game {

    @Override
    public void initialize() {

        // Create a playing field that is 3 cells x 3 cells
        setScreenSize(3, 3);
        // Turn off the grid
        showGrid(false);
        // Change the background of the center cell to blue, and display an "X" in it.
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
    }
}
В този пример полето за игра е зададено на 3x3, решетката е изключена и оранжево „X“ на половината от размера на клетката е зададено на син фон в централната клетка. Това ще бъде първото нещо, което играчът вижда, когато играта започне.

5. Работа с клетки на игралното поле

Фактът, че можем да разделим игралното поле на клетки, е страхотен, но Howво можем да направим със самите клетки? Можете да зададете следните свойства за всяка клетка на игралното поле:
  • цвят на клетката (цвят на фона на клетката);
  • текст (текст or число);
  • цвят на текста;
  • размер на текста като процент от размера на клетката.
Нека да разгледаме методите за работа с клетките на игралното поле :
  1. void setCellColor(int x, int y, Color color)— задава цвета на клетката с координати (x, y):

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

  2. Color getCellColor(int x, int y)— връща цвета на клетката с координати (x, y):

    
    Color myColor = getCellColor(2, 0);
    

  3. void setCellValue(int x, int y, String value)— задава текста на клетката с координати (x, y), равни на низа в параметъра стойност:

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

  4. String getCellValue(int x, int y)— връща текста, съдържащ се в клетката с координати (x, y):

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

  5. void setCellTextSize(int x, int y, int size)— задава размера на съдържанието на клетката с координати (x, y). Параметърът за размер е височината на текста като процент от височината на клетката:

    
    setCellTextSize(2 , 0, 70); // 70% of the cell height
    

  6. int getCellTextSize(int x, int y)— връща размера на съдържанието на клетката с координати (x, y):

    
    int size = getCellTextSize(2 , 0);
    

  7. void setCellNumber(int x, int y, int value)— задава текста на клетката с координати (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)— връща числото, съдържащо се в клетката с координати (x, y). Ако клетката не съдържа число, връща 0:

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

  9. void setCellTextColor(int x, int y, Color color)— задава цвета на съдържанието (текста) на клетката с координати (x, y):

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

  10. Color getCellTextColor(int x, int y)— връща цвета на съдържанието (текста) на клетката с координати (x, y):

    
    Color textColor = getCellTextColor(1, 3);
    
За удобство има няколко setCellValueEx()метода с различни набори от параметри:
  1. void setCellValueEx(int x, int y, Color cellColor, String value)— задава цвета на фона (cellColor) и съдържанието (стойността) на клетката с координати (x, y):

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

  2. void setCellValueEx(int x, int y, Color cellColor, String value, Color textColor)— задава цвета на фона (cellColor), съдържанието (value) и цвета на текста (textColor) на клетката с координати (x, y):

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

  3. void setCellValueEx(int x, int y, Color cellColor, String value, Color textColor, int textSize)— задава цвета на фона (cellColor), съдържанието (value), цвета на текста (textColor) и размера на текста (textSize) на клетката с координати (x, y):

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

6. Работа с цвят

Отговаря Color enumза цветовете в двигателя на играта. Има уникални стойности за 148 цвята. Освен това има специална стойност (NONE), която не представлява цвят. Ето пример за работа с цвят:

Color myColor = Color.WHITE;  // The myColor variable is set to white.
Color redColor = Color.RED;  // The redColor variable is set to red.
Color blueColor = Color.BLUE;  // The blueColor variable is set to light blue.
Понякога може да се наложи да получите набор от всички съществуващи цветове. За да направите това, използвайте values()метода. Например:

Color[] colors = Color.values();  // The colors variable is assigned an array containing all available colors.
Много е лесно да получите индекс на цвят в палитрата:

Color color = Color.RED;
int redIndex = color.ordinal();  // Index of red

int blueIndex = Color.BLUE.ordinal();  // Index of blue
Можете също да получите цвят по неговия индекс:

Color color = Color.values()[10];  // The color variable is assigned the color with index 10 in the Color enum.

7. Диалогови прозорци

В края на играта трябва да съобщите за победа or загуба на играча. За да направите това, има специален метод, който показва диалогов прозорец на екрана на играта:

void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
Тук:
  • cellColorе цветът на фона на диалоговия прозорец;
  • messageе текстът на съобщението;
  • textColorе цветът на текста на съобщението;
  • textSizeе размерът на текста на съобщението.
Диалоговият прозорец се затваря сам, ако потребителят натисне интервала.

8. Полезни методи

При писането на игри често се използват произволни числа. За да улесните получаването на случайни числа, можете да използвате следните помощни методи, предоставени от двигателя на играта:
  1. int getRandomNumber(int max)— връща произволно цяло число от 0 до (max-1) включително.

  2. int getRandomNumber(int min, int max)— връща произволно цяло число от min до (max-1) включително.

Това е всичко за сега! Ако искате да научите повече за раздела „Игри“, ето полезна documentация, която може да ви помогне:
Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION