이어서 만들어보았다
8. 효과음 넣기
효과음이 없으니 너무 심심하므로
이쯤에서 지금까지 만든 부분에 효과음을 넣어보도록 하자
자바 기본 라이브러리로는 mp3 파일을 재생할 수 없으므로
JLayer라는 외부 라이브러리를 다운 받아 사용했다
이를 이용해 먼저 알피가 점프할 때 효과음이 나오도록 해보았다
점프 키인 스페이스바를 눌렀을 때 해당 소리 파일을 담은 Music 객체를 만들고
스레드를 실행시켜 효과음이 나도록 했다
다음으로 eatItems 메서드 안에서 각 아이템에 맞는 효과음이 나오도록 설정했다
이어서 무적 상태에서 몬스터를 먹을 때에도 효과음이 나게 했다
바나나를 먹을 때랑 효과음이 같으므로 똑같은 파일을 썼다
9. 게임 오버 구현하기
무적 상태가 아닐 때 몬스터에 닿으면 게임오버가 되고
벽돌 밖으로 떨어져도 역시 게임오버가 된다
먼저 무적이 아닐 때 몬스터에 닿은 경우를 구현하기 위해
touchMons 메서드에서 eatGrape가 false일 때 게임오버 효과음을 내고
모든 몬스터 객체의 스레드를 종료한 뒤, 2초 정도 후에 stage 객체의 스레드도 종료시킨 후
restartStage 메서드를 불러 처음 화면으로 되돌리게 했다
벽돌 범위를 벗어나면 화면 아래쪽으로 떨어지도록 하기위한 dropAlfy 메서드를 정의했다
벽돌 범위를 벗어났을 시 그 아래쪽에 다른 벽돌이 있다면 그 위로 떨어지도록 만들고
그 아래쪽에 다른 벽돌이 없다면 화면 아래쪽으로 떨어지도록 하고 게임오버가 되도록 만들었다
이 경우에도 마찬가지로 게임오버 효과음을 내고 각 몬스터의 스레드를 종료시킨 후
2초 정도 후에 Stage 스레드를 종료시키고 restartStage 메서드를 호출하여 재시작하도록 했다
restartStage 메서드는 BricksAndLadders 클래스에 정의하였는데
리스트의 내용이 남아있으면 계속 화면에 그리기 때문에 게임오버가 반복되면 결국 이것이 쌓여서
과부하가 걸리게 되므로 게임오버가 되어 재시작될 때 리스트 내용도 완전히 초기화하도록 했다
이후 각 스레드를 다시 생성하여 실행하고 알피의 위치를 초기화했다
이것을 사용하기 위해 Main 클래스에서 bal 변수에 BricksAndLadders 객체를 담아두었다
위에서 정의한 dropAlfy 메서드는 Stage 스레드에서
반복호출하여 게임오버 및 위치 변화를 판단하게 했다
interrupt를 호출하는 close 메서드를 정의하고 while의 조건에 isInterrupt()를 추가하여
close 메서드에 의해 스레드가 interrupt 되었을 때 while문을 탈출하여 스레드를 종료하게 했다
Monster 객체의 스레드 종료는 루프 탈출을 위한 변수 stop의 값을 true로 만드는 close가 호출되었을 시
반복문을 벗어나면서 이루어진다.
10. 스테이지 클리어 시 메시지 출력하기
몹들을 피해 아이템을 다 먹고 나면 'LEVEL COMPELETED !!!' 메시지를 띄워
스테이지를 클리어 했음을 알려주도록 해보자
Stage 클래스에 해당 이미지를 추가해주고
메시지를 띄울 처음 위치를 x, y에 정해주었다
또한 run 메서드에서 게임오버 여부 판단을 위한 변수로 stop를 추가했다
Stage 클래스의 run 메서드에서
close 호출로 인해 스레드가 종료된 것이 아니라
아이템을 다 먹어서 반복문을 벗어난 것이라면 스테이지를 클리어한 것이므로
stageClear 변수의 값을 true로 바꿔주고 해당 효과음을 재생시킨 뒤
y값을 변화시키게 하여 위에서 아래로 메시지가 내려오는 애니메이션 효과가 나오게 만들었다
Stage 클래스에 drawSign 메서드를 만들어주고
마지막으로 BricksAndLadders 클래스의 screenDraw 메서드 안에서
stageClear 값이 true일 경우에 drawSign 메서드를 호출하여 화면에 그리도록 만들었다
그렇게 탄생한 짭돌과 사다리
엉성한 부분이 많지만 그래도 전체적으로 비슷하게 구현되었다
전체 코드를 원하시는 분들은 깃허브에서 받아보시면 되겠다.
다만 엉성하기 짝이 없는 졸작 코드임을 감안해주셔야 한다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
자바 게임 만들기 - '벽돌과 사다리' 게임 구현해보기 #2 (0) | 2022.02.20 |
---|---|
자바 게임 만들기 - '벽돌과 사다리' 게임 구현해보기 #1 (10) | 2022.02.18 |
자바(Java) 나누기 연산자 사용 시 유의할 점 (0) | 2021.07.24 |
자바(Java) '향상된' for문(Enhanced For Statement) (0) | 2021.07.22 |
댓글