- 해당 애플리케이션은 사용자가 조정하는 뱀이 있고 사과를 먹으면 몸이 커지며 윈도우 밖으로 벗어날 경우 게임이 종료된다
- snake_game의 윈도우 생성(윈도우 초기화)
- 사용자의 입력값(방향키)에 따라 달라지는 게임 이미지를 연속적으로 그려주고 게임 상황을 기록해줌
- 해당 애플리케이션 실행(GameFrame 생성)
위의 사진을 기반으로 설명
-
해당 뱀의 크기는 6
-
사용자가 >(오른쪽 방향키)를 눌렀다고 가정하면 클래스 GamePanel의 인스턴스 변수의 값이 'R'로 저장됨
-
노란색 부분이 다음 위치
-
뱀의 위치 정보는 int[] x, int[] y로 표현함
-
현재 사진을 보면 행(y)는 고정되어 있고 열(x)로 움직이는 상황
-
게임 화면에 부딪히지 않는 경우 direction 방향으로 계속해서 뱀의 위치 정보를 업데이트함
-
즉, 위의 사진의 경우에는 뱀의 시작 위치가 [0, 0, 0, 0, 0, 0] 이라고 했을때(첫번재 원소는 머리 위치 마지막 원소는 꼬리 위치)
-
[25, 0, 0, 0, 0, 0] -> [50, 25, 0, 0, 0, 0] -> [75, 50, 25, 0, 0, 0] -> [100, 75, 50, 25, 0, 0] -> [125, 100, 75, 50, 25, 0] ,,,, 으로 위치 정보가 업데이트됨
(위치 정보 업데이트 관련 move() 메서드의 코드)
📝 결론 : 사용자가 방향키를 입력하면 GamePanel의 direction 인스턴스 변수가 입력된 방향 정보를 저장하고 move()메서드를 통해서 뱀의 위치 정보를 업데이트함, 이때 머리부터 UNIT_SIZE를 더해주고 각각의 바디 부분에 차례로 더해줌
위의 사진을 기반으로 설명
- newApple() 메서드를 통해서 사과의 위치를 랜덤하게 생성함
- 위의 메서드에서는 0 에서부터 스크린의 크기를 각각 유닛의 사이즈(사과의 크기)로 나눈 값까지의 수 중에서 랜덤하게 선택하고 그 값에 다시 유닛의 사이즈를 곱해줌
- 나눈 이유는 그리드를 생각하면 그리드의 총 개수는 해당 나눈 값이 됨 또한, 유닛 사이즈를 곱해준 이유는 각 그리드의 라인들이 유닛 사이즈 간격 만큼 띄워져 있기 때문임
- 사과를 그려주는 부분을 확인해 보면 생성된 사과의 위치를 기준으로 사과의 크기(유닛 사이즈)만큼 빨간색을 채워줌
- 만약 사과의 크기(유닛 사이즈)보다 작은 값만큼 색을 칠해줄 경우 밑에 사진 처럼 채워짐
📝 결론 : newApple() 메서드를 통해서 해당 그리드에서 랜덤하게 (x, y)를 생성하고 fillOval(x, y, UNIT_SIZE, UNIT_SIZE)를 통해서 (x, y) 기준으로 유닛 사이즈만큼의 특정 색깔을 채워짐
-
참고 자료
-
위의 블로그 글 설명 기반으로 공부한 내용 정리
-
각종 UI를 쉽게 배치할 수 있게끔 도와줌
-
예를 들어서, 밑 바탕이 Jframe이 되고 그 위에 Jpanel 그리고 JLabel, JTextFile ,,, 등 을 통해서 내가 만들고자 하는 애플리케이션의 UI를 손 쉽게 배치할 수 있음
-
현재 게임에서는 기본적으로 게임 화면의 바탕이 되는 UI를 담달하고 있음
-
참고 자료
-
위의 블로그 글 설명 기반으로 공부한 내용 정리
-
사용자가 어떤 값을 입력하는지에 따라 적절한 코드를 수행시켜줌
-
사용자와 애플리케이션이 소통할 수 있도록 연결해주는 매개체
-
발생한 이슈에 따른 애플리케이션 실행
-
간단하게 ActionLister, JFrame, JPanel 공부용으로 만들었음
- 참고자료
- 일종의 스레드 클래스
- 사용자가 사용하기 편리하도록 편의성을 제공