JavaRush /Java Blog /Random-KO /JavaRush의 "게임" 섹션: 게임 엔진

JavaRush의 "게임" 섹션: 게임 엔진

Random-KO 그룹에 게시되었습니다
JavaRush의 "게임"은 인기 있는 컴퓨터 게임을 작성하기 위한 대규모 작업 프로젝트가 포함된 새로운 섹션입니다. 만드는 것은 보기보다 쉽습니다. 각 프로젝트는 24개의 하위 작업으로 나누어져 있습니다. 단계별로 작업을 완료하면 게임을 작성한 다음 고유한 "기능"을 추가하고 친구들과 공유할 수 있습니다. 장게임은 간단한 JavaRush 게임 엔진을 사용합니다 . 이 기사에서는 주요 기능 과 게임 작성 과정에 대해 설명합니다 .
  1. 소개
  2. 게임 초기화
  3. 경기장 만들기
  4. 원시 프로그램
  5. 경기장의 세포와 협력하기
  6. 색상 작업
  7. 대화 상자
  8. 유틸리티 방법
  9. 게임 엔진의 한계

1. 소개

개발자 측에서 컴퓨터 게임을 구현하는 데에는 세 단계가 있습니다.
  1. 게임 초기화는 준비 작업입니다. 경기장 크기 및 그리기 설정, 초기 위치에 게임 개체 생성 및 설치, 게임 시작 시 수행해야 하는 기타 작업 등이 있습니다.

  2. 게임 프로세스. 여기에는 게임 개체의 이동, 플레이어 작업, 획득한 포인트 계산, 특정 간격으로 수행하거나 버튼을 눌러 수행해야 하는 기타 작업이 포함됩니다.

  3. 게임을 종료합니다. 여기에는 애니메이션 중지, 승리 또는 패배 보고, 게임 종료 시 수행해야 하는 기타 작업이 포함됩니다.

2. 게임 초기화

게임 초기화는 다음 두 단계로 구성됩니다.

1단계: 메인 게임 클래스를 생성합니다.

JavaRush 게임 엔진을 기반으로 게임을 개발하려면 클래스를 생성하고 Game 클래스(com.javarush.engine.cell.Game) 에서 상속해야 합니다 . 이렇게 하면 클래스에 게임 엔진의 메서드를 호출할 수 있는 기능과 엔진이 사용자의 메서드를 호출할 수 있는 기능이 제공됩니다. 예:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}

2단계: 초기화() 메서드를 재정의합니다.

이 방법에서는 게임을 시작하는 데 필요한 모든 작업(플레이 필드 생성, 게임 개체 생성 등)이 수행됩니다. Game 클래스 에서 상속받은 클래스에서 이 메서드를 선언하기만 하면 됩니다 . 예:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
        //  Тут выполняем все действия по инициализации игры и ее an objectов
    }
}
초기화() 메서드는 main() 메서드 와 유사합니다 . 게임용으로 작성된 모든 코드가 실행되기 시작하는 곳입니다.

3. 경기장 만들기

경기장을 만드는 것도 단 두 단계로만 구성됩니다.

1단계: 경기장을 셀로 나눕니다.

전체 경기장은 게임 엔진에 의해 셀로 구분됩니다. 최소 크기는 3x3이고 최대 크기는 100x100입니다. 게임 화면의 크기는 일정합니다. 다양한 수의 셀로 나눌 수 있습니다. 예를 들어 너비가 7이고 높이가 9인 경우:
장
셀 번호는 왼쪽 상단부터 시작됩니다. 경기장의 크기를 설정하려면 void setScreenSize(int width, int height) 메소드를 사용하세요 . 경기장의 크기를 설정합니다. 가로(너비) 및 세로(높이) 셀 수를 매개변수로 사용합니다. 일반적으로 게임이 시작될 때 한 번 호출됩니다. 예:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
       //  задали размер поля 7x9 клеток
       setScreenSize(7, 9);
        ...
    }
}
게임을 작성할 때 현재 경기장의 너비와 높이를 가져와야 할 수도 있습니다. int getScreenWidth()int getScreenHeight() 메소드는 이에 유용합니다 .

2단계: 그리드를 켜거나 끕니다(선택 사항).

경기장에서 셀을 구분하는 검은색 격자가 마음에 들지 않으면 끌 수 있습니다. void showGrid(boolean isShow) 메소드는 셀을 구분하는 그리드를 켜고 끕니다. 기본적으로 그리드가 표시됩니다. 이를 끄려면 false 매개변수와 함께 이 메소드를 호출하십시오.
showGrid(false);
결과:
장
그리드를 다시 켜려면 다음을 호출하세요.
showGrid(true);

4. 원시 프로그램

예제 프로그램:
public class MySuperGame extends Game {

    @Override
    public void initialize() {

        //  Создаем игровое поле 3x3 клетки
        setScreenSize(3, 3);
        //  Выключаем отображение сетки
        showGrid(false);
        //  Меняем фон центральной клетки на синий, и отображаем в ней “Х”
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
    }
}
이 예에서는 경기장 크기가 3x3으로 설정되고 그리드 표시가 꺼지며 파란색 배경 중앙에 주황색 반쪽 셀 크기의 "X" 기호가 설정됩니다. 이것은 플레이어가 게임을 시작할 때 가장 먼저 보게 되는 것입니다.

5. 경기장의 세포와 협력하기

우리가 경기장을 세포로 나눌 수 있다는 사실은 훌륭하지만 세포 자체로 무엇을 할 수 있습니까? 경기장의 각 셀은 다음과 같이 설정할 수 있습니다.
  • 셀 색상(셀 배경색);
  • 텍스트(텍스트 또는 숫자);
  • 텍스트 색상;
  • 셀 크기에 대한 백분율로 표시되는 텍스트 크기입니다.
경기장의 셀을 사용하는 방법을 고려해 보겠습니다 .
  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)를 사용하여 셀 내용의 크기를 설정합니다. size – 셀 높이에 대한 백분율로 나타낸 텍스트 높이:

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

  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) — 좌표 (x, y) 배경색 cellColor 및 콘텐츠 값으로 셀을 설정합니다.

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

  2. void setCellValueEx(int ​​​​x, int y, Color cellColor, String value, Color textColor) — 좌표(x, y) 배경색 cellColor, 콘텐츠 값 및 콘텐츠 색상 textColor로 셀을 설정합니다.

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

  3. void setCellValueEx(int ​​​​x, int y, Color cellColor, String value, Color textColor, int textSize); — 좌표(x, y) 배경색 cellColor, 콘텐츠 값, 콘텐츠 색상 textColor 및 콘텐츠 크기 textSize로 셀을 설정합니다.

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

6. 색상 작업

게임 엔진의 색상은 148가지 색상에 대한 고유 값을 포함하는 Color 열거형 에 의해 제어됩니다 . 또한 특별한 값 NONE - 색상이 없습니다. 색상 작업의 예:
Color myColor = Color.WHITE;  //  переменной myColor присваивается белый цвет.
Color redColor = Color.RED; //  переменной redColor присваивается красный цвет.
Color blueColor = Color.BLUE; //  переменной blueColor присваивается синий цвет.
때로는 기존의 모든 색상 배열을 얻고 싶을 수도 있습니다. 이를 수행하려면 value() 메소드를 사용하십시오 . 예를 들어:
//  переменной colors присваивается массив, содержащий все доступные цвета.
Color[] colors = Color.values();
팔레트에서 색상 번호를 얻는 것은 매우 간단합니다.
Color color = Color.RED;
int redIndex = color.ordinal(); //  Номер красного цвета

int blueIndex = Color.BLUE.ordinal(); //  Номер синего цвета
숫자로 색상을 얻을 수도 있습니다.
//  переменной color присваивается цвет с индексом 10 из enum Color.
Color color = Color.values()[10];

7. 대화 상자

게임이 끝나면 플레이어에게 승리 또는 패배 여부를 알려주어야 합니다. 게임 화면에 대화 상자를 표시하는 특별한 방법이 있습니다.
void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
여기:
  • cellColor — 대화 상자의 배경색입니다.
  • 메시지 — 메시지 텍스트;
  • textColor — 메시지 텍스트 색상입니다.
  • textSize — 메시지 텍스트 크기입니다.
사용자가 스페이스바를 누르면 대화 상자가 저절로 닫힙니다.

8. 유틸리티 방법

난수는 게임을 작성할 때 자주 사용됩니다. 난수를 더 쉽게 얻으려면 스크랩 엔진 방법을 사용할 수 있습니다.
  1. int getRandomNumber(int max) - 0부터 (max–1)까지의 임의의 정수를 반환합니다.

  2. int getRandomNumber(int min, int max) - min부터 (max–1)까지의 임의의 정수를 반환합니다.

9. 게임 엔진의 한계

사이트에서 게임을 실행하려면 서버에서 JavaScript로 변환됩니다. 이와 관련하여 몇 가지 제한 사항이 발생합니다. 특히 JavaRush 엔진을 사용하여 게임을 작성할 때 파일 작업을 할 수 없으며 currentTimeMillis() , setOut() , setErr() , arrayscopy() 를 제외한 System 클래스의 모든 메서드를 사용할 수 없습니다 . errout 필드를 사용할 수도 있습니다 . 이러한 제한 사항을 위반하면 게임을 컴파일하고 실행할 수는 있지만 게시할 수는 없습니다. 또한 무한 루프가 포함된 게임을 게시할 수 없습니다. 그게 다야! 게임 섹션에 대해 자세히 알아보려면 다음과 같은 유용한 문서를 참고하세요.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION