게임만들기(1) - "JAVADOT" 플랫폼게임
2021. 7. 8. 01:08ㆍ프로그래밍/개인프로젝트
JavaUI를 이용해서 플랫폼게임을 만드는 과정을 기록합니다.
게임의 컨셉:
로그라이크 플랫폼 게임
시작시 기본적으로 점프횟수가 1 주어지고 주황색으로 표시한 enegy를 먹으면 점프횟수가 1개씩 증가한다.
점프시 점프횟수 1차감하고 점프횟수가 0이되면 점프를 할 수 없다
회색 직사각형으로 표시한 door에 닿으면 다음층으로 넘어간다
맵밖으로 아웃되거나, 시간을 초과하거나, esc버튼을 눌러 초기화하면 1층부터 다시시작한다
+ 조작법, 층수표시등을 추가해야하고 맵은 더 복잡하고 가로로 길게 구현할 예정이다
만들기에 앞서 대략적인 설계를 했다
public void start(stage primaryStage){
MainPage();
Scene scene = new Scene(mainContainer);
scene.setOnKeyPressed(e -> keys.put(e.getCode(), true));
scene.setOnKeyReleased(e -> keys.put(e.getCode(), false));
primaryStage.setTitle("JAVADOT");
primaryStage.setScene(scene);
primaryStage.show();
AnimationTimer timer = new AnimationTimer() {
@Override
public void handle(long now) {
sceneUpdate();
}
};
timer.start();
}
// 메인함수를 시작하는 메소드이다
// 구현한 MainPage()메소드사용
// scene생성
// 키이벤트등록
// scene등록, 제목설정. show메소드 사용
// AnimationTimer를 통해 지속적으로 데이터값을 받아온다
private Node createObject(int x, int y, int w, int h, Color color) {
Rectangle object = new Rectangle(w, h);
object.setTranslateX(x);
object.setTranslateY(y);
object.setFill(color);
blockContainer.getChildren().addAll(object);
return object;
}
// 사각형 객체를 생성하는 메소드
// player, block, energy, door등을 생성하는데 사용한다
private void MainPage() {
Rectangle bg = new Rectangle(WIDTH, HEIGHT, Color.IVORY);
// 배경화면으로 쓰일 bg생성
for (int i = 0; i < BlockData.BLOCK1.length; i++) {
//범위 : 0 ~ BlockData클래스의 BLOC1 '배열의 길이' length;
String line = BlockData.BLOCK1[i];
for (int j = 0; j < line.length(); j++) {
// 범위 :0 ~ BlockData클래스의 각 배열당 '문자열의 길이' length();
switch (line.charAt(j)) {
// line의 문자열을 하나하나 체크해서 0이면 빈값 1이면 블럭만들기 (
case '0': //빈값
break;
case '1': // block객체생성
Node block = createObject(j*10, i*10, 10, 10, Color.LIGHTGRAY);
blocks.add(block);
break;
case '2':// energy객체 생성
Node energy = createObject(j*10, i*10, 10, 10, Color.LIGHTGRAY);
blocks.add(enegry);
break;
case '3': // door객체 생성
Node door = createObject(j*10, i*10, 10, 10, Color.LIGHTGRAY);
blocks.add(door);
break;
}
}
}
player = createPlayer(0, 600, 20, 20, Color.DODGERBLUE);
mainContainer.getChildren().addAll(bg, blockContainer);
}
private boolean isPressed(keyCode Key){
return keys.getOrDefault(key, false);
//keys객체를 만드는 HashMap클래스에 쓰이는 메소드,
//getOrDefault = key가 존재하면 key값을 반환하고 존재하지않으면 디폴트값인 false를 반환
}
private void sceneUpdate() {
왼쪽 키 입력시 ~~~
오른쪽 키 입력시 ~~~
스페이스바 입력시 ~~~
낙하속도할당 후 movePlayerY에 전달
}
private void movePlayerX(int value) {
좌/우이동, 카메라이동,energy와 충돌구현, door와 충돌구현
}
private void movePlayerY(int value) {
player객체 낙하, block과 충돌구현, 점프
}
'프로그래밍 > 개인프로젝트' 카테고리의 다른 글
게임만들기(3) - "JAVADOT" 플랫폼게임 (0) | 2021.07.12 |
---|---|
게임만들기(2) - "JAVADOT" 플랫폼게임 (0) | 2021.07.09 |
변수의 기본형 데이터 타입 사용시 (효율중시, 성능중시) (0) | 2021.06.22 |
(JavaFX) - Event Handler (0) | 2021.06.20 |
Java - public static void의 의미 (0) | 2021.06.19 |