Don't Panic
in Java ☕ 1분 읽기

[Java]Java 버블버블게임

목차

AWT 라이브러리

그림을 그려주는 라이브러리. 이 개념을 잘 알면 안드로이드에서도 잘 써먹을 수 있다.

  • JFrame은 도화지 역할을 한다.
  • JPanel로 그림을 그릴 수 있다.

스레드 설계

main 스레드는 버블 프레임에서 키보드 입력을 받아 실행시키는 것이 끝(이벤트 핸들러)이다.

동시에 실행시킬 때, left가 3초·right가 5초라면 단일 스레드로는 절대 동시에 실행되지 않는다. 하지만 각자 별도로 실행하면 동시 실행이 가능하다.

리스너는 OS가 실행한다.


물방울 자체도 새로운 스레드가 되어야 한다.

  • 이동은 오른쪽, 왼쪽, 위쪽 3가지가 가능하다.
  • 단, 캐릭터와 달리 동시 이동은 안 된다(오른쪽 위, 왼쪽 위 같은 대각선 불가).

물방울 스레드 구조

버블이 만들어질 때마다 스레드가 한 개만 있으면 서비스에서 체크가 가능하다. 따로 스레드를 돌릴 필요가 없으며, 따로 만들면 낭비다.

스레드 좌표 확인 흐름

스레드가 while을 돌면서 계속 좌표를 확인할 텐데, 굳이 이렇게 할 필요가 있을까?


객체 소멸과 화면 갱신

main을 가진 클래스는 모든 객체(heap)의 정보를 가지고 있다.

main 클래스의 객체 정보 관리

메모리에서 소멸시킬 메서드는?

  • 자체적으로 소멸시켜야 한다.
  • 메모리에서 소멸시키고 그림을 다시 그려야 한다.
  • 전체를 화면에서 지울 수 있어야 한다.

객체 소멸 처리

충돌 판정 (적군과 물방울)

버블 입장에서 적군을 파악하거나, 적군이 물방울 정보를 파악하는 등 어디서 파악하는지가 굉장히 중요하다.

물방울이 움직이면서 위치값을 확인해 처리하게 하면, 하나의 물방울 스레드가 하나의 적군을 처리하므로 굉장히 심플해진다.


물방울의 x좌표를 5, 적의 x좌표를 10이라 하면:

5 - 10 = -5

위치값 차이로 충돌 판정


플레이어 입장에서는 playerservice 입장에서 코드가 진행되어야 한다.